使用Puppeteer进行数据抓取(四)——快速调试

栏目: Node.js · 发布时间: 6年前

内容简介:在我们使用chrome作为爬虫获取网页数据时,往往需如下几步。我们实际的编码往往集中在第4步,并且,在开发过程中,解析网页数据往往不是一步到位的,需要经过反复多次调试才行。如果每次调试都需要经过这一个过程就显得效率过低。此时,我们希望有一种类似调试程序中的"附加到进程"类似的方法,不必每次都打开chrome,跳转到目标页面,直接进行第4步,解析现有页面。本文这里就介绍一个这样的方法。

在我们使用chrome作为爬虫获取网页数据时,往往需如下几步。

  1. 打开chrome
  2. 导航至目标页面
  3. 等待目标页面加载完成
  4. 解析目标页面数据
  5. 保存目标页面数据
  6. 关闭chrome

我们实际的编码往往集中在第4步,并且,在开发过程中,解析网页数据往往不是一步到位的,需要经过反复多次调试才行。如果每次调试都需要经过这一个过程就显得效率过低。

此时,我们希望有一种类似调试程序中的"附加到进程"类似的方法,不必每次都打开chrome,跳转到目标页面,直接进行第4步,解析现有页面。本文这里就介绍一个这样的方法。

以远程调试的方式启动chrome:

"C:\Program Files (x86)\Google\Chrome\Application\Chrome.exe" -- remote - debugging - port = 9222 -- user - data - dir = ".\UserData"

手动跳转到目标网页。

使用Puppeteer进行数据抓取(四)——快速调试

获取调试借口

访问 http://127.0.0.1:9222/json/version 可以得到如下信息

{
"Browser" : "Chrome/71.0.3578.98" ,
     "Protocol-Version" : "1.3" ,
     "User-Agent" : "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36" ,
     "V8-Version" : "7.1.302.31" ,
     "WebKit-Version" : "537.36 (@15234034d19b85dcd9a03b164ae89d04145d8368)" ,
     "webSocketDebuggerUrl" :      "ws://127.0.0.1:9222/devtools/browser/1b9f6012-6b9b-4450-a6a5-a0bbc8b54ee8"
}

其中的webSocketDebuggerUrl就是主动连接的调试接口。在实际运行过程中,可以通过axios库来自动获取这个地址:

const axios = require ( 'axios' );
async function get_debug_url () {
     var rsp = await axios . get ( 'http://127.0.0.1:9222/json/version' );
     return rsp . data . webSocketDebuggerUrl ;
}

注:这个地址的获取方式在不同的chrome版本中貌似有变化,我之前是在 http://127.0.0.1:9222/json 中获取的,但在chrome71中貌似就不行了。具体可以参看官方文档 devtools protocol 和  browser endpoint 的信息。

连接调试接口

利用 puppeteer.connect(options) 连接,获得的是一个browser对象,再利用 browser.pages() 获取当前打开的page,直接操作page即可。

async function run () {
     var ws = await get_debug_url ();
     console . log ( ws );
     const browser = await puppeteer . connect ({
        browserWSEndpoint: ws ,
        defaultViewport: null
    });
     const pages = await browser . pages ();
     const page = pages [ 0 ];
     await page . screenshot ({ path: 'screen.png' });
     console . log ( "finished" );
};

run ();

究其本质,这里和我文章 使用CefSharp在.Net程序中嵌入Chrome浏览器(六)——调试 中的远程调试的原理是一样的。这里我虽然是用的puppeteer为例,其它基于Chrome DevTools Protocol的 工具 应该也是一样可以用的。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

C#图解教程

C#图解教程

索利斯 / 苏林、朱晔 / 人民邮电出版社 / 2009-1 / 65.00元

本书是一本广受赞誉的C# 教程。它以图文并茂的形式,用朴实简洁的文字,并辅之以大量表格和代码示例,精炼而全面地阐述了最新版C# 语言的各种特性,使读者能够快速理解、学习和使用C#。同时, 本书还讲解了C#与VB 、C++ 等主流语言的不同点和相似之处。 本书是一本经典的C# 入门书,不仅适合没有任何编程语言基础的初级读者,而且还是有VB 、C++ 等语言基础的C# 初学者的最佳选择。一起来看看 《C#图解教程》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具