Pyppeteer爬虫神器详解

launch使用Pyppeteer的第一步就是启动浏览器 , 就是相当于我们点击桌面上的浏览器图标一样 , 把它运行起来 。用Pyppeteer完成同样的操作 , 只需要调用launch方法就行了 。
先看一下launch方法的API定义:
pyppeteer.launcher.launch(options: dict = None, **kwargs)从官方文档和定义当中我们可以看到它处于launcher模块中 , 返回一个Brower对象 , 从源码中可以看出这个方法是通过async修饰的 , 所以调用的时候需要使用await 。
下面我们看看它的参数:

  • ignoreHTTPSErrors(bool):是否要忽略HTTPS的错误 , 默认是False 。
  • headless(bool):是否启用Headless模式 , 即无界面模式 , 如果devtools这个参数是True , 那么该参数就会被设置为False , 否则为True , 默认是开启无界面模式 。
  • executablePath(str):可执行文件的路径 , 如果指定之后就不需要使用默认的Chromium了 , 可以指定为已有的Chrome或者Chromium 。
  • slowMo(int|float):通过传入指定的时间 , 可以减缓Pyppeteer的一些模拟操作 。
  • args(List[str]):在执行过程中可以传入的额外参数 。
  • ignoreDefaultArgs(bool):不使用Pyppeteer的默认参数 , 如果使用了这个参数 , 最好通过args参数来设定一些参数 , 否则可能会出现一些意想不到的问题 。慎用此参数 。
  • handleSIGINT(bool):是否享有SIGINT信号 , 也就是用Ctrl+C来关闭浏览器 , 默认是True 。
  • handleSIGTERM(bool):是否享有SIGTERM信号 , 一般是kill命令 , 默认为True 。
  • handleSIGHUP (bool):是否响应SIGHUP信号 , 即挂起信号 , 比如终端退出操作 , 默认是 True 。
  • dumpio (bool):是否将 Pyppeteer 的输出内容传给 process.stdout 和 process.stderr 对象 , 默认是 False 。
  • userDataDir (str):即用户数据文件夹 , 即可以保留一些个性化配置和操作记录 。
  • env (dict):环境变量 , 可以通过字典形式传入 。
  • devtools (bool):是否为每一个页面自动开启调试工具 , 默认是 False 。如果这个参数设置为 True , 那么 headless 参数就会无效 , 会被强制设置为 False 。
  • logLevel (int|str):日志级别 , 默认和 root logger 对象的级别相同 。
  • autoClose (bool):当一些命令执行完之后 , 是否自动关闭浏览器 , 默认是 True 。
  • loop (asyncio.AbstractEventLoop):事件循环对象 。
了解了这些参数 , 我们可以试一些常用的参数 。
  • 无头模式
一般情况下我们都使用的是无头模式 , 将参数headless设置为True或者不设置它 , 这个时候我们是看不到任何界面的 。一般我们都使用无头模式进行运行调试 , 那么我们可以尝试关闭headless模式看看效果:
import asynciofrom pyppeteer import launchasync def main():await launch(headless=False)await asyncio.sleep(100)asyncio.get_event_loop().run_until_complete(main())运行之后看不到任何控制台输出 , 但是这时候就会出现一个空白的 Chromium 界面了:
Pyppeteer爬虫神器详解

文章插图
 
这个时候我们看到在任务栏中显示了一个蓝色Chrome图标 。
  • 调试模式
我们在写爬虫的时候 , 经常需要分析网页结构和网络请求 , 所以打开调试工具是很有必要的 , 将devtools参数设置为True , 这样每开启一个就弹出一个调试窗口
import asynciofrom pyppeteer import launchasync def main():browser = await launch(devtools=True)page = await browser.newPage()await page.goto('https://www.baidu.com')await asyncio.sleep(100)asyncio.get_event_loop().run_until_complete(main())如果devtools这个参数设置为True , 那么headless就不起作用了 , 界面始终会显示出来 。
Pyppeteer爬虫神器详解

文章插图
 
  • 禁用提示条
使用Pyppeteer操作网页的时候 , 我们可以看到上面的一条提示:"Chrome 正受到自动测试软件的控制" , 这个提示条有点烦 , 那该怎样关闭呢?这时候就需要用到 args 参数了 , 禁用操作如下:
browser = await launch(headless=False, args=['--disable-infobars'])


推荐阅读