新一代爬取JavaScript渲染页面的利器-playwright(二)

接上文:新一代爬取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):
    
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jared Chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值