内容简介:在我们使用chrome作为爬虫获取网页数据时,往往需如下几步。我们实际的编码往往集中在第4步,并且,在开发过程中,解析网页数据往往不是一步到位的,需要经过反复多次调试才行。如果每次调试都需要经过这一个过程就显得效率过低。此时,我们希望有一种类似调试程序中的"附加到进程"类似的方法,不必每次都打开chrome,跳转到目标页面,直接进行第4步,解析现有页面。本文这里就介绍一个这样的方法。
在我们使用chrome作为爬虫获取网页数据时,往往需如下几步。
-
打开chrome
-
导航至目标页面
-
等待目标页面加载完成
-
解析目标页面数据
-
保存目标页面数据
-
关闭chrome
我们实际的编码往往集中在第4步,并且,在开发过程中,解析网页数据往往不是一步到位的,需要经过反复多次调试才行。如果每次调试都需要经过这一个过程就显得效率过低。
此时,我们希望有一种类似调试程序中的"附加到进程"类似的方法,不必每次都打开chrome,跳转到目标页面,直接进行第4步,解析现有页面。本文这里就介绍一个这样的方法。
以远程调试的方式启动chrome:
"C:\Program Files (x86)\Google\Chrome\Application\Chrome.exe" -- remote - debugging - port = 9222 -- user - data - dir = "r:\chrome\cache"
手动跳转到目标网页。
此时就可以通过 http://127.0.0.1:9222/json 查看调试信息了。
[{
"description" : "" ,
"devtoolsFrontendUrl" : "/devtools/inspector.html?ws=127.0.0.1:9222/devtools/page/9067DC581E400BFF607DC63792BBCD2E" ,
"faviconUrl" : "https://tianfang.cnblogs.com/favicon.ico" ,
"id" : "9067DC581E400BFF607DC63792BBCD2E" ,
"title" : " 天方 - 博客园 " ,
"type" : "page" ,
"url" : "https://tianfang.cnblogs.com/" ,
"webSocketDebuggerUrl" : "ws://127.0.0.1:9222/devtools/page/9067DC581E400BFF607DC63792BBCD2E"
}]
调试地址为: "ws://127.0.0.1:9222/devtools/page/9067DC581E400BFF607DC63792BBCD2E"。在实际运行过程中,可以通过axios库来自动获取这个地址:
const axios = require ( 'axios' );
async function get_debug_url () {
var rsp = await axios . get ( 'http://127.0.0.1:9222/json' );
return rsp . data [ 0 ]. webSocketDebuggerUrl ;
}
利用 puppeteer.connect(options) 连接,获得的是一个browser对象,在利用 browser.pages() 获取当前打开的page,直接操作page即可。
const puppeteer = require ( 'puppeteer-core' );
async function run () {
var ws = await get_debug_url ();
const browser = await puppeteer . connect ({
"browserWSEndpoint" : ws ,
"defaultViewport" : { width: 1000 , height: 600 }
});
const pages = await browser . pages ();
const page = pages [ 0 ];
await page . screenshot ({ path: 'screen.png' });
console . log ( "complte" );
};
run ();
究其本质,这里和我文章 使用CefSharp在.Net程序中嵌入Chrome浏览器(六)——调试 中的远程调试的原理是一样的。这里我虽然是用的puppeteer为例,其它基于Chrome DevTools Protocol的 工具 应该也是一样可以用的。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- iOS常用调试方法:断点调试
- 断点调试和日志调试之间的平衡点:函数计算调试之 Python 篇
- .NET高级调试系列-Windbg调试入门篇
- VisualStudio 通过外部调试方法快速调试库代码
- GDB 调试 Mysql 实战(二)GDB 调试打印
- 使用gdb调试工具上手调试php和swoole源码
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
React Native开发指南
[美]艾森曼 / 黄为伟 / 人民邮电出版社 / 2016-6-1 / CNY 59.00
本书通过丰富的示例和详细的讲解,介绍了React Native这款JavaScript框架。在React Native中利用现有的JavaScript和React知识,就可以开发和部署功能完备的、真正原生的移动应用,并同时支持iOS与Android平台。除了框架本身的概念讲解之外,本书还讨论了如何使用第三方库,以及如何编写自己的Java或Objective-C的React Native扩展。一起来看看 《React Native开发指南》 这本书的介绍吧!