python工具——playwright
playwright是微软开源的自动化项目
git地址 https://github.com/microsoft/playwright-python
安装
pip install playwright
查看支持的功能
python -m playwright -h
Usage: index [options] [command]
Options:
-V, --version output the version number
-b, --browser <browserType> browser to use, one of cr, chromium, ff, firefox, wk, webkit (default: "chromium")
--color-scheme <scheme> emulate preferred color scheme, "light" or "dark"
--device <deviceName> emulate device, for example "iPhone 11"
--geolocation <coordinates> specify geolocation coordinates, for example "37.819722,-122.478611"
--lang <language> specify language / locale, for example "en-GB"
--load-storage <filename> load context storage state from the file, previously saved with --save-storage
--proxy-server <proxy> specify proxy server, for example "http://myproxy:3128" or "socks5://myproxy:8080"
--save-storage <filename> save context storage state at the end, for later use with --load-storage
--timezone <time zone> time zone to emulate, for example "Europe/Rome"
--timeout <timeout> timeout for Playwright actions in milliseconds (default: "10000")
--user-agent <ua string> specify user agent string
--viewport-size <size> specify browser viewport size in pixels, for example "1280, 720"
-h, --help display help for command
Commands:
open [url] open page in browser specified via -b, --browser
cr [url] open page in Chromium
ff [url] open page in Firefox
wk [url] open page in WebKit
codegen [options] [url] open page and generate code for user actions
screenshot [options] <url> <filename> capture a page screenshot
pdf [options] <url> <filename> save page as pdf
install Ensure browsers necessary for this version of Playwright are installed
help [command] display help for command
下载 Chromeium、Firefox、Safari(WebKit)浏览器驱动
autobahn==20.7.1
pytest==6.1.0
pytest-asyncio==0.14.0
pytest-cov==2.10.1
pytest-sugar==0.9.4
pytest-xdist==2.1.0
pytest-timeout==1.4.2
flaky==3.7.0
pixelmatch==0.2.1
Pillow==8.0.0
mypy==0.782
setuptools==50.3.0
# TODO: use PyPi version after >20.3.0 is released
git+https://github.com/twisted/twisted.git@4ff22287cab3b54f51cee41ea2619e72d1bff2e4
wheel==0.35.1
black==20.8b1
pre-commit==2.7.1
flake8==3.8.3
twine==3.2.0
pyOpenSSL==19.1.0
service_identity==18.1.0
pdoc3==0.9.1
再执行
$ python -m playwright install
Removing unused browser at C:\Users\Administrator\AppData\Local\ms-playwright\chromium-833159
chromium v833159 downloaded to C:\Users\Administrator\AppData\Local\ms-playwright\chromium-833159
firefox v1221 downloaded to C:\Users\Administrator\AppData\Local\ms-playwright\firefox-1221
webkit v1402 downloaded to C:\Users\Administrator\AppData\Local\ms-playwright\webkit-1402
1.同步
from playwright import sync_playwright
with sync_playwright() as p:
browser_type = p.chromium
browser = browser_type.launch(headless=False)
page = browser.newPage()
page.goto('https://www.baidu.com/')
page.screenshot(path=f'{browser_type.name}.png')
browser.close()
2.异步
import asyncio
from playwright import async_playwright
async def main():
async with async_playwright() as p:
browser_type = p.chromium
browser = await browser_type.launch(headless=False)
page = await browser.newPage()
await page.goto('https://www.baidu.com/')
await page.screenshot(path=f'{browser_type.name}1.png')
await browser.close()
asyncio.get_event_loop().run_until_complete(main())
3.手机模式
from playwright import sync_playwright
with sync_playwright() as p:
phone_name = 'iPhone 11 Pro'
iphone_11 = p.devices[phone_name]
browser = p.webkit.launch(headless=False)
context = browser.newContext(
**iphone_11,
locale='zh-CN'
)
page = context.newPage()
page.goto('https://map.baidu.com/mobile/webapp/index/index/')
page.screenshot(
path=f'{phone_name}.png') browser.close()
4.录制脚本
使用命令 codegen
命令格式
$ python -m playwright codegen -h
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
eg:
python -m playwright codegen --target python -o 'my1.py' -b chromium https://www.baidu.com
my1.py
from playwright import sync_playwright
def run(playwright):
browser = playwright.chromium.launch(headless=False)
context = browser.newContext()
# Open new page
page = context.newPage()
# Go to https://www.baidu.com/
page.goto("https://www.baidu.com/")
# Click input[name="wd"]
page.click("input[name=\"wd\"]")
# Fill input[name="wd"]
# with page.expect_navigation(url="https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=hello&fenlei=256&rsv_pq=e1fa5e4c0000d5a6&rsv_t=577f7bNmG1aOHBEWyQJLIfxHSyytPL7Q1GczIkdkkSwbPsx3vLC%2FGKkrqQE&rqlang=cn&rsv_enter=1&rsv_dl=tb&rsv_sug3=6&rsv_sug1=4&rsv_sug7=100&rsv_sug2=0&rsv_btype=i&prefixsug=hello&rsp=5&inputT=1909&rsv_sug4=3707"):
with page.expect_navigation():
page.fill("input[name=\"wd\"]", "hello")
# Close page
page.close()
# ---------------------
context.close()
browser.close()
with sync_playwright() as playwright:
run(playwright)