Playwright 插件 自动化 网页抓取 端到端测试 Claude Code
Playwright自动化网页抓取全攻略
▲ 设为星标,以防失联
嘿,亲爱的朋友们,晚上好呀!今天想和大家聊聊一个超实用的工具。它能让我们的网页操作变得像呼吸一样自然。没错,就是Playwright!这个由微软开发的神奇工具,不仅能帮我们做自动化测试,还能轻松抓取网页数据。让我们一起探索这个技术小助手吧!
🌟 初识Playwright
Playwright是什么?它是一款开源的自动化工具。由微软团队精心打造。支持Python等多种编程语言。简单说,它能模拟人类操作浏览器。打开网页。点击按钮。填写表单。甚至等待特定内容出现。就像有个小助手在替你浏览网页。
为什么选择Playwright?它支持多浏览器。Chrome、Firefox、Safari都能用。安装简单,几行命令搞定。API设计优雅,代码可读性强。还能处理复杂的网页交互。比如弹窗、iframe、文件上传等。这些特性让它在自动化领域备受青睐。
Playwright能做什么?端到端测试。模拟用户操作流程。网页数据抓取。获取你想要的信息。自动化重复任务。解放双手。网页性能监控。检查加载速度。应用场景广泛,无论是开发测试还是数据采集,都能大显身手。
🛠️ 环境准备
开始使用Playwright前,我们需要做好准备工作。第一步是安装Python。确保你的电脑上已安装Python 3.7或更高版本。打开终端,输入python –version检查版本。
接下来安装Playwright。打开终端,输入以下命令:
pip install playwright
安装完成后,还需要下载浏览器驱动。运行以下命令:
playwright install
这个命令会自动下载所需的浏览器驱动。包括Chromium、Firefox和WebKit。耐心等待几分钟,所有组件就准备就绪了。
创建项目目录是个好习惯。在终端中输入:
mkdir playwright_demo
cd playwright_demo
然后创建一个Python文件:
touch scraper.py
现在环境已经准备妥当。可以开始编写第一个Playwright脚本了!
🚀 基础操作
让我们从最简单的浏览器操作开始。首先导入Playwright库:
from playwright.sync_api import sync_playwright
创建一个函数来启动浏览器:
def run(playwright):
browser = playwright.chromium.launch()
page = browser.new_page()
page.goto(“https://example.com”)
print(page.title())
browser.close()
运行这个脚本:
with sync_playwright() as playwright:
run(playwright)
这段代码会打开一个浏览器窗口。访问example.com网站。打印页面标题。然后关闭浏览器。
模拟用户点击操作也很简单。比如点击一个按钮:
page.click(“button”)
填写表单字段:
page.fill(“input[name=’username’]”, “your_username”)
page.fill(“input[name=’password’]”, “your_password”)
等待元素出现:
page.wait_for_selector(“.content”)
这些基础操作构成了Playwright的核心功能。掌握它们,你就能完成大部分自动化任务了。
📊 数据抓取实战
数据抓取是Playwright的强项。让我们以一个简单网站为例,抓取文章标题。
首先访问目标网站:
page.goto(“https://example-news.com”)
“
选择所有文章标题元素:
titles = page.query_selector_all(“h2.article-title”)
提取标题文本:
for title in titles:
print(title.inner_text())
如果需要分页,可以模拟点击下一页按钮:
page.click(“.next-page”)
“
等待新内容加载:
page.wait_for_selector(“.article-title”)
抓取图片链接也很实用:
images = page.query_selector_all(“img”)
for img in images:
src = img.get_attribute(“src”)
print(src)
“
处理动态加载内容是关键。现代网页常用AJAX加载数据。使用wait_for_load_state确保内容完全加载:
page.wait_for_load_state(“networkidle”)
“
抓取数据后,保存到文件也很重要。可以使用Python的json模块:
import json
data = []
titles = page.query_selector_all(“h2.article-title”)
for title in titles:
data.append({“title”: title.inner_text()})
with open(“articles.json”, “w”) as f:
json.dump(data, f, indent=2)
这些技巧让你能够高效抓取网页数据。记得遵守网站的使用条款哦!
🔧 高级技巧
处理iframe是常见需求。切换到iframe内容:
iframe = page.frame_locator(“iframe[name=’content’]”)
iframe.click(“.button”)
处理弹窗对话框:
page.click(“button”)
page.on(“dialog”, lambda dialog: dialog.accept())
文件上传操作:
page.set_input_files(“input[type=’file’]”, “path/to/file.pdf”)
截图功能很实用:
page.screenshot(path=”screenshot.png”)
“
录制操作可以生成代码。使用Playwright的代码生成器:
playwright codegen https://example.com
“
这个命令会打开浏览器。你的所有操作都会被记录。并自动生成Python代码。
处理认证页面也很简单。使用basic auth:
page.goto(“https://example.com”, auth={“username”: “user”, “password”: “pass”})
“
或者使用cookies:
context = browser.new_context()
context.add_cookies([{“name”: “session”, “value”: “abc123”, “domain”: “example.com”}])
page = context.new_page()
“
这些高级技巧让你能应对各种复杂场景。让自动化更加灵活强大。
🚨 注意事项
使用Playwright时,有几点需要注意。尊重网站的robots.txt文件。不要过度频繁请求。避免给服务器造成负担。
设置请求间隔是个好习惯。在循环中加入延时:
import time
time.sleep(2)
处理反爬机制也很重要。设置随机User-Agent:
page.set_extra_http_headers({“User-Agent”: “Mozilla/5.0 (Windows NT 10.0; Win64; x64)”})
“
使用代理可以避免IP被封禁:
browser = playwright.chromium.launch(proxy={“server”: “http://myproxy.com:3128”})
“
数据清洗不可忽视。抓取到的数据往往需要处理。去除多余空格、特殊字符等:
title = title.strip().replace(“\n”, “”)
“
错误处理要完善。使用try-except捕获异常:
try:
page.click(“button”)
except Exception as e:
print(f”Error: {e}”)
“
遵守法律法规是底线。不要抓取敏感或隐私数据。合法合规使用技术。
🎯 实际应用案例
让我们看一个实际应用案例。抓取豆瓣电影Top250电影信息。
首先访问豆瓣电影页面:
page.goto(“https://movie.douban.com/top250”)
选择电影条目:
movies = page.query_selector_all(“.item”)
提取电影信息:
for movie in movies:
rank = movie.query_selector(“.rank”).inner_text()
title = movie.query_selector(“.title”).inner_text()
rating = movie.query_selector(“.rating_num”).inner_text()
print(f”{rank}. {title} – 评分: {rating}”)
处理分页:
next_page = page.query_selector(“.next”)
if next_page:
next_page.click()
page.wait_for_load_state(“networkidle”)
保存数据到CSV文件:
import csv
with open(“douban_top250.csv”, “w”, newline=””, encoding=”utf-8″) as f:
writer = csv.writer(f)
writer.writerow([“排名”, “电影名”, “评分”])
for movie in movies:
rank = movie.query_selector(“.rank”).inner_text()
title = movie.query_selector(“.title”).inner_text()
rating = movie.query_selector(“.rating_num”).inner_text()
writer.writerow([rank, title, rating])
这个案例展示了完整的抓取流程。从访问网页到数据保存。你可以根据需要调整代码。抓取其他网站的数据。
🌈 结语
Playwright真是个神奇的工具。它让自动化变得简单有趣。无论是网页测试还是数据抓取。都能轻松应对。希望这篇文章能帮助你入门。开始你的Playwright之旅吧!
记得在实践中不断探索。尝试更多高级功能。解决实际问题。技术之路没有终点。保持好奇心。持续学习。你会发现更多可能性。
如果你有任何问题或建议。欢迎在评论区留言。我们一起交流进步。感谢阅读。下次再见!

👇 看完文章,点个赞呗!
你的支持是我创作的最大动力
夜雨聆风