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):运行测试用例
652 1
|
数据采集 Web App开发 数据可视化
Python爬虫分析B站番剧播放量趋势:从数据采集到可视化分析
Python爬虫分析B站番剧播放量趋势:从数据采集到可视化分析b
电脑32位系统能改64位系统吗
本文详解32位系统能否升级为64位。答案是:可以,但需满足CPU支持64位架构、内存至少4GB等条件。升级唯一方法是重装系统,需备份数据、制作启动U盘、设置BIOS并安装驱动。升级前务必确认硬件兼容性,避免系统运行不稳定。
|
网络协议 安全 物联网
《复杂环境下IPv6地址规划与子网划分全攻略》
随着网络环境日益复杂及设备数量激增,IPv6以其超大地址空间和即插即用优势成为网络变革的关键。本文深入探讨IPv6地址规划与子网划分的挑战与方法,包括夯实基础知识、遵循层次性与高效性原则、应对物联网与云计算等特殊场景需求,以及验证优化的重要性。通过合理规划与科学划分,可构建高效、稳定且安全的IPv6网络,为未来发展奠定基础。
955 19
|
Unix Linux Shell
【探索Linux】P.12(文件描述符 | 重定向 | 基础IO)
【探索Linux】P.12(文件描述符 | 重定向 | 基础IO)
488 0
|
存储 数据可视化 数据挖掘
想提升电商业务效率?这 6 款团队协作软件千万别错过!
在电商旺季,订单量激增,团队需高效协调运营、营销、客服、物流等环节。可视化协作办公软件成为必备工具,提升业务效率与客户满意度。本文推荐6款优秀软件:板栗看板(国产)、Trello、Asana、Wrike、Monday.com和Basecamp。这些软件具备简洁易用的操作界面、强大的可视化功能、定制化任务管理及便捷的跨团队协作,帮助电商团队应对商品上架、促销推广、订单处理等挑战。J人主导的电商公司可根据自身需求选择最适配的工具,实现高效运营与业务增长。
591 16
|
存储 SQL 关系型数据库
Python实现给qq自动发消息 终于有人来和我说早安晚安了吗...
Python实现给qq自动发消息 终于有人来和我说早安晚安了吗...
|
Web App开发 关系型数据库 Java
|
前端开发 项目管理
管理者必备的六大复盘方法工具汇总
管理者必备的六大复盘方法工具汇总
3348 0