博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用Puppeteer进行数据抓取(五)——快速调试
阅读量:5013 次
发布时间:2019-06-12

本文共 1631 字,大约阅读时间需要 5 分钟。

在我们使用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"

手动跳转到目标网页。

 

获取调试借口

访问可以得到如下信息

{

    "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版本中貌似有变化,我之前是在中获取的,但在chrome71中貌似就不行了。具体可以参看官方文档 和  的信息。

连接调试接口

利用连接,获得的是一个browser对象,再利用获取当前打开的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();

究其本质,这里和我文章中的远程调试的原理是一样的。这里我虽然是用的puppeteer为例,其它基于Chrome DevTools Protocol的工具应该也是一样可以用的。

参考文章:

转载于:https://www.cnblogs.com/TianFang/p/10153527.html

你可能感兴趣的文章
php 现在拓展地址
查看>>
【Java并发编程】之十六:深入Java内存模型——happen-before规则及其对DCL的分析(含代码)...
查看>>
团队个人冲刺第三天
查看>>
unit
查看>>
2017-10-17 NOIP模拟赛2
查看>>
How to install ia32-libs in Ubuntu 14.04 LTS (Trusty Tahr)
查看>>
ACM/ICPC 之 模拟 (HNUOJ 13391-换瓶模拟)
查看>>
JavaWeb学习——JSP基础
查看>>
Eclipse tomcat server 无法添加项目
查看>>
黑寡妇黄飞鸿
查看>>
leetcode 217 Contains Duplicate 数组中是否有重复的数字
查看>>
The Ctrl & CapsLock `problem'
查看>>
MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作
查看>>
linux故障判断
查看>>
Leetcode 23. Merge k Sorted Lists(python)
查看>>
Java进阶知识点6:并发容器背后的设计理念 - 锁分段、写时复制和弱一致性
查看>>
Makefile ===> Makefile 快速学习
查看>>
face detection[HR]
查看>>
java性能调优工具
查看>>
C# 其他的Url 文件的路径转化为二进制流
查看>>