pyppeteer最为核心类Page的接口方法(下)

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 重要:因为同步公号的文章格式很难保证,所以后面文章选择性在其他平台同步,欢迎移步公众号(Python之战),每日更新原汁原味!在上一篇《pyppeteer最为核心类Page的接口方法》讲了大部分pyppeteer的Page类的接口,与selenium相比增强了与页面js的交互功能,同时增加了设备的伪装和模拟能力,一方是因为pyppeteer库是源于puppeteer,而puppeteer是Google提供了一个js库,本身和js的交互性强,所以在页面交互上更深入。

重要:因为同步公号的文章格式很难保证,所以后面文章选择性在其他平台同步,欢迎移步公众号(Python之战),每日更新原汁原味!

在上一篇《pyppeteer最为核心类Page的接口方法》讲了大部分pyppeteer的Page类的接口,与selenium相比增强了与页面js的交互功能,同时增加了设备的伪装和模拟能力,一方是因为pyppeteer库是源于puppeteer,而puppeteer是Google提供了一个js库,本身和js的交互性强,所以在页面交互上更深入。

也正是因为更深的js交互,所以可以任意修改任何网站在源码中的爬虫检测方式,并且毫不费劲,关于淘宝登陆有一种实现方式是使用中间代理修改检测的js文件,使用pyppeteer之后就不用这么麻烦,可以直接将js代码写入网站加载的js文件中。

继续Page类的剩下一下方法:

协程方法 setJavaScriptEnabled(enabled:bool )**

设置JavaScript启用/禁用。

协程方法 setOfflineMode(enabled:bool )**

设置离线模式启用/禁用。

协程方法 setRequestInterception(value:bool )

启用/禁用请求拦截,激活请求拦截允许 Request类的 abort(), continue_()和 response()方法,这提供了修改页面发出的网络请求的功能。

协程方法 setUserAgent(userAgent:str )

设置要在此页面中使用的用户代理。

参数:

userAgent(str) - 要在此页面中使用的特定用户代理

协程方法 setViewport(viewport:dict )

设置视图,可用选项包括:

width (int):以像素为单位的页面宽度。

height (int):以像素为单位的页面高度。

deviceScaleFactor (float):默认为1.0。

isMobile(bool):默认为False。

hasTouch(bool):默认为False。

isLandscape(bool):默认为False。

协程方法 tap(select:str )

点击与之匹配的元素,类似手机上的触摸功能

参数:

selector(str) - 搜索要触摸的元素的选择器。

target

返回此页面创建的目标。

协程方法 title()

获取页面标题

touchscreen

获取Touchscreen对象

tracing

获取跟踪对象

协程方法 type(selector:str,text:str,options:dict = None, kwargs )**

在selector选择器处输入text,类似selenium的keys,如果没有元素匹配selector,报错PageError

url

获取此页面的URL

viewport

返回视图字典,返回与setViewport()相同的字典字段

waitFor(selectorOrFunctionOrTimeout:Union[str,int,float],options:dict = None, args,* kwargs )**

等待页面上匹配元素出现,注意第一个位置参数:

如果selectorOrFunctionOrTimeout是number(int或float),则将其视为超时(以毫秒为单位),这将返回将在超时后执行的future。

如果selectorOrFunctionOrTimeout是一个JavaScript函数字符串,则此方法是一个快捷方式waitForFunction()。

如果selectorOrFunctionOrTimeout是选择器字符串或xpath字符串,则此方法是waitForSelector()或 的快捷方式waitForXPath()。如果字符串以字符串开头//,则将字符串视为xpath。

Pyppeteer尝试自动检测功能或选择器,但有时会错过检测。如果不按预期工作,请使用waitForFunction()或waitForSelector()直接使用 。

参数:

selectorOrFunctionOrTimeout:xpath或函数字符串或timeout(毫秒)

args(Any) - 传递函数的参数。

可用选项:请参阅waitForFunction()或 waitForSelector()

返回:

返回等待的对象,该对象解析为成功值的JSHandle。

waitForFunction(pageFunction:str, options:dict = None, * args, ** kwargs )

等到函数执行完成并返回一个truthy值。

参数:

args(Any) - 传递给的参数pageFunction。

返回:

返回等待pageFunction返回真值时解析的等待对象 。它解决了一个 JSHandle真正的价值。

此方法接受以下选项:

