pyppeteer最为核心类Page的接口方法(下)
重要:因为同步公号的文章格式很难保证,所以后面文章选择性在其他平台同步,欢迎移步公众号(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')