推荐微软出的一个Python小白神器
安装playwright库
pip install playwright
安装浏览器驱动文件(安装过程稍微有点慢)
python -m playwright install
- 安装Playwright依赖库,需要Python3.7+
- 安装Chromium、Firefox、WebKit等浏览器的驱动文件
命令行键入 --help 可看到所有选项
python -m playwright codegen
python -m playwright codegen --help
Usage: index codegen [options] [url]
open page and generate code for user actions
Options:
-o, --output <file name> saves the generated script to a file
--target <language> language to use, one of javascript, python, python-async, csharp (default: "python")
-h, --help display help for command
Examples:
$ codegen
$ codegen --target=python
$ -b webkit codegen https://example.com
- -o:将录制的脚本保存到一个文件
- --target:规定生成脚本的语言,有JS和Python两种,默认为Python
- -b:指定浏览器驱动
python -m playwright codegen --target python -o "my.py" -b chromium https://www.baidu.com
from playwright import sync_playwright
def run(playwright):
browser = playwright.chromium.launch(headless=False)
context = browser.newContext()
# Open new page
page = context.newPage()
page.goto("https://www.baidu.com/")
page.click("input[name="wd"]")
page.fill("input[name="wd"]", "jingdong")
page.click("text="京东"")
# Click //a[normalize-space(.)="京东JD.COM官网 多快好省 只为品质生活"]
with page.expect_navigation():
with page.expect_popup() as popup_info:
page.click("//a[normalize-space(.)="京东JD.COM官网 多快好省 只为品质生活"]")
page1 = popup_info.value
# ---------------------
context.close()
browser.close()
with sync_playwright() as playwright:
run(playwright
同步 下面示例代码:依次打开三个浏览器,前往baidu搜索,截图后退出。链接:https://microsoft.github.io/playwright-python/index.html
from playwright import sync_playwright
with sync_playwright() as p:
for browser_type in [p.chromium, p.firefox, p.webkit]:
browser = browser_type.launch()
page = browser.newPage()
page.goto("https://baidu.com/")
page.screenshot(path=f"example-{browser_type.name}.png")
browser.close()
import asyncio
from playwright import async_playwright
async def main():
async with async_playwright() as p:
for browser_type in [p.chromium, p.firefox, p.webkit]:
browser = await browser_type.launch()
page = await browser.newPage()
await page.goto("http://baidu.com/")
await page.screenshot(path=f"example-{browser_type.name}.png")
await browser.close()
asyncio.get_event_loop().run_until_complete(main())
from playwright import sync_playwright
with sync_playwright() as p:
iphone_11 = p.devices["iPhone 11 Pro"]
browser = p.webkit.launch(headless=False)
context = browser.newContext(
**iphone_11,
locale="en-US",
geolocation={ "longitude": 12.492507, "latitude": 41.889938 },
permissions=["geolocation"]
)
page = context.newPage()
page.goto("https://maps.google.com")
page.click("text="Your location"")
page.screenshot(path="colosseum-iphone.png")
browser.close()
- 在Chromium,Firefox和WebKit上进行测试。Playwright拥有适用于所有现代浏览器的完整API覆盖,包括Google Chrome和Microsoft Edge(带有Chromium),Apple Safari(带有WebKit)和Mozilla Firefox。
- 跨平台的WebKit测试。使用Playwright,使用适用于Windows,Linux和macOS的WebKit构建,测试您的应用程序在Apple Safari中的行为。在本地和CI上进行测试。
- 测试手机。使用设备仿真在移动Web浏览器中测试您的自适应Web应用程序。
- 无报文头与有报文头。Playwright支持所有浏览器和所有平台的无头(无浏览器UI)和有头(有浏览器UI)模式。有报文头模式适用于调试,而无报文头适用于CI / cloud执行。
- 自动等待APIs。Playwright交互会自动等待直到元素准备就绪。这样可以提高可靠性并简化测试编写流程。
- 无超时自动化。Playwright会接收浏览器信号,例如网络请求,页面导航和页面加载事件,以消除导致睡眠中断的烦恼。
- 与浏览器上下文保持并行。对于多个并行孤立的浏览器上下文可执行环境重复使用一个单独的浏览器实例。
- 弹性元素选择器。Playwright可以依靠面向用户的字符串(例如文本内容和可访问性标签)来选择元素。这些字符串比紧耦合到DOM结构的选择器更具弹性。
- 多个域,页面和框架。Playwright是一种进程外自动化驱动程序,不受页面内JavaScript执行范围的限制,并且可以自动执行具有多个页面的方案。
- 强大的网络控制。Playwright引入上下文范围的网络拦截以便进行终止或者模拟网络请求。
- 现代网络功能。Playwright通过插入阴的选择器,地理位置,权限,Web Worker和其他现代Web API支持Web组件。
- 涵盖所有场景的能力。支持文件下载和上传,进程外iframe,原生输入事件,甚至是深色模式。
- 旧版Edge和IE11支持。Playwright不支持旧版Microsoft Edge或IE11(弃用通知)。支持新的Microsoft Edge(在Chromium上)。
- Java语言绑定:Playwright API目前无法在Java或Ruby中使用。这是暂时的限制,因为Playwright旨在支持任何语言的绑定。
- 在真实的移动设备上进行测试:Playwright使用桌面浏览器来模拟移动设备。
GitHub链接:https://github.com/microsoft/playwright-python 传送门:https://playwright.dev/ 开源组织:Microsoft