playwright使用小技巧
playwright简介
playwright是微软开源的一款自动化测试框架,其以卓越的性能和强大的功能,在自动化测试和爬虫领域越来越流行,逐步开始替代selenium。本文记录在使用playwright时用到的一些小技巧
playwright 简单实用
安装
pip install playwright # 安装playwright 库
playwright install # 此时会自动化安装浏览器,非必须
playwright install-deps # 安装一些依赖,非必须使用
import json
import time
import asyncio
chrome_path = 'chrome 路径'
with sync_playwright() as p:
# 使用系统安装的 Chromium
browser = p.chromium.launch(
executable_path=chrome_path,
headless=False
args=[
"--no-sandbox",
"--disable-gpu",
"--disable-setuid-sandbox",
"--disable-dev-shm-usage",
"--disable-extensions",
"--disable-blink-features=AutomationControlled",
"--start-maximized"
]
)
context = browser.new_context()
page = context.new_page()
page.goto('https://www.baidu.com')
await asyncio.sleep(300)
执行上面的代码,会打开chrome浏览器,然后打开百度页面
playwright小技巧
1. 开启debug模式
在启动,增加参数headless=False,运行代码时,会看到浏览器被打开,可以很方面的看到代码所执行的操作
2. 隐藏爬虫指纹
此处主要是将js对象navigator.webdriver 隐藏掉,同时设置使用的系统平台信息
3. 上下文信息传递和保存
大多数网站都要求登录,我们在使用playwright时经常需要让用户处于登录态才能进行下一步操作,此时我们可以通过上下文,在初始化时,让用户处于登录态,同时操作完成是,将上下文信息持久化存储
初始化上下文
在初始化context时,可以通过storage_state参数将上下文信息传递进去,storage_state支持两种格式,一种是文件路径,另一种是python dict形式;因此我可以将上下文保存到文件中,通过文件的形式传递,也可以从缓存或者数据库中读取,构造成dict形式传递
保存上下文
通过context.storage_state()可以拿到当先上下文信息,然后可以保存到文件,或者持久化到缓存或者数据库中
4. 打印控制台信息
在遇到异常时,尤其是js执行异常时,排查非常困难,因此可以通过将控制台信息打印出来,帮助我们排查问题
通过定义方法,然后通过page.on 注册
5. 打印网络请求和响应信息
有些站点可能针对爬虫做了特殊处理,比如我知道的有些站点检测到爬虫时会返回400或者202,针对这种情况在排查时非常困难且耗时,因此可以将网络请求信息全部打印,协助排查
也是通过page.on注册
6. 篡改请求或者响应
在某些时候,我们可能希望拦截请求,然后针对请求或者响应做一些特殊处理来模拟一些情况,此时如果可以篡改请求,将会非常有用
这里主要通过page.route方法实现
6.1 篡改请求
6.2 篡改响应
笔者使用此方法实现了静态文件缓存
7. 屏幕截图
如果开启无头模式,将没有浏览器界面,此时发生了什么我们并不清楚,因此可以通过屏幕截图的方式来保存现场
最后更新于