Python中与selenium齐名的pyppeteer库

简介: 如果说在Python中还有一款自动化工具能和selenium媲美,那么无疑是pyppeteer,pyppeteer是puppeteer的Python版本,puppeteer是Google开源的一个js库,通过一系列高级接口和Chrome或Chromium在DevTools协议下交互,其实现功能如下:生成页面的截图和PDF。

如果说在Python中还有一款自动化工具能和selenium媲美,那么无疑是pyppeteer,pyppeteer是puppeteer的Python版本,puppeteer是Google开源的一个js库,通过一系列高级接口和Chrome或Chromium在DevTools协议下交互,其实现功能如下:

  • 生成页面的截图和PDF。
  • 抓取SPA(单页应用程序)并渲染页面
  • 自动提交表单,UI测试,键盘输入等。
  • 创建一个最新的自动化测试环境,使用最新的JavaScript和浏览器特性,在最新版本的Chrome中直接运行测试。
  • 捕捉异常跟踪堆栈来帮助诊断性能问题。
  • 测试Chrome扩展
  • 当然还有些高级功能如js注入、模拟操作、异步执行、伪装
webp
image

pyperteer是puppeteer的Python实现,相比于selenium具有异步加载、速度快、具备有界面/无界面模式、伪装性更强不易被识别为机器人同时可以伪装手机平板等终端;但是也有一些缺点,如接口不易理解、语义晦涩;

但在selenium被广泛和谐的今天,pyppeteer无疑为防爬墙撕开了一道大口子,针对selenium的淘宝、美团、文书网等网站,目前可通过该库使用selenium的思路继续突破,毫不费劲,以前不能用selenium的现在可以使用pyppeteer轻易拿下,后面将针对pyppeteer进行系列教程的分享,关注公众号【Python之战】不迷路。

pyppeteer基础使用:

使用pyppeteer先看看异步库asyncio,因为asycio也是pyppeteer框架的一部分,不熟悉的看这篇《学Python不得不掌握的库,gevent和asyncio使用方法详解

先看官方提供的一个案例:

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())

其中async关键字声明一个异步操作,await关键字声明一个耗时操作,asyncio.get_event_loop().run_until_complete(main())是创建异步池并执行异步模块main函数。

browser = await launch()

创建一个浏览器对象类似selenium中的driver,launch()中可传入带关键字的字典配置参数

page = await browser.newPage()

新建一个页面对象,页面操作在页面对象上

await page.goto('http://example.com')

执行跳转功能等同于driver.get()

await page.screenshot({'path': 'example.png'})

页面截图

await browser.close()

关闭浏览器对象

关于launch()中的配置参数:

在运行launch()时没有下载Chromium会自动下载。

[W:pyppeteer.chromium_downloader] start chromium download.
Download may take a few minutes.

  4%|▍         | 5365760/127496521 [00:15<08:18, 244829.50it/s]

其中browser = await launch(),中options是字典,配置如:browser = await launch({‘headless’:True})是配置无头模式,其余常用配置字段如下:

async def launch(options: dict = None, **kwargs: Any) -> Browser:
*`` ignorehttpserrrors``(bool):是否忽略HTTPS错误。默认为‘假’。

*`` headless``(bool):是否在headless模式下运行浏览器。默认为

`` true``除非``appmode````devtools``选项为``true``。

*``可执行路径``(str):要运行的chromium或chrome可执行文件的路径

而不是默认的铬束。

*`` slowmo``(int float):通过指定的毫秒数。

*`` args``(list[str]):要传递给浏览器的附加参数(标志)过程。

*`` ignoredefaultargs``(bool):不要使用Pypeter的默认参数。这个是危险的选择;小心使用。

*`` handlesigint``(bool):在ctrl+c上关闭浏览器进程。默认为‘真’。

*`` handlesigterm``(bool):关闭sigterm上的浏览器进程。默认值“真”。

*`` handlesighup``(bool):关闭浏览器进程。默认为‘真’。

*`` dumpio``(bool):是否通过管道传输浏览器进程stdout和stderr到``process.stdout````process.stderr```。默认为“假”。

*`` userdatadir``(str):用户数据目录的路径。

*`` env``(dict):指定将对浏览器。默认为与python进程相同。

*`` devtools``(bool):是否为每个选项卡自动打开devtools面板。如果此选项为“真”,将设置“无头”选项‘假’。

*`` log level``(int str):打印日志的日志级别。默认与根记录器。

*`` autoclose``(bool):脚本时自动关闭浏览器进程完整的。默认为“真”。

*``循环`(asyncio.abstractEventLoop):事件循环(**experimental**)。

