puppeteer快速调试

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

内容简介:在我们使用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 = "r:\chrome\cache"

手动跳转到目标网页。

puppeteer快速调试

此时就可以通过 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的 工具 应该也是一样可以用的。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

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

ANSI Common Lisp

ANSI Common Lisp

Paul Graham / Prentice Hall / 1995-11-12 / USD 116.40

For use as a core text supplement in any course covering common LISP such as Artificial Intelligence or Concepts of Programming Languages. Teaching students new and more powerful ways of thinking abo......一起来看看 《ANSI Common Lisp》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具