playwright同步模块sync_api创建页面
在上下文中创建一个页面(标签页)
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"