影刀RPA Python playwright浏览器自动化:新一代网页操控利器
作者:林焱
前面讲了Selenium,这里介绍一个更强的替代品:Playwright。它由微软开发,性能和稳定性都比Selenium好一截。如果你的影刀流程需要复杂的浏览器操作,Playwright是更好的选择。
Playwright比Selenium好在哪?
- 速度快:不需要WebDriver中间层,直接通过CDP协议控制浏览器
- 自动等待:点击前自动等待元素可交互,不用手动写wait
- 多浏览器支持:Chromium、Firefox、WebKit,一套代码全兼容
- 自带录屏和Trace:流程出了问题可以回放,排查更方便
- 网络拦截:可以劫持请求和响应,不用额外工具
在影刀Python代码块中使用Playwright
先安装:pip install playwright,然后安装浏览器:python -m playwright install chromium
基本模板:
fromplaywright.sync_apiimportsync_playwrightwithsync_playwright()asp:# 启动浏览器(headless=False可以看到窗口)browser=p.chromium.launch(headless=False)page=browser.new_page()# 访问网页page.goto("https://example.com/login")# 填写表单——Playwright自动等待元素出现page.fill("#username","admin")page.fill("#password","123456")page.click("button[type='submit']")[video(video-5DQodQCc-1783620727223)(type-csdn)(url-https://live.csdn.net/v/embed/526818)(image-https://v-blog.csdnimg.cn/asset/582d14c3bd0451c5399cd990b56e2a0d/cover/Cover0.jpg)(title-拼多多店群自动化报活动上架!)]# 等待登录成功page.wait_for_selector(".user-info",timeout=10000)# 获取页面内容title=page.text_content("h1")html=page.content()# 截图page.screenshot(path="screenshot.png",full_page=True)browser.close()解决影刀的痛点场景
场景1:等待复杂的Ajax加载
影刀的等待指令只能等固定时间或元素出现。当需要等"某个API请求完成"时就很麻烦。Playwright一行搞定:
# 等待特定的API请求完成withpage.expect_response(lambdaresp:"/api/data"inresp.url):page.click("#load-more")# 此时数据已加载完毕场景2:处理下载文件
# 自动下载文件,不弹对话框withpage.expect_download()asdownload_info:page.click("#download-btn")download=download_info.value download.save_as(f"D:/下载/{download.suggested_filename}")场景3:模拟移动端
# 模拟手机浏览器iphone=p.devices['iPhone 12']browser=p.chromium.launch()page=browser.new_page(**iphone)page.goto("https://m.example.com")# 现在你的请求就像是从iPhone发出来的场景4:网络拦截——抓AJAX数据
# 拦截所有JSON响应,提取你需要的数据api_data=[]defhandle_response(response):if'/api/list'inresponse.urlandresponse.status==200:api_data.append(response.json())page.on("response",handle_response)page.goto("https://example.com/list")# page加载完毕后,api_data里就有了接口返回的数据踩坑实录
坑1:playwright install下载浏览器很慢
Playwright的install命令会从国外CDN下载Chromium(约130MB),国内网络可能极慢。解决方案是设置国内镜像:
setPLAYWRIGHT_DOWNLOAD_HOST=https://npmmirror.com/mirrors/playwright/ python-mplaywrightinstallchromium坑2:同步API和异步API混用
Playwright有同步(sync_api)和异步(async_api)两套API。影刀的Python代码块是同步执行的,必须用sync_api。如果你用async_api,需要额外的asyncio.run()包装,容易出错。
坑3:浏览器不关闭导致进程残留
如果代码中途报错,browser.close()没执行到,后台会残留chromium进程。用try/finally确保关闭:
TEMU店群矩阵自动化运营核价报活动
browser=p.chromium.launch()try:# 你的操作passfinally:browser.close()或者用with语句(推荐),它会自动清理。
坑4:headless模式下截图空白
headless=True时,某些页面截图是空白的。可以设置特殊的视口大小解决:
browser=p.chromium.launch(headless=True)page=browser.new_page(viewport={"width":1920,"height":1080})Playwright vs Selenium 怎么选?
| 场景 | 推荐 |
|---|---|
| 简单表单填写和点击 | Selenium(生态更成熟) |
| 复杂等待和Ajax处理 | Playwright |
| 需要抓取API数据 | Playwright(网络拦截) |
| 需要多浏览器兼容测试 | Playwright |
| 已有大量Selenium代码 | Selenium(别折腾迁移) |
如果在项目中从零开始,我没理由不推荐Playwright。但如果团队已经在用Selenium且跑得很稳定,没必要为了换而换。
写在最后
Playwright是比Selenium更优雅的浏览器自动化方案。影刀搞定常规场景,Playwright搞定硬骨头。关键不在于用哪个工具,而在于知道什么场景该用哪个。