Playwright 是一个用于自动化浏览器操作的开源工具,由 Microsoft 开发和维护。它支持多种浏览器(包括 Chromium、Firefox 和 WebKit)和多种编程语言(如 Python、JavaScript 和 C#),可以用于测试、爬虫、自动化任务等场景。
python版本的Playwright官网文档:
https://playwright.dev/python/docs/intro
系统要求:
安装playwright的python版本
安装Playwright所需的所有工具插件和所支持的浏览器
创建一个py文件,比如:main.py
在终端中,执行如下指令:
playwright codegen -o main.py

playwright codegen --viewport-size=800,600 www.baidu.com -o main.py
playwright codegen --device="iPhone 13" -o main.py
playwright codegen --save-storage=auth.json http://download.java1234.com/
playwright codegen --load-storage=auth.json http://download.java1234.com/ -o main.py
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
# headless 是否是无头浏览器
bro=p.chromium.launch(headless=False)
page=bro.new_page()
# 访问的网站
page.goto("https://www.baidu.com")
# 等待时长
page.wait_for_timeout(1000)
# 获取网页标头
title=page.title()
# 获取网站源码
content=page.content()
print(title,content)
page.close()
bro.close()

click() 方法fill() 方法import random
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
# headless 是否是无头浏览器
bro = p.chromium.launch(headless=False)
page = bro.new_page()
# 访问的网站
page.goto("https://www.baidu.com")
# 等待时长
page.wait_for_timeout(1000)
# 定位并输入python
page.locator("#kw").fill("python")
# 定位搜索按钮,进行搜索 #id定位 .class定位
page.locator("#su").click()
page.wait_for_timeout(1000)
# 网页回退
page.go_back()
page.wait_for_timeout(1000)
# 标签+属性定位
page.locator("input#kw").fill("人工智能")
page.locator("#su").click()
page.go_back()
page.wait_for_timeout(1000)
# 层级定位
page.locator('#form > span > input#kw').fill('数据分析')
page.locator('#su').click()
page.wait_for_timeout(1000)
page.go_back()
page.wait_for_timeout(1000)
# 聚焦于当前标签
page.locator('#form > span > input#kw').focus()
input_text = 'Hello, World!'
for char in input_text:
page.keyboard.type(char, delay=random.randint(300, 600))
# 定位搜索按钮,进行点击操作
page.locator('#su').click()
page.close()
bro.close()
page.locator(xpath表达式)
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
bro = p.chromium.launch(headless=False,slow_mo=2000)
page = bro.new_page()
page.goto('https://www.bilibili.com/')
#xpath定位
page.locator('//*[@id="nav-searchform"]/div[1]/input').fill('Python教程')
page.locator('//*[@id="nav-searchform"]/div[2]').click()
page.close()
bro.close()
const count = await page.locator('div.my-class').count();
console.log(count); // 输出匹配 'div.my-class' 的元素数量
const element =page.locator('button').nth(1); // 获取第二个按钮元素
element.click();
const element = await page.locator('h1');
const text = await element.inner_text();
console.log(text); // 输出 h1 元素的内部文本
const element =page.locator('button:text("Click me")'); // 定位包含文本 "Click me" 的按钮
element.click();
const element = page.locator('img');
const src = element.get_attribute('src');
console.log(src); // 输出图像的 src 属性值