polling(str | number):pageFunction 执行的间隔,默认为raf。如果polling是数字,则将其视为执行函数的间隔(以毫秒为单位)。如果polling是字符串,则它可以是以下值之一:

raf:不断执行pageFunction的 requestAnimationFrame回调。这是最紧密的轮询模式,适合观察样式变化。

mutation:执行pageFunction每个DOM突变。

timeout(int | float):等待的最长时间(以毫秒为单位)。默认为30000(30秒),通过0禁用超时。

协程方法 waitForNavigation(options:dict =None,** kwargs )**

等待导航,可用选项与goto()方法相同,这将返回Response当页面导航到一个新的URL或重载。当您运行将间接导致页面导航的代码时,它非常有用。如果由于使用History API而导航到其他锚点或导航 ,则导航将返回None。

navigationPromise = async.ensure_future(page.waitForNavigation())
await page.click('a.my-link')  # indirectly cause a navigation
await navigationPromise  # wait until navigation finishes
或者
await asyncio.wait([
    page.click('a.my-link'),
    page.waitForNavigation(),
])

注意:使用History API更改URL被视为导航。

协程方法 waitForRequest(urlOrPredicate:Union [str,Callable [[pyppeteer.network_manager.Request],bool]],options:Dict [KT,VT] = None,kwargs)**

等待请求

参数:urlOrPredicate - 要等待的URL或函数。

此方法接受以下选项:timeout(int | float):最长等待时间(以毫秒为单位),默认为30秒,传递0以禁用超时。

firstRequest = await page.waitForRequest('http://example.com/resource')
finalRequest = await page.waitForRequest(lambda req: req.url == 'http://example.com' and req.method == 'GET')
return firstRequest.url

协程方法 waitForResponse(urlOrPredicate:Union [str,Callable [[pyppeteer.network_manager.Response],bool]],options:Dict [KT,VT] = None, kwargs)**

等待响应

参数:urlOrPredicate - 要等待的URL或函数。

此方法接受以下选项:timeout(int | float):最长等待时间(以毫秒为单位),默认为30秒,传递0以禁用超时。

firstResponse = await page.waitForResponse('http://example.com/resource')
finalResponse = await page.waitForResponse(lambda res: res.url == 'http://example.com' and res.status == 200)
return finalResponse.ok

waitForSelector(selector:str, options:dict = None, ** kwargs )

等待页面上出现匹配的元素,如果在调用方法selector已经存在,该方法将立即返回。如果在timeout等待的毫秒之后没有出现,则该函数将引发错误。

参数:selector(str) - 要等待的元素的选择器。

返回:返回等待的对象,该对象在将选择器字符串指定的元素添加到DOM时解析。

选项:

visible(bool):等待元素存在于DOM中并且可见; 即没有或 CSS属性。默认为。display: nonevisibility: hiddenFalse

hidden(bool):等待在DOM中找不到元素或隐藏元素,即具有或CSS属性。默认为。display: nonevisibility: hiddenFalse

timeout(int | float):等待的最长时间(以毫秒为单位)。默认为30000(30秒),为0禁用超时。

waitForXPath(xpath:str,options:dict = None, kwargs )**

等到xpath页面上出现匹配的元素,如果调用方法的时刻xpath已经存在,则该方法将立即返回;如果在timeout等待毫秒后没有出现xpath ,则该函数将引发异常。

参数:xpath(str) - 要等待的元素的[xpath]。

返回:返回等待由xpath字符串指定的元素添加到DOM时解析的等待对象。

选项:

visible(布尔):等待元素存在于DOM并是可见的,即,没有或 CSS属性。默认为。display: nonevisibility: hiddenFalse

hidden(bool):等待在DOM中找不到元素或隐藏元素,即具有或CSS属性。默认为。display: nonevisibility: hiddenFalse

timeout(int | float):等待的最长时间(以毫秒为单位)。默认为30000(30秒),为0禁用超时。

workers

获取此页面的所有执行线程,web workers概念是解决客户端JavaScript无法多线程的问题,其定义的worker是指代码的并行线程,不过web worker处于一个自包含的环境中,无法访问主线程的window对象和document对象

