接上文:新一代爬取JavaScript渲染页面的利器-playwright(一)
上文我们主要讲了Playwright的特点、安装、基本使用、代码生成的使用以及模拟移动端浏览,这篇我们主要讲下Playwright的选择器以及常见的操作方法。
6.选择器
我们可以把传入的字符串称为Element Selector,除了它已经支持的CSS选择器、XPath,Playwright还为它拓展了一些方便好用的规则,例如直接根据文本内容筛选,根据节点的层级结构筛选等。
- 文本选择
文本选择支持text=这样的语句进行筛选,例如:
page.click(“text=Log in”)
该句代表点击文本内容是Log in的节点
- CSS选择器
例如根据id/class筛选:
page.click(“button”)
page.click(“nav-bar .contact-us-item”)
根据特定的节点属性进行筛选:
page.click(“[data-test-login-button]”)
page.click(“[aria-label=‘Sign in’]”)
- CSS选择器+文本值
常用的方法是has-text和text,前者代表节点中包含指定的字符串,后者代表节点中的文本值和指定的字符串完全匹配,示例如下:
page.click(“article:has-text(‘playwright’)”)
page.click(“#nav-bar :text(‘Contact us’)”)
- CSS选择器+节点关系
CSS选择器还可以结合文本关系来筛选节点,例如指定另一个选择器,示例如下:
page.click(“.item-description:has(.item-promo-banner)”)
这里选择的就是class为item-description的节点,且该节点还要包含class为item-promo-banner的子节点。
另外还可以结合一些相对位置关系,例如使用right-of指定位于某个节点右侧的节点。
page.click(“input:right-of(:text(‘Username’))”)
这里选择的就是一个input节点,并且该节点要位于Username的节点的右侧。
- XPath
XPath也是支持的,不过是xpath关键字需要我们自己来指定,示例如下:
page.click(“xpath=//button”)
7.常用操作方法
下面介绍些一些常用的操作方法。例如click(点击),fill(输入)等等,这些方法都属于page对象,所有方法都可以从page对象的API文档查找。
下面介绍几个常见的操作方法的用法。
- 事件监听
page对象提供一个on方法,用来监听页面中发生的各个事件,例如close,console,load,request,response等。
这里我们监听response事件,在每次页面请求得到相应的时候会触发这个事件,我们可以设置回调方法来获取响应中的全部信息,示例如下:
from playwright.sync_api import sync_playwright
def on_response(response):
print(f'State{
response.status}:{
response.url}')
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
page = browser.new_page()
page.on('response',on_response)
page.goto('https://spa6.scrape.center')
page.wait_for_load_state('networkidle')
browser.close()
可以看到输出结果如下;

我们在创建page对象后,就开始监听response事件,同时将回调方法设置为on_response,其接收一个参数,然后输出响应中的状态码和链接。
如果观察网页请求包内容可以发现,这个输出结果正好对应浏览器network中所有的请求和响应。
这个网站的真实的数据都是Ajax加载的,同时Ajax请求中还带有加密参数,不容易轻易获取。但是有了on_response方法,如果我们想截取Ajax请求,是非常容易的。
from playwright.sync_api import sync_playwright
def on_response(response):

最低0.47元/天 解锁文章
5300





