注册 登录

清河洛

playwright同步模块sync_api创建页面

qingheluo2021-01-04清河洛776
在上下文中创建一个页面(标签页)page=context.new_page()page的属性keyboard:页面键盘对象 mouse:页面鼠标对象 context:获取页面所属的浏览器上下文 frames:获取页面中所有框架列表 main_frame:获取页面主框架 url:页面的url video:与此页面关联的视频对象 requests:请求api page的方法通用方法bring_to_front():将页面置于最前面(激活选项卡)goto(url,,timeout,wait_until,referer)**:访问指定网址set_default_navigation_timeou...

在上下文中创建一个页面(标签页)

page=context.new_page()

page的属性

keyboard:页面键盘对象
mouse:页面鼠标对象
context:获取页面所属的浏览器上下文
frames:获取页面中所有框架列表
main_frame:获取页面主框架
url:页面的url
video:与此页面关联的视频对象
requests:请求api

page的方法

通用方法

bring_to_front():将页面置于最前面(激活选项卡)

goto(url,,timeout,wait_until,referer)**:访问指定网址

set_default_navigation_timeout(timeout):设定默认的页面加载超时时间

set_default_timeout(timeout):设定默认的超时时间

wait_for_timeout(int):脚本暂停int毫秒

reload(**,timeout,wait_until):重新加载页面

title():返回页面title

content():获取页面的完整HTML内容,包括doctype

opener():返回父页面,如果已关闭或不存在返回null

set_extra_http_headers(dict):页面发起的每个请求都会发送额外的HTTP标头

close(run_before_unload):关闭页面,run_before_unload表示是否运行卸载前页面处理程序,默认False

is_closed():检测页面是否已关闭

set_viewport_size(dict):设置页面的视图大小,int类型的width和height字段,单位为像素

viewport_size():获取页面窗口的大小

frame(**,name,url):查找并返回页面中指定的框架

name为框架的name属性值
url可以使用glob模式字符串或正则对象

事件相关方法

on(event,func):设置页面监听,每当指定事件发生时会自动运行func函数且将触发的事件对象作为参数传递给func

支持的事件
"close"、"console"(js调用控制台api时)、"crash"(页面崩溃时)、"dialog"(当出现对话框时,默认关闭所有对话框)、
"domcontentloaded"、"download"(下载开始时)、"filechooser"(文件选择器出现时)、
"frameattached"(加入框架时)、"framedetached"(卸载框架时)、"framenavigated"(将框架导航至新url时)、
"load"(页面加载完成)、"pageerror"(页面发生未捕获的异常时)、"popup"(打开新选项卡或窗口时)、
"request"(页面发出请求时)、"requestfailed"(请求失败时)、"requestfinished"(下载响应正文后请求成功完成时)、
"response"(收到请求的响应状态和标头时)、"websocket"(发送WebSocket请求时)、"worker"(生成专用WebWorker时)

wait_for_event(event,**,predicate,timeout)

等待事件event触发,将其值传递给predicate函数并运行该函数
同时会传给page.on(event)

expect_event(event,** , predicate,timeout)

等待event触发,将其值传递给predicate函数并运行该函数
该方法返回一个上下文管理器

运行js脚本

add_init_script(**,path,script):在创建文档之后,且运行其任何脚本之前运行指定javascript脚本

绕过Webdriver检测:一般情况下都是使用Webdriver来检测是否是测试工具,我们可以通过该方法来绕过Webdriver检测

page.add_init_script("Object.defineProperties(navigator,{webdriver:{get:()=>false}})")

add_script_tag(**,content,path,style,url):将content指定的js代码和path指定的js文件注入到url指定的框架中,style为"module"表示是ES6

evaluate(**,expression,arg):运行expression字符串解析的js代码

wait_for_function(expression,**,arg,polling,timeout):持续的运行expression表达式

polling:float,运行表达式的时间间隔(毫秒)

等待页面状态

wait_for_url(url,**,wait_until):等待主框架导航到指定的url

expect_navigation(**,timeout,wait_until):等待主框架加载完至指定状态

wait_until:指定加载完成的标志
    'domcontentloaded':触发DOMContentLoaded事件时
    'load':触发load事件时,默认为load
    'networkidle':至少500毫秒没有网络连接时
    'commit':当收到网络响应并开始加载文档时

wait_for_load_state(**,state='load',timeout=30000.0):等待直到页面加载状态达到指定状态

state可选的值和expect_navigation()中的wait_until相同

历史记录

go_back(**,timeout,wait_until):在历史记录中后退一步

go_forward(timeout,wait_until):在历史记录中前进一步

暂停与继续

pause():暂停脚本的执行,暂停后页面会有一个覆盖的“恢复”按钮

resume():继续执行脚本,用于继续指定暂停的脚本

执行回调

expose_binding(name, callback, **,handle:bool):当页面中执行了name函数时执行回调函数

name:绑定的页面执行的函数名称
callback:绑定要执行的回调函数,该函数接受一个包含当前页面所有信息的对象
handle :是否将参数作为句柄传递,而不是按值传递。传递句柄时,仅支持一个参数。按值传递时,支持多个参数

