pyppeteer:Python 版无头浏览器自动化工具
pyppeteer:Python 版无头浏览器自动化工具
pyppeteer/pyppeteer 目前收获了 3,944 个 Star:


pyppeteer 是 puppeteer 的非官方 Python 移植版本,用于控制无头 Chrome 或 Chromium 浏览器完成自动化任务。它适合需要程序化操作网页的场景,比如截图、爬取数据、自动化测试、页面性能分析等。
项目采用 MIT 许可证,同时包含部分 Apache 2.0 许可的代码。文档和 API 参考可以在项目主页找到。
安装要求 Python 3.6 及以上版本,3.5 版本为实验性支持。首次运行 pyppeteer 时会自动下载 Chromium,体积约 100MB。如果不希望程序在运行时自动下载,可以先执行 pyppeteer-install 命令完成准备工作。
通过 pip 直接安装:
python3 -m pip install pyppeteer
也可以从源码安装开发版本。
基础用法很直接。以下代码打开网页并截图保存:
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())
在页面中执行 JavaScript 并获取返回值:
import asyncio
from pyppeteer import launch
async def main():
browser = await launch()
page = await browser.newPage()
await page.goto('http://example.com')
dimensions = await page.evaluate('''() => {
return {
width: document.documentElement.clientWidth,
height: document.documentElement.clientHeight,
deviceScaleFactor: window.devicePixelRatio,
}
}''')
print(dimensions)
await browser.close()
asyncio.get_event_loop().run_until_complete(main())
pyppeteer 的 API 设计与 puppeteer 基本一致,熟悉 puppeteer 的用户可以较快上手。不过 Python 和 JavaScript 的语言特性差异导致部分接口存在调整。
pyppeteer 的函数参数同时支持字典和关键字参数。例如启动浏览器时,既可以用字典风格:
browser = await launch({'headless': True})
也可以使用关键字参数:
browser = await launch(headless=True)
在元素选择器方面,puppeteer 使用 、 、 、 、 、 、x 作为方法名,Python 不支持这种命名方式,所以 pyppeteer 改用 querySelector、querySelectorAll、xpath。同时提供了 J、JJ、Jx 作为简写形式。
evaluate 方法的参数处理也有区别。puppeteer 可以直接传入 JavaScript 函数或表达式,pyppeteer 则统一接收字符串。它会尝试自动判断字符串是函数还是表达式,如果判断失误导致报错,可以添加 force_expr=True 强制按表达式处理:
content = await page.evaluate('document.body.textContent', force_expr=True)
获取元素文本内容时,先选择元素再传入 evaluate:
element = await page.querySelector('h1')
title = await page.evaluate('(element) => element.textContent', element)
项目目前的开发方向是跟上 puppeteer 的更新节奏,不计划添加 puppeteer 没有的原生 API。对于需要在 Python 环境中进行浏览器自动化的开发者来说,pyppeteer 是一个可以参考的选项。
uppeteer 的更新节奏,不计划添加 puppeteer 没有的原生 API。对于需要在 Python 环境中进行浏览器自动化的开发者来说,pyppeteer 是一个可以参考的选项。
更多推荐
所有评论(0)