Python Playwright
最后修改于 2024 年 1 月 29 日
在本文中,我们将展示如何使用 Playwright 在 Python 中自动化浏览器。
Playwright
Playwright 是由 Microsoft 创建的跨浏览器自动化库。它支持所有现代渲染引擎,包括 Chromium、WebKit 和 Firefox。
Playwright 可用于 Node、Python、.NET 和 JVM。
Playwright 允许在无头模式(默认模式)下使用浏览器,该模式在没有 UI 的情况下工作。这对于脚本编写非常有用。
$ pip install --upgrade pip $ pip install playwright $ playwright install
我们安装 Playwright 库和浏览器驱动程序。
Python Playwright 获取标题
在第一个示例中,我们获取网页的标题。
#!/usr/bin/python
from playwright.sync_api import sync_playwright
with sync_playwright() as playwright:
webkit = playwright.webkit
browser = webkit.launch()
page = browser.new_page()
url = 'http://webcode.me'
page.goto(url)
title = page.title()
print(title)
browser.close()
该示例检索并打印一个小型网页的标题。
from playwright.sync_api import sync_playwright with sync_playwright() as playwright: ...
我们以同步方式使用 Playwright。
webkit = playwright.webkit
我们使用 Webkit 驱动程序。
browser = webkit.launch() page = browser.new_page()
我们启动浏览器并创建一个新页面。默认浏览器模式是无头的;也就是说,不显示 UI。
url = 'http://webcode.me' page.goto(url)
我们导航到指定的 URL。
title = page.title() print(title)
我们获取标题并打印它。
$ ./main.py My html page
Python Playwright 创建截图
在接下来的示例中,我们创建一个网页截图。
#!/usr/bin/python
from playwright.sync_api import sync_playwright
with sync_playwright() as playwright:
webkit = playwright.webkit
browser = webkit.launch()
page = browser.new_page()
url = 'http://webcode.me'
page.goto(url)
page.screenshot(path='shot.png')
browser.close()
使用 screenshot 函数创建截图;path 属性指定文件名。
Python Playwright 异步示例
下一个示例是前一个示例的异步版本。
#!/usr/bin/python
import asyncio
from playwright.async_api import async_playwright
async def main():
async with async_playwright() as playwright:
webkit = playwright.webkit
browser = await webkit.launch()
page = await browser.new_page()
url = 'http://webcode.me'
await page.goto(url)
await page.screenshot(path='shot.png')
await browser.close()
asyncio.run(main())
对于异步版本,我们使用 async/await 关键字和 asyncio 模块。
Python Playwright 设置 HTTP 标头
使用 set_extra_http_headers 函数,我们可以为客户端指定 HTTP 标头。
#!/usr/bin/python
from playwright.sync_api import sync_playwright
with sync_playwright() as playwright:
webkit = playwright.webkit
browser = webkit.launch()
page = browser.new_page()
page.set_extra_http_headers({"User-Agent": "Python program"})
url = 'http://webcode.me/ua.php'
page.goto(url)
content = page.text_content('*')
print(content)
browser.close()
我们将 User-Agent 标头设置为请求,然后导航到 http://webcode.me/ua.php URL,该 URL 将 User-Agent 标头返回给客户端。
$ ./main.py Python program
Python Playwright 点击元素
在下一个示例中,我们使用 click 点击 button 元素。点击按钮后,会在输出 div 元素中显示一条文本消息。
#!/usr/bin/python
import time
from playwright.sync_api import sync_playwright
with sync_playwright() as playwright:
webkit = playwright.webkit
browser = webkit.launch(headless=False)
page = browser.new_page()
url = 'http://webcode.me/click.html'
page.goto(url)
time.sleep(2)
btn = page.locator('button');
btn.click()
output = page.locator('#output');
print(output.text_content())
time.sleep(1)
browser.close()
该示例启动浏览器。
browser = webkit.launch(headless=False)
要启动 UI,我们将 headless 选项设置为 False。
time.sleep(2)
我们稍微放慢程序的速度。
btn = page.locator('button');
btn.click()
我们使用 locator 定位按钮元素,并使用 click 点击它。
output = page.locator('#output');
print(output.text_content())
我们定位输出元素并获取其文本内容。
$ ./main.py Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 ...
Python Playwright 定位元素
在下一个示例中,我们使用 locator 查找元素。
#!/usr/bin/python
from playwright.sync_api import sync_playwright
with sync_playwright() as playwright:
webkit = playwright.webkit
browser = webkit.launch()
page = browser.new_page()
url = 'http://webcode.me/os.html'
page.goto(url)
els = page.locator('ul li').all();
for e in els:
print(e.text_content())
browser.close()
程序查找所有 li 标签并打印其内容。
$ ./main.py Solaris FreeBSD Debian NetBSD Windows
来源
在本文中,我们使用了 Python Playwright 库。
作者
列出所有 Python 教程。