expose_function(name:str,callback:func):功能同上,不同的是该方法不会自动传递参数

expect_download(**,predicate,timeout):执行函数并等待新的下载

predicate为一个函数,返回bool值,将下载值传递到函数中,并等待返回True
如果在触发下载事件之前关闭页面,将引发错误

另存为pdf

pdf(**kwargs):将页面保存为pdf文件

display_header_footer:bool(False),是否显示页眉和页脚
header_template:str,页眉的格式
footer_template:str,页脚的格式
    具有特殊意义的单词
    'date'格式化打印日期
    'title'文档标题
    'url'文档位置
    'pageNumber'当前页码
    'totalPages'文档中的总页数
height、width:str|float,纸张高度和宽度
    可以接受含单位的字符串,接受的单位px(像素)、in(英寸)、cm(厘米)、mm(毫米)
    float单位为像素,如100和"100px"表示我意义相同
landscape:bool(False),是否宽版显示(纸张方向)
margin:dict,内边距,可用top、right、bottom和left四个字段,值为float或str
page_ranges:str,打印范围,如"2-4,7,9-11",默认空字符串,表示打印所有页面
path:str,pdf的保存路径
scale:float,页面的显示大小,接受0.1-2的浮点数

注入css样式

add_style_tag(**,content,path,url):注入指定的css样式

查找元素并获得一个定位对象(locator)

wait_for_selector(selector,**kwargs):等待定位的元素满足条件时返回该元素定位

get_by_text(text,exact=False):根据文本内容查找定位

text可以为字符串
text也可以为一个正则对象:使用re.compile(strPattern, flags)编译
exact为bool,表示是否区分大小写且全字符串匹配

get_by_title(text,exact=False):根据title属性值查找定位

get_by_alt_text(text,exact=False):根据alt属性值查找定位

get_by_label(text,exact=False):根据label标签的文本查找定位

get_by_placeholder(text,exact=False):根据placeholder属性值查找定位

locator(selector,**,has_text):返回一个查找的定位,has_text表示附加一个文本要包含指定字符串的条件

selector:str,用于查找元素的表达式,如果找到多个元素将使用第一个
"text=secrch_text":通过文本选择元素,这是Playwright自定义的一种表达式
"id=secrch_id":直接通过id选择
"//button[@id='search'])":通过XPath查找,所有所有//或..开头的表达式都会默认为XPath表达式
也可以直接使用css选择器字符串通过css语法进行选择
    "#search":通过id选择
    ".myclass li":表示myclass类下的li元素
    添加前缀css=来显式指定,如"css=.login"就相当于".login"
除了支持css伪类以外,Playwright还自定义了几个自有的伪类
    :has():表示查找包含某个元素的元素,如"p:has(#myid)"表示包含了myid元素的p元素
    :is():通过自身文本来查找元素,如"button:is(:text('signin'), :text('login'))"
        表示查找文本中包含signin或者login的button元素
    :text(str):包含指定文本,如"button:text('signin')"
    :text-is(str):严格匹配文本
    :text-matches(str):通过正则匹配文本
    还可以根据方位匹配
        :right-of(selector)"):右边
        :left-of(selector)"):左边
        :above(selector)"):上边
        :below(selector)"):下边
        :near(selector)"):50px之内的元素
此外,还支持使用">>"组合表达式,可以混合使用所有形式的表达式
    "css=nav >> text=Login"表示文本为Login的nav元素

frame_locator(selector):当页面中有iframe时,获取框架定位

多种查找方法可以链式调用,后面的方法会在前面方法返回的定位的子元素中查找

page.get_by_alt_text("alt-content").get_by_text("demo")
查找alt值为"alt-content"且子元素中包含文本"demo"的定位

定位的方法

当获取了一个定位时,可以使用定位的方法

筛选方法

返回的仍然是一个定位对象

filter(**,has=locator,has_text)

has为一个定位器,表示该定位器要包含指定的定位器
has_text为一个字符串或正则对象,表示包含指定的文本

to_have_count(int):表示该定位器符合的元素个数必须为int个

to_have_text([] str):定位器中必须包含传入的列表中的所有元素字符串

first和last属性:获取定位元素中的第一个/最后一个元素的定位

nth(int):获取定位元素中的第int个元素定位

操作方法

count():返回与给定选择器匹配的元素数

all():将定位对象转换为列表,每个元素为一个符合要求的定位

all_inner_texts():返回定位中所有符合条件的元素的node.innerText值组成的数组

all_text_contents():返回定位中所有符合条件的元素的node.textContent值组成的数组

bounding_box():获取符合条件的元素的盒子四个角的坐标

返回dict,包含x,y,width,height四个属性,值为float值
元素不可见返回null

check(**kwargs):将单选或复选框设置为选中状态

force:bool(False),是否绕过可操作性检查
no_wait_after:bool(False),是否不等待页面加载
position:dict(包含x和y两个float值的属性),点击位置

uncheck(**kwargs):将单选或复选框设置为未选中状态

set_checked(checked, **kwargs):选择单选或复选进行操作

