目录
鼠标事件
悬停
python
page.get_by_text('设置',exact=True).nth(1).hover()
移动
python
page.mouse.move(x=33, y=50)
按键
python
# 点击操作可设置button参数,选择点击键["left", "middle", "right"]
page.mouse.click(x=100, y=200)
page.mouse.dblclick(x=100, y=200)
page.mouse.up()
page.mouse.down()
点击
点击支持选择不同点击键["left", "middle", "right"]
python
page.click('#su') # 单击,默认点击左键
page.locator('xpath=//a[text()="百度首页"]').dispatch_event('click') # 此方法支持键盘等事件,参数为click时同click()
page.locator('xpath=//a[text()="设置"]').click(button='right') # 右击
page.locator('xpath=//a[text()="百度首页"]').click(position={'x': 10, 'y': 20}) # 点击元素的某个点
# 键盘+鼠标点击,键盘键支持的类型(Alt|Control|ControlOrMeta|Meta|Shift)
page.locator('xpath=//a[text()="百度首页"]').click(modifiers=["Shift"]) # 模拟按下Shift同时点击元素
page.locator('#su').dblclick() # 双击
滚轮操作
python
page.mouse.wheel(delta_x=100, delta_y=0) # 水平向右
page.mouse.wheel(delta_x=-100, delta_y=0) # 水平向左
page.mouse.wheel(delta_x=0, delta_y=500) # 垂直向下
page.mouse.wheel(delta_x=0, delta_y=-500) # 垂直向上
for _ in range(100):
page.mouse.wheel(delta_x=0, delta_y=10)
sleep(.1)
拖拽
拖拽的分步式为先鼠标悬停到要拖拽的元素上,然后按下鼠标不放,再将鼠标移动到目标为止松开鼠标。
python
page.locator('xpath=//a[text()="百度首页"]').hover()
page.mouse.down()
page.locator('#kw').hover()
page.mouse.up()
合并写法
python
page.locator('xpath=//a[text()="百度首页"]').drag_to(page.locator('#kw'))
键盘事件
输入文本内容
type和fill支持input、textarea、contenteditable标签元素的内容输入。但输入结果有所不同,type()输入内容不会清除后输入,会在原来内容的基础上追加。fill()会先清空内容后再输入,可以看成clean和type的组合。通过循环输入可看出差异
type输入内容
python
# 清空内容
page.locator('#kw').clear()
for _ in range(5):
page.locator('#kw').type(text='测试')
sleep(.5)
fill输入内容
python
for _ in range(5):
# page.fill('#kw', '自动化')
page.locator('#kw').fill('测试')
按键操作press
支持键盘按键,可执行的按键有Backquote, Minus, Equal, Backslash, Backspace, Tab, Delete, Escape,ArrowDown, End, Enter, Home, Insert, PageDown, PageUp, ArrowRight,ArrowUp, F1 - F12, Digit0 - Digit9, KeyA - KeyZ, etc。同时支持单个字符的输入,如输入特殊符号,如¥,&等。
Control(即Ctrl键)、方向键ArrowLeft(小键盘左边的向左的箭头键,可根据实际需要换成对应的方向键)
python
page.locator('#kw').press("Control+ArrowLeft")
page.locator('#kw').press("Control+ArrowRight")
page.locator('#kw').press("&") # 输入&符号
page.locator('#kw').press("Shift+A") # 控制输入大小写
文件上传
支持上传单个或多个文件上传多个文件时,使用列表传入。
python
file_name = [r'D:\儿童音频诗词歌曲\22 三字经+弟子规+百家姓(全集)跟读\11 《三字经》11.mp3',r'D:\儿童音频诗词歌曲\22 三字经+弟子规+百家姓(全集)跟读\10 《三字经》10.mp3']
page.locator('xpath=//input[@name="file"][@multiple="multiple"]').nth(0).set_input_files(file_name)
下拉选/单选框/复选框
select_option()支持在 < select > 元素中选择一个或多个选项。# 支持value和label的参数选择(参数值可以是单个字符串或多个值的列表),支持通过下标index选择(参数值可以是单个int值或多个int值的列表),根据多选和单选决定。
python
page.locator('xpath=//select[@name="sutext"]').select_option('启用')
对于input中具有checkbox属性的元素可使用check或set_checked选择值。set_checked是选中或取消选择复选框或单选按钮最简单的方法。
python
page.get_by_label('XXX').check() # 选中
page.get_by_label('XXX').uncheck() # 取消选中
page.get_by_label('XXX').is_checked() # 元素是否选择状态,返回布尔值
page.locator('[value="姓名"]').set_checked(checked=True) # set_checked设置选中状态
page.set_checked('[value="姓名"]', checked=True)
滚动条操作
滚动操作有三种方式:通过上面的鼠标滚轮操作、通过scroll_into_view_if_needed方法操作、通过执行JavaScript语句操作。
通过滚轮和JavaScript语句操作可通过先获取页面高度再循环操作。
python
height = page.query_selector('body').evaluate("document.body.scrollHeight") # 获取页面高度
for h in range(0, height, 100): # 每100个像素滚动一次
# page.evaluate_handle(f'window.scrollTo(0,{h});')
page.evaluate(f'window.scrollTo(0,{h});')
page.wait_for_timeout(500)
滚动到指定元素出现
方法1:
python
page.locator('xpath=//input[@name="file"][@multiple="multiple"]').last.scroll_into_view_if_needed() # 滚动到指定元素为止
方法2:
python
expression = '''
const element = document.querySelector("#su");
if (element) {
{
element.scrollIntoView();
}}'''
page.evaluate(expression)