*`` appmode``(bool):已弃用。

Page页面对象元素主要选择器如下

    async def querySelector(self, selector: str) -> Optional[ElementHandle]:
        """Get an Element which matches ``selector``.

    async def queryObjects(self, prototypeHandle: JSHandle) -> JSHandle:
        """Iterate js heap and finds all the objects with the handle.

    async def querySelectorEval(self, selector: str, pageFunction: str,
                                *args: Any) -> Any:
        """Execute function with an element which matches ``selector``.

    async def querySelectorAllEval(self, selector: str, pageFunction: str,
                                   *args: Any) -> Any:
        """Execute function with all elements which matches ``selector``.

    async def querySelectorAll(self, selector: str) -> List[ElementHandle]:
        """Get all element which matches ``selector`` as a list.

    async def xpath(self, expression: str) -> List[ElementHandle]:
        """Evaluate the XPath expression.

        If there are no such elements in this page, return an empty list.

主要是XPath、querySelector、querySelectorAll三个。

后面将持续对pyppeteer库进行系统性的分享,喜欢的欢迎关注不迷路。

相关文章
|
1天前
|
API 调度 开发者
Python中的并发编程:使用asyncio库实现异步IO
传统的Python编程模式中,使用多线程或多进程实现并发操作可能存在性能瓶颈和复杂性问题。而随着Python 3.5引入的asyncio库,开发者可以利用异步IO来更高效地处理并发任务。本文将介绍如何利用asyncio库实现异步IO,提升Python程序的并发性能。
|
1天前
|
JSON Shell 数据格式
第十章 Python常用标准库使用(必会)
第十章 Python常用标准库使用(必会)
|
2天前
|
开发框架 前端开发 数据库
Python从入门到精通:3.3.2 深入学习Python库和框架:Web开发框架的探索与实践
Python从入门到精通:3.3.2 深入学习Python库和框架:Web开发框架的探索与实践
|
2天前
|
数据采集 数据可视化 数据处理
Python从入门到精通的文章3.3.1 深入学习Python库和框架:数据处理与可视化的利器
Python从入门到精通的文章3.3.1 深入学习Python库和框架:数据处理与可视化的利器
|
2天前
|
JSON 测试技术 API
Python的Api自动化测试使用HTTP客户端库发送请求
【4月更文挑战第18天】在Python中进行HTTP请求和API自动化测试有多个库可选:1) `requests`是最流行的选择,支持多种请求方法和内置JSON解析;2) `http.client`是标准库的一部分,适合需要低级别控制的用户;3) `urllib`提供URL操作,适用于复杂请求;4) `httpx`拥有类似`requests`的API,提供现代特性和异步支持。根据具体需求选择,如多数情况`requests`已足够。
8 3
Python
19 0
|
2天前
|
JSON 数据格式 索引
python 又一个点运算符操作的字典库:Munch
python 又一个点运算符操作的字典库:Munch
19 0
|
3天前
|
数据挖掘 数据处理 索引
如何使用Python的Pandas库进行数据筛选和过滤?
Pandas是Python数据分析的核心库,提供DataFrame数据结构。基本步骤包括导入库、创建DataFrame及进行数据筛选。示例代码展示了如何通过布尔索引、`query()`和`loc[]`方法筛选`Age`大于19的记录。
10 0
|
4天前
|
前端开发 测试技术 C++
Python自动化测试面试:unittest、pytest与Selenium详解
【4月更文挑战第19天】本文聚焦Python自动化测试面试,重点讨论unittest、pytest和Selenium三大框架。unittest涉及断言、TestSuite和覆盖率报告;易错点包括测试代码冗余和异常处理。pytest涵盖fixtures、参数化测试和插件系统,要注意避免过度依赖unittest特性。Selenium的核心是WebDriver操作、等待策略和测试报告生成,强调智能等待和元素定位策略。掌握这些关键点将有助于提升面试表现。
17 0
|
4天前
|
数据处理 Python
如何使用Python的Pandas库进行数据排序和排名
【4月更文挑战第22天】Pandas Python库提供数据排序和排名功能。使用`sort_values()`按列进行升序或降序排序,如`df.sort_values(by=&#39;A&#39;, ascending=False)`。`rank()`函数用于计算排名,如`df[&#39;A&#39;].rank(ascending=False)`。多列操作可传入列名列表,如`df.sort_values(by=[&#39;A&#39;, &#39;B&#39;], ascending=[True, False])`和分别对&#39;A&#39;、&#39;B&#39;列排名。
14 2

热门文章

最新文章