无头铬/铬自动化库(傀儡非正式端口)
pyppeteer的Python项目详细描述
非官方Python端口 puppeteerjavascript(无头) chrome/chrome浏览器自动化库
- 自由软件:麻省理工学院许可证(包括在Apache2.0许可下分发的作品)
- 文档:https://miyakogi.github.io/pyppeteer
安装
Pyppeteer需要python 3.6+。 (实验上支持Python3.5)
通过pypi中的pip安装:
python3 -m pip install pyppeteer
或者从github:
安装最新版本python3 -m pip install -U git+https://github.com/miyakogi/pyppeteer.git@dev
用法
Note: When you run pyppeteer first time, it downloads a recent version of Chromium (~100MB). If you don’t prefer this behavior, run ^{tt1}$ command before running scripts which uses pyppeteer.
example:打开网页并截图。
importasynciofrompyppeteerimportlaunchasyncdefmain():browser=awaitlaunch()page=awaitbrowser.newPage()awaitpage.goto('http://example.com')awaitpage.screenshot({'path':'example.png'})awaitbrowser.close()asyncio.get_event_loop().run_until_complete(main())
Example:评估页面上的脚本
importasynciofrompyppeteerimportlaunchasyncdefmain():browser=awaitlaunch()page=awaitbrowser.newPage()awaitpage.goto('http://example.com')awaitpage.screenshot({'path':'example.png'})dimensions=awaitpage.evaluate('''() => { return { width: document.documentElement.clientWidth, height: document.documentElement.clientHeight, deviceScaleFactor: window.devicePixelRatio, } }''')print(dimensions)# >>> {'width': 800, 'height': 600, 'deviceScaleFactor': 1}awaitbrowser.close()asyncio.get_event_loop().run_until_complete(main())
皮皮提尔和木偶师有几乎相同的API。 更多的api列在 document。
Puppeteer’s document 而troubleshooting对于pyppeteer用户也很有用
木偶师与侏儒的区别
Pyppeteer和Puppeter是一样的,但是python之间有一些不同 而JavaScript则使之变得困难
这些是木偶师和侏儒的区别。
选项的关键字参数
puppeter使用对象(python中的dictionary)将选项传递给 功能/方法。Pyppeteer接受字典和关键字参数 选项。
字典样式选项(类似于木偶演员):
browser=awaitlaunch({'headless':True})
关键字参数样式选项(更像pythonic,不是吗?):
browser=awaitlaunch(headless=True)
元素选择器方法名($->;querySelector)
在python中,$不能用于方法名。 所以侏儒用 ^{TT5}$/^{TT6}$/^{TT7}$而不是 Page.$()/Page.$$()/Page.$x()Pyppeteer对这些也有简称 方法,Page.J()、Page.JJ()和Page.Jx()。
Page.evaluate()和Page.querySelectorEval()
的参数puppeter版本的evaluate()采用javascript原始函数或字符串 JavaScript表达式,但pyppeteer接受字符串JavaScriptJavaScript 字符串可以是函数或表达式Pyppeteer试图自动检测 字符串是函数或表达式,但有时会失败if表达式 字符串被视为函数并引发错误,请添加force_expr=True选项, 这迫使pyppeteer将字符串视为表达式。
获取页面内容的示例:
content=awaitpage.evaluate('document.body.textContent',force_expr=True)
获取元素内部文本的示例:
element=awaitpage.querySelector('h1')title=awaitpage.evaluate('(element) => element.textContent',element)
未来计划
- 木偶师的追赶发展
- 不打算添加puppeter没有的原始api
学分
这个包是用Cookiecutter和audreyr/cookiecutter-pypackage项目模板创建的