playwright中文文档,playwright安装
(稍后补充)
页面基本操作
导航剧作家中文文档剧作家中文网根据官网文档,调用page.goto(url)后的页面加载过程:
设置通过网络加载url触发的page.on(domcontentloaded )事件执行页面的js脚本,静态资源触发的page.on(laod )事件页面将执行动态加载的脚本。当500毫秒内没有新的网络请求时,触发networkidle事件的page.goto(url)将跳转到新的链接。默认情况下,剧作家会等到加载状态。如果我们不关心加载的CSS图像和其他信息,我们可以等到domcontentloaded状态。如果页面是ajax加载的,那么我们需要等到网络空闲状态。如果networkidle也不合适,可以使用page.wait_for_selector等待一个元素出现。但是会自动等待点击等操作。
page.goto(url,referer= ,timeout=30,wait _ until= domcontentloaded load network idle )//导航并等待,直到网络空闲wait page . goto( https://example . com ,{ wait until: network idle });剧作家会自动等待元素处于可操作的稳定状态。当然,也可以使用page.wait_for_*函数手动等待:
page.wait_for_event(event ,event_predict,timeout)page . wait _ for _ function(js _ function)page . wait _ for _ load _ state(state= domcontentloaded load network idle ,Time out)page。等待选择器(选择器,超时)页面。wait _ for _ time out(超时)#不建议使用以下方法:
# selector引用表达式页面. click(selector)page . Fill(selector,value)如CSS # Fill输入#示例页面中的值. click(#search )获取页面中数据的主要方法有:
page . URL # URL page . title()# title page . content()#获取整页page . inner _ text(selector)# element . inner _ text()page . inner _ html(selector)page . text _ content(selector)page . Get _ attribute(selector,attr)# eval _ on _ selector(selector,Js_expression)#例如:search _ value=page . eval _ on _ selector( # search , El=El . value )# eval用于获取数据可以读取值result=page . evaluate(([x,y])=promise.resolve (x * y),[7,8])print(result)# prints 56
选择器表达式
在上面的代码中,我们使用了CSS表达式(比如#其实,剧作家也支持XPath和两个自己定义的简单表达式,是自动识别的。#通过文本选择元素,这是由剧作家page.click定义的表达式( text=login)#直接选择page.click(id=login)#通过CSS选择元素,page.click(#search)#除了常见的CSS表达式,剧作家还支持几个新的伪类# :has来表示元素page . click( article:has(div . prome))#:用于断言自身page . click( button:is(:text( sign In ))),text( log In )))))))#:text W )) # regular #也可以匹配page . click( button:right-of(# search))# right page . click( button:left-of(# search))# left page . click( button:above(# search))# Top page . click( button:below(# search))# Bottom page . click( button:near(# search))# Select page . click(//button[@ ID= search ])))# all//Or .以开头的表达式将默认为XPath表达式。对于CSS表达式,还可以添加前缀css=来显式指定它们。比如css=。登录等同于。登录。
除了上述四种表达方式,剧作家还支持使用组合表达方式,即四种表达方式的混合。
page . click( CSS=nav text=log In )
复用 Cookies 等认证信息
在木偶戏中,重用Cookies也是一个持久的问题。这是剧作家特别方便的一点。他可以直接导出Cookies和LocalStorage,然后在新的上下文中使用它们。# 保存状态用打开( state.json , w )作为f:f . write(JSON。转储(存储))#加载状态打开(’状态。JSON’)为f:storage _ state=JSON。loads(f . read())上下文=浏览器。新上下文(存储状态=存储状态)
监听事件
通过第页(事件,fn)可以来注册对应事件的处理函数:def log _ request(intercepted _ request):print(发出请求:,截获的请求。URL)页面。on(请求,日志请求)#稍后.page.remove_listener(request ,log_request)其中比较重要的就是请求和反应两个事件
拦截更改网络请求
可以通过第页(请求)和第页(回复)来监听请求和响应事件。从剧作家。同步_api导入同步_剧作家作为剧作家定义运行(pw):浏览器=pw。WebKit。launch()page=浏览器。new _ page()#订阅请求和响应事件page.on(request ,lambda request: print(,request.method,request.url)) page.on(response),lambda response: print(,response.status,response。URL))页面。goto( https://示例。com’)浏览器。close(),其中剧作家()为pw:运行(pw)其中请求和反应的属性和方法,可以查阅文档:https://剧作家。开发/python/docs/API/class-请求
通过上下文。路由,还可以伪造修改拦截请求等。比如说,拦截所有的图片请求以减少带宽占用:
上下文=浏览器。new _ context()page=上下文。new _ page()#路线的参数默认是通配符,也可以传递编译好的正则表达式对象context.route(**/*).{png,jpg,jpeg} ,lambda route:route。abort())上下文。路线(回复编译(r (r .png$)( .jpg$))、lambda路由:路由。abort())页面。goto( https://示例。com’)浏览器。关闭()其中途径对象的相关属性和方法,可以查阅文档:https://剧作家。开发/python/docs/API/class-route
灵活设置代理
剧作家还可以很方便地设置代理木偶师。在打开浏览器之后就无法在更改代理了,对于爬虫类应用非常不友好,而剧作家可以通过语境设置代理,这样就非常轻量,不用为了切换代理而重启浏览器。上下文=浏览器。new _ context(proxy={ server : http://示例。com:3128 , bypass: .example.com ,用户名: ,密码: })
杀手级功能:录制操作直接生成代码
剧作家的命令行还内置了一个有趣的功能:可以通过录制你的点击操作,直接生成计算机编程语言代码。python -m剧作家http://example.com/法典委员会剧作家还有很多命令行功能,比如生成截图等等,可以通过python -m剧作家-h查看。
其他
除此之外,剧作家还支持处理页面弹出的窗口,模拟键盘,模拟鼠标拖动(用于滑动验证码),下载文件等等各种功能,请查看官方文档吧,这里不赘述了。对于写爬虫来说,剧作家的几个特性可以说是秒杀木偶师/木偶师:官方同步版本的应用程序接口方便导入导出饼干轻量级设置和切换代理支持丰富的选择表达式
参考:
剧作家:比操纵木偶的人更好用的浏览器自动化工具-知乎