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+。

pyppeteer Java Pyppeteer Java版本_Python

安装

在已安装了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