github link: https://github.com/pyppeteer/pyppeteer
安装
pyppeteer requires Python >= 3.6
Install with pip from PyPI:
pip install pyppeteer
Or install the latest version from this github repo:
pip install -U git+https://github.com/pyppeteer/pyppeteer@dev
用法
觉得的下面的安装麻烦:wind可以直接运行例子,第一次运行会自动下载Chromium 驱动,否看下:
注意:
当你第一次运行 pyppeteer 时,如果在你的系统上没有找到它,它会下载最新版本的 Chromium (~150MB)。如果您不喜欢这种行为,请确保安装了合适的 Chrome 二进制文件。一种方法是pyppeteer-install在使用这个库之前运行命令。
完整的文档可以在这里找到【https://pyppeteer.github.io/pyppeteer/reference.html】。Puppeteer 的文档【https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#】及其故障排除指南【https://github.com/GoogleChrome/puppeteer/blob/master/docs/troubleshooting.md】也是 pyppeteer 用户的重要资源。
例子
打开网页并截图:
import asyncio
from pyppeteer import launch
async def main():
browser = await launch()
page = await browser.newPage()
await page.goto('https://example.com')
await page.screenshot({'path': 'example.png'})
await browser.close()
asyncio.get_event_loop().run_until_complete(main())
评估页面上的 javascript:
import asyncio
from pyppeteer import launch
async def main():
browser = await launch()
page = await browser.newPage()
await page.goto('https://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())
puppeteer 和 pyppeteer 的区别
pyppeteer 努力尽可能地复制 puppeteer API,但是,Javascript 和 Python 之间的根本差异使得这很难精确地做到这一点。有关细节的更多信息可以在文档中找到。
选项的关键字参数
puppeteer 使用一个对象将选项传递给函数/方法。pyppeteer 方法/函数接受字典(python 等效于 JavaScript 的对象)和选项的关键字参数。
字典样式选项(类似于 puppeteer):
browser = await launch({'headless': True})
browser = await launch(headless=True)
元素选择器方法名称
Page.evaluate()和的论点Page.querySelectorEval()
puppeteer 的版本evaluate()采用 JavaScript 函数或 JavaScript 表达式的字符串表示。pyppeteer 接受 JavaScript 表达式或函数的字符串表示。pyppeteer 会尝试自动检测字符串是函数还是表达式,但有时会失败。如果表达式被错误地视为函数并引发错误,请尝试设置force_expr为True, 以强制 pyppeteer 将字符串视为表达式。
Examples:
获取页面的textContent:
content = await page.evaluate('document.body.textContent', force_expr=True)
获取一个元素的textContent:
element = await page.querySelector('h1')
title = await page.evaluate('(element) => element.textContent', element)