乐于分享
好东西不私藏

Playwright 插件 自动化 网页抓取 端到端测试 Claude Code

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之旅吧!

记得在实践中不断探索。尝试更多高级功能。解决实际问题。技术之路没有终点。保持好奇心。持续学习。你会发现更多可能性。

如果你有任何问题或建议。欢迎在评论区留言。我们一起交流进步。感谢阅读。下次再见!

👇 看完文章,点个赞呗!

你的支持是我创作的最大动力