checked:bool,该元素是选中状态还是未选中状态
可选参数:force、position、no_wait_after、timeout

clear(**kwargs):清除input或textarea元素的值,可选参数force和no_wait_after

click(**kwargs):用鼠标点击

button:str,指定按键,可选值"left"、"right"、"middle"
click_count:int(1),点击次数
delay:int(0),鼠标按下松开的间隔时间(毫秒)
modifiers:list(None),在操作过程中保持按下的按键,list中支持'Alt', 'Control', 'Meta', 'Shift'
force、no_wait_after、timeout、position

tap(**,args):左键点击定位的元素,可选参数force、modifiers、no_wait_after、position、timeout

dblclick(**kwargs):用鼠标双击,参数参考click()

dispatch_event(event):触发指定的事件

drag_to(target,**,args):将定位移动到target定位的位置

source_position :dict,启示元素的点击位置{x:float;y:float}
target_position :dict,终止元素的点击位置{x:float;y:float}

element_handle():解析定位并获得DOM元素句柄,当定位器有多个符合条件的匹配时返回第一个

element_handles():解析定位中所有匹配并返回由DOM元素句柄组成的数组

evaluate(**,expression,arg):运行expression字符串解析的js代码

如果解析为函数,则将定位转换为DOM元素(只转化第一个匹配元素)并作为第一个参数传递给函数
let div = page.locator("div")
div.evaluate("node=>node.innerHTML")

evaluate_all(**,expression,arg):同evaluate,但是会将定位中的所有匹配解析为DOM元素并以数组形式作为第一个参数传给函数

fill(val):执行一系列操作:查找指定元素,可操作性检查,对元素进行聚焦,填充指定内容

查找到的元素只能为input,textarea或者设置了contenteditable属性的元素,否则报错

focus():移动焦点至定位

get_attribute(name):获取元素的name属性值

highlight():在浏览器中高亮显示定位的元素

hover(**kwargs):移动鼠标到定位的元素上

modifiers:操作过程中按下的按键
position:dict(包含x和y两个float值的属性),点击位置

inner_html():获取定位元素的inner.HTML值

inner_text():获取定位元素的inner.Text值

input_value():获取input和textarea元素的value值

is_checked():单选框或复选框是否是选中状态

is_disabled():定位中的元素是否禁用

is_enabled():定位中的元素是否启用

is_editable():定位中的元素是否可编辑

is_hidden():是否隐藏

is_visible():是否可见

screenshot(,args):屏幕截图**

animations:截图时的CSS动画处理方式,可选值和"disabled","allow"
    当设置为"allow"时:有限动画会快进到完成,无限动画被取消到初始状态,在屏幕截图之后Q播放
clip:dict,指定截取的区域,可用的字段
    x,y:float,截取的开始坐标
    width,height:float,截取区域的宽度和高度
full_page:bool(False),是否截取包含滚动的全部页面内容,默认只截取可见区域
mask:一个定位或定位组成的列表,表示要屏蔽的元素,会使用一个蒙版覆盖元素
omit_background:bool(False),背景是否透明
path:图片保存路径
quality:int,保存图片0-100的质量,仅适用于jpeg格式
type:str("jpeg"),指定图片类型,可选"jpeg"或"png"

scroll_into_view_if_needed():将定位的元素滚动到视图中

select_option(**,args):选择一个或多个select选项

element:元素句柄或由元素句柄组成的数组,表示要选择的选项
index:int或int数组,按索引值选择
value:str或str数组,按value值选择
label:str或str数组,按label选择,会选择label中的所有元素

select_text():聚焦到定位中的元素并选择元素中的所有文本

set_input_files(files):在文件选择框中输入文件信息

files可以为[str,pathlib.Path]数组
也可以为若干个[str,pathlib.Path]组成的数组
也可以为dict,包含元素name、mimeType和buffer,其中buffer为文件的字节内容
也可以为若干个dict组成的列表

text_content():返回定位元素的node.textContent

type(text, ,delay,no_wait_after,timeout)**:聚焦到指定的元素,并为text中的每个字符发送keydown和keypress事件

wait_for(**kwargs):等待定位的元素满足条件时返回该元素

state:str("visible"),可用的值
'attached':等待元素出现在DOM中
'detached':等待元素不存在于DOM中
'visible':等待元素具有非空边界框并且没有隐藏。没有任何内容和边界也被视为隐藏
'hidden':等待元素从DOM分离,或具有空边界框或隐藏

dispatch_event(event,**,timeout):运行指定元素的指定事件(无论该元素是否可见)

press(key, **,delay,no_wait_after,timeout):聚焦到指定的元素,按下指定按键并松开

delay:float(0.0),按下和松开的时间间隔(毫秒)
key:str,可用的值有:F1 - F12, Digit0- Digit9, KeyA- KeyZ, Backquote, Minus, Equal, Backslash, Backspace, Tab, Delete, Escape, ArrowDown, End, Enter, Home, Insert, PageDown, PageUp, ArrowRight, ArrowUp, Shift, Control, Alt, Meta, ShiftLeft
可以使用组合,如"Control+o"或"Control+Shift+T"


网址导航