Pyppeteer中文文档_爬虫_自动化测试

目录

Pyppeteer中文文档_序言_安装_基本使用及注意事项

Pyppeteer是Puppeteer Javascript(无头) chrome/chromium 浏览器自动化库的Python非官方端口,Puppeteer是在Node.js中使用的,而Pyppeteer是专用于Python语言的。

本文档对应的是Pyppeteer的v0.0.25版本,从目前情况来看,Pyppeteer已经很久没更新了,但对于要求不是非常高的爬虫和自动化测试使用起来还是没问题的。

当前文章中会介绍一下安装、使用等一些注意事项,在后续的文章中会逐一介绍各个API类的功能。 Pyppeteer目前支持Python3.5、3.6、3.7,但不建议在3.5的版本中使用,最佳的使用环境为3.6+。

序言

安装

在已安装了Python3.6+的情况下,以windows为例,Win+R -> cmd -> 回车,打开cmd窗口。
输入:pip install pyppeteer,等待安装完毕即可。
如果需要最新版(开发版)的pyppeteer,可以通过pip命令从github地址进行安装。
输入:pip install -U git+https://github.com/miyakogi/pyppeteer.git@dev,等待安装完毕即可。

使用

在第一次使用Pyppeteer时,它会自动下载最新版本的Chromium(~170MB Mac, ~282MB Linux, ~280MB Win),如果你不希望它自动下载,那么在运行任何Pyppeteer脚本之前,手动运行pyppeteer-install命令即可下载(似乎这没什么用,普遍情况下我们都会采用自动下载的方式)。

示例:打开页面并截屏
import asyncio
from pyppeteer import launch

async def main():
    browser = await launch()
    page = await browser.newPage()
    await page.goto('http://example.com')
    await page.screenshot({'path': 'example.png'})
    await browser.close()

asyncio.get_event_loop().run_until_complete(main())
示例:在页面中执行脚本
import asyncio
from pyppeteer import launch

async def main():
    browser = await launch()
    page = await browser.newPage()
    await page.goto('http://example.com')
    await page.screenshot({'path': 'example.png'})

    dimensions = await page.evaluate('''() => {
        return {
            width: document.documentElement.clientWidth,
            height: document.documentElement.clientHeight,
            deviceScaleFactor: window.devicePixelRatio,
        }
    }''')

    print(dimensions)
    #>>> {'width': 800, 'height': 600, 'deviceScaleFactor': 1}
    await browser.close()

asyncio.get_event_loop().run_until_complete(main())

Pyppeteer拥有几乎和Puppeteer一样的API,更多API详情可以查看后续文章。

Pyppeteer与Puppeteer之间的差异

Pyppeteer和Puppeteer类似,由于Python和Javascript在语法、特性、主要发展领域的一些差异,在使用及运行效率上略有区别,但不影响其结果。

选项的关键字参数

Puppeteer使用对象(Python使用字典)组成选项传递给方法或函数,Pyppeteer可接受字典类型和关键字参数类型作为选项。

字典样式选项(类似于Puppeteer)
browser = await launch({'headless': True})
关键字参数样式参数
browser = await launch(headless=True)

元素选择器方法名称($->querySelector)

在Python中,$不能用于方法名称,所以使用Page.querySelector()Page.querySelectorAll()Page.xpath()代替Page.$()Page.$$()Page.$x()。Pyppeteer也有这些方法简写Page.J()Page.JJ()Page.Jx()

Page.evaluate()和Page.querySelectorEval()的参数

Puppeteer的evaluate()采用原生的Javacript函数或Javascript表达式字符串,Pyppeteer采用Javascript字符串。Javascript字符串可以是函数或者表达式。Pyppeteer会自动尝试检查字符串是函数还是表达式,但有时会失败。如果表达式字符被视为函数并应发错误,可以添加force_expr=True参数,这将强制Pyppeteer把字符串视为表达式。

示例:获取页面内容
content = await page.evaluate('document.body.textContent', force_expr=True)
示例:获取元素的内部文本
element = await page.querySelector('h1')
title = await page.evaluate('(element) => element.textContent', element)

API参考

  • Commands
  • Environment Variables
  • Launcher
  • Browser Class
  • BrowserContext Class
  • Page Class
  • Worker Class
  • Keyboard Class
  • Mouse Class
  • Tracing Class
  • Dialog Class
  • ConsoleMessage Class
  • Frame Class
  • ExecutionContext Class
  • JSHandle Class
  • ElementHandle Class
  • Request Class
  • Response Class
  • Target Class
  • CDPSession Class
  • Coverage Class
  • Debugging

如果有任何建议或意见,欢迎交流沟通

作者:张恺阳

本文链接:https://www.zky.name/article/73.html

来源:张恺阳博客