无头铬/铬自动化图书馆(非官方木偶港)

pyppeteer2的Python项目详细描述


侏儒2

PyPIPyPI versionDocumentationTravis statusAppVeyor statuscodecov注意:这是pyppeiteer项目的WIP延续

非官方的Python港口 puppeteerJavaScript(无头) chrome/chrome浏览器自动化库。在

安装

pyppeeer需要python3.6+。 (实验上支持Python3.5)

从PyPI按pip安装:

python3 -m pip install pyppeteer

或从github安装最新版本:

^{pr2}$

使用

Note: When you run pyppeteer first time, it downloads a recent version of Chromium (~100MB). If you don't prefer this behavior, run pyppeteer-install 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())

pyppeter和puppeter有几乎相同的API。 中列出了更多API document。在

Puppeteer's documenttroubleshooting对pyppeeer用户也很有用。在

木偶手与侏儒的区别

pyppeiteer与puppeter相似,但pyppeter与python之间有些不同 而JavaScript让它变得很困难。在

这就是木偶和侏儒的区别。在

选项的关键字参数

puppeter使用object(python中的dictionary)将选项传递给 函数/方法。pyppeeer接受字典和关键字参数 选项。在

字典样式选项(类似于puppeter):

browser=awaitlaunch({'headless':True})

关键字参数样式选项(更像python,不是吗?)公司名称:

browser=awaitlaunch(headless=True)

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

在python中,$不能用于方法名。 所以Pyppeier使用 Page.querySelector()/Page.querySelectorAll()/Page.xpath()而不是 Page.$()/Page.$$()/Page.$x()。Pyppeteer也有这些的简称 方法Page.J()Page.JJ(),和{}。在

Page.evaluate()Page.querySelectorEval()

puppeter版本的evaluate()采用JavaScript原始函数或字符串 JavaScript表达式,但pyppeeer使用JavaScript字符串。JavaScript 字符串可以是函数或表达式。Pyppeteer尝试自动检测 字符串是函数或表达式,但有时会失败。If表达式 字符串被视为函数并引发错误,添加force_expr=True选项, 强制Pyppeier将字符串视为表达式。在

获取页面内容的示例:

content=awaitpage.evaluate('document.body.textContent',force_expr=True)

获取元素内部文本的示例:

element=awaitpage.querySelector('h1')title=awaitpage.evaluate('(element) => element.textContent',element)

未来计划

  1. 木偶师的追赶发展
    • 不打算添加puppeter没有的原始API

学分

此包是用Cookiecutteraudreyr/cookiecutter-pypackage项目模板创建的。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
安卓 studio安装的java Unity本机广告   java如何将映射转换为对象   java我试图使用rest控制器从h2数据库中检索记录,但它说没有数据集   反思为什么会抛出java。lang.InstanceException?   在opensuse中找不到Java/javac   java为Android上的谷歌地图添加了5900多个标记。如何有效地做   java如何在if语句中使用循环   java如何在JPA(Hibernate)中映射一对多关系和复合主键?   如何在Java中读取和写入外部进程?   Java线程。睡眠时间最短   java使用EclipseGradle插件如何离线托管和使用依赖项(库jar文件)   java为什么虚拟引用在排队时没有被清除?   java无法理解如何创建用于响铃报警的取消按钮   java解析不应通过注入容器错误发生   java Toast或ProgressDialog不显示   java在自定义对象上使用优先级队列的更好方法   java格式的。wmv文件。(或者任何视频文件都很好)   从页面调用另一个侦听器后,不会调用java JSF<f:ajax>侦听器   java注释ConfigApplicationContext不能多次刷新有什么原因吗?