相关文章
|
5月前
|
JavaScript
js开发:请解释什么是ES6的类(class),并说明它与传统构造函数的区别。
ES6的类提供了一种更简洁的面向对象编程方式,对比传统的构造函数,具有更好的可读性和可维护性。类使用`class`定义,`constructor`定义构造方法,`extends`实现继承,并可直接定义静态方法。示例展示了如何创建`Person`类、`Student`子类以及它们的方法调用。
46 2
|
4月前
|
Python
技术经验解读:【Python】torrentParser1.04增加获得磁力链URI功能
技术经验解读:【Python】torrentParser1.04增加获得磁力链URI功能
23 0
|
jenkins 测试技术 持续交付
python接口自动化(三十六)-封装与调用--流程类接口关联续集(详解)
上一篇已经给大家都介绍过了流程类接口关联,但是由于博客的登录机制改变,所以没有办法给小伙伴们实战演练一下,那么这篇就按照上一篇计划的用jenkins来给小伙伴们演示一下流程类接口的封装和调用,其实很简单,就是用上一篇和前边这篇传送门的代码稍稍修改即可。不知道你自己练习了么,如果练习了,可以看看和我有什么不同,没练习的看看自己思路和我有啥不一样。好了废话少说进入主题
194 0
python接口自动化(三十六)-封装与调用--流程类接口关联续集(详解)
|
jenkins 测试技术 持续交付
python接口自动化(三十五)-封装与调用--流程类接口关联(详解)
流程相关的接口,主要用 session 关联,如果写成函数(如上篇),s 参数每个函数都要带,每个函数多个参数,这时候封装成类会更方便。在这里我们还是以博客园为例,带着小伙伴们实践一下。
381 0
python接口自动化(三十五)-封装与调用--流程类接口关联(详解)
|
JSON 前端开发 中间件
|
JavaScript 前端开发 Ruby
前端培训-初级阶段(13)-类,模块,继承
前端最基础的就是 HTML+CSS+Javascript。掌握了这三门技术就算入门,但也仅仅是入门,现在前端开发的定义已经远远不止这些。前端小课堂(HTML/CSS/JS),本着提升技术水平,打牢基础知识的中心思想,我们开课啦(每周四)。 该文为前端培训-初级阶段(13、18)的补充内容 (介绍了 ECMAScript 历史,ES6 常用点)。 本文介绍ECMAScript基础知识。 前端培训-初级阶段(13) - ECMAScript (语法、变量、值、类型、运算符、语句) 前端培训-初级阶段(13) - ECMAScript (内置对象、函数) 基础内容知识我们会用到。默认已读。
165 0
前端培训-初级阶段(13)-类,模块,继承
|
缓存 自然语言处理 安全
lucene原理及源码解析--核心类(下)
访问者模式把数据结构和作用于结构上的操作解耦合,使得操作集合可相对自由地演化。具体到这个类就是不管是什么类型的数据,我都把它添加到Document对象里。
lucene原理及源码解析--核心类(下)
|
存储 设计模式 大数据
lucene原理及源码解析--核心类(上)
马云说:大家还没搞清PC时代的时候,移动互联网来了,还没搞清移动互联网的时候,大数据时代来了。 然而,我看到的是:在PC时代搞PC的,移动互联网时代搞移动互联网的,大数据时代搞大数据的,都是同一伙儿人。 我就是一个做业务方向的,而回忆起真正做技术的时光,也就是大数据时代刚来临的时候做搜索了。 搜索用的是solr框架,solr就是包装了lucene实现了近实时索引。所以源头还是lucene。而且lucene是java写的全文检索库,源码是一定要研究一下的。
lucene原理及源码解析--核心类(上)
【Groovy】MOP 元对象协议与元编程 ( 方法合成引入 | 类内部获取 HandleMetaClass )
【Groovy】MOP 元对象协议与元编程 ( 方法合成引入 | 类内部获取 HandleMetaClass )
152 0
【Groovy】MOP 元对象协议与元编程 ( 方法合成引入 | 类内部获取 HandleMetaClass )
|
Web App开发 JavaScript 前端开发
pyppeteer最为核心类Page的接口方法
重要:因为同步公号的文章格式很难保证,所以后面文章选择性在其他平台同步,欢迎移步公众号(Python之战),每日更新原汁原味! 重要:因为同步公号的文章格式很难保证,所以后面文章选择性在其他平台同步,欢迎移步公众号(Python之战),每日更新原汁原味! Page类是pyppeteer的核心,...
1991 0
下一篇
无影云桌面