Playwright系列(8):认识playwright 相关库

简介: Playwright系列(8):认识playwright 相关库

大家好,前面把基本概念介绍完了。今天开始正式介绍如何使用python 去写playwright 脚本。


安装


Pip方式


pip install --upgrade pippip install playwrightplaywright install


Conda方式安装


conda config --add channels conda-forgeconda config --add channels microsoftconda install playwrightplaywright install


这些命令会下载 Playwright 包以及安装相关浏览器Chromium, Firefox and WebKit。


使用这些库


安装好了之后,就可以在一个Python脚本中导入Playwright,然后启动这三个浏览器中 的一个(chromium, firefox and webkit)。


from playwright.sync_api import sync_playwrightwith sync_playwright() as p:    browser = p.chromium.launch()    page = browser.new_page()    page.goto("http://playwright.dev")    print(page.title())    browser.close()


Playwright 支持2个类型的API: 同步和异步。如果你的项目使用的异步, 那么你就可以用异步的API 。


import asynciofrom playwright.async_api import async_playwrightasync def main():    async with async_playwright() as p:        browser = await p.chromium.launch()        page = await browser.new_page()        await page.goto("http://playwright.dev")        print(await page.title())        await browser.close()asyncio.run(main())


你的第一个Playwright脚本


在第一个脚本中,我们将访问whatsmyuseragent.org 然后截个图。


from playwright.sync_api import sync_playwrightwith sync_playwright() as p:    browser = p.webkit.launch()    page = browser.new_page()    page.goto("http://whatsmyuseragent.org/")    page.screenshot(path="example.png")    browser.close()


默认情况下, Playwrright 使用浏览器的无头模式。 如果想关闭这个模式,上设置 headless=False 就可以启动浏览器了。也可以用 slow_mo 让脚本执行变慢.



firefox.launch(headless=False, slow_mo=50)


交互模式 (REPL)


也可以启动python 的交互模式 REPL:


python

然后快速启动Playwright


>>> from playwright.sync_api import sync_playwright>>> playwright = sync_playwright().start()# Use playwright.chromium, playwright.firefox or playwright.webkit# Pass headless=False to launch() to see the browser UI>>> browser = playwright.chromium.launch()>>> page = browser.new_page()>>> page.goto("http://whatsmyuseragent.org/")>>> page.screenshot(path="example.png")>>> browser.close()>>> playwright.stop()


也可以用异步模式:


python -m asyncio


>>> from playwright.async_api import async_playwright>>> playwright = await async_playwright().start()>>> browser = await playwright.chromium.launch()>>> page = await browser.new_page()>>> await page.goto("http://whatsmyuseragent.org/")>>> await page.screenshot(path="example.png")>>> await browser.close()>>> await playwright.stop()


Pyinstaller


也可以用 Playwright 的 Pyinstaller来创建一个独立的执行脚本.


# main.pyfrom playwright.sync_api import sync_playwrightwith sync_playwright() as p:    browser = p.chromium.launch()    page = browser.new_page()    page.goto("http://whatsmyuseragent.org/")    page.screenshot(path="example.png")    browser.close()


如果想绑定浏览器到执行脚本上, 可以设置如下配置。


Bash


PLAYWRIGHT_BROWSERS_PATH=0 playwright install chromiumpyinstaller -F main.py

PowerShell


$env:PLAYWRIGHT_BROWSERS_PATH="0"playwright install chromiumpyinstaller -F main.py


Batch


set PLAYWRIGHT_BROWSERS_PATH=0playwright install chromiumpyinstaller -F main.py


已知问题


time.sleep()会导致状态过期

很可能你不需要手动等待,因为Playwright有自动等待功能。如果你仍然依赖它,你应该使用page.wait_for_timeout(5000)而不是time.sleep(5),最好是完全不等待超时,但有时它对调试是有用的。在这些情况下,使用我们的等待(wait_for_timeout)方法而不是时间模块。这是因为我们内部依赖于异步操作,当使用time.sleep(5)时,它们不能得到正确处理。


与Windows上Asyncio的SelectorEventLoop不兼容

Playwright在一个子进程中运行驱动,所以在Windows上需要asyncio的ProactorEventLoop,因为SelectorEventLoop不支持异步子进程。


在Windows的Python 3.7上,Playwright将默认的事件循环设置为ProactorEventLoop,因为它在Python 3.8以上是默认的。


线程


Playwright的API不是线程安全的。如果你在多线程环境中使用Playwright,你应该为每个线程创建一个playwright实例。


如果觉得阿萨的内容对你有帮助,欢迎围观点赞。

相关文章
|
测试技术 Shell API
Playwright系列(3):运行测试用例
Playwright系列(3):运行测试用例
511 1
|
开发工具 git
Playwright系列(6):如何集成到GitHub
Playwright系列(6):如何集成到GitHub
344 0
Playwright系列(6):如何集成到GitHub
|
关系型数据库 MySQL 数据库
n8n自动化工具部署与使用
n8n是一款开源的工作流自动化工具,类似于IFTTT。它的优点是开源、可以自托管、下载安装方便、易于使用,可以互联上百种服务。n8n基于节点能够将任何工具连接在一起,轻松部署不同类型的任务。它可以做很多事情,比如:从数据库中获取数据后下载为excel然后通过邮件发送给其他人。
10375 1
|
API 开发工具 开发者
Playwright系列(12):调试选择器
Playwright系列(12):调试选择器
382 0
|
前端开发 JavaScript
Playwright系列(9):常见操作HTML 元素方式
Playwright系列(9):常见操作HTML 元素方式
717 0
ModuleNotFoundError: No module named ‘openai.error‘
这篇文章讨论了在使用OpenAI库时遇到的`ModuleNotFoundError: No module named ‘openai.error'`错误,并提供了两种解决方案:将OpenAI版本降级到0.28.0或修改代码以去掉对`openai.error`的引用并将异常处理放置到`openai`模块下。
ModuleNotFoundError: No module named ‘openai.error‘
|
Web App开发 JavaScript 测试技术
Playwright 测试夹具
Playwright 测试夹具
174 1
|
Web App开发 前端开发 JavaScript
JavaScript动态渲染页爬取——Playwright的使用(一)
JavaScript动态渲染页爬取——Playwright的使用(一)
1222 2
|
Web App开发 测试技术 API
Python Playwright 基本使用(步骤详细)
Python Playwright 基本使用(步骤详细)
2767 0
|
人工智能 自然语言处理 文字识别
MinerU-大语言语料处理神器,CPU/GPU均可跑,开源免费“敲”好用
在7月4日举行的WAIC 2024科学前沿主论坛上,书生·浦语2.5正式发布,面向大模型研发与应用的全链条工具体系同时迎来升级。
MinerU-大语言语料处理神器,CPU/GPU均可跑,开源免费“敲”好用