from playwright.sync_api import sync_playwrightwith sync_playwright() as p: browser = p.chromium.launch(headless=False, slow_mo=1000) page = browser.new_page() page.goto("https://www.baidu.com") print(page.title()) page.fill('#kw', "theshy") page.wait_for_timeout(5000) browser.close()
我们也可以模拟注册操作,部分网站注册时需要提供用户名,邮箱,生日并输入密码等信息,我们也可以使用playwright来模拟这部分操作,代码如下:# Text 文本框输入page.get_by_role("textbox").fill("theshy")# 根据label 定位 Date 日期输入page.get_by_label("Birth date").fill("1999-12-31")# 邮箱输入page.get_by_label("mail").fill("123456789@qq.com")# 密码输入page.get_by_label("password").fill("play123456789")# 确认密码page.get_by_label("confirm_password").fill("play123456789")
当输入框有label标签时,我们可以直接根据label标签定位,非常便捷,示例代码如下:# 直接根据label定位 page.get_by_label("用 户 名:").fill("theshy") page.get_by_label("密 码:").fill("play123456789")
type() 输入文本与fill()不同,type()输入文本是以一个字符一个字符输入的,模拟我们在键盘上键入的每一个字符,示例如下:page.locator('#area').type('Hello World!')
注:type() 方法将发出所有必要的键盘事件,所有keydown, keyup,keypress事件就位,甚至可以指定delay按键之间的可选操作来模拟真实的用户行为。大多数时候,page.fill()会正常工作。如果页面上有特殊的键盘处理,您只需要键入字符。click() 鼠标点击我们在网页上进行操作的时候,免不了要执行点击操作,click()方法就能帮助我们实现简单的点击操作。使用方法如下:# Generic clickpage.get_by_role("button").click()# Double clickpage.get_by_text("Item").dblclick()# Right clickpage.get_by_text("Item").click(button="right")# Shift + clickpage.get_by_text("Item").click(modifiers=["Shift"])# Hover over elementpage.get_by_text("Item").hover()# Click the top left cornerpage.get_by_text("Item").click(position={ "x": 0, "y": 0})
使用示例,当我们输入了用户名密码之后,通常情况下,我们点击登录按钮即可完成登录操作。 page.get_by_label("用 户 名:").fill("theshy") page.get_by_label("密 码:").fill("play123456789") page.locator("text=登录").click() # page.click("text=登录")
文件上传一般情况下,可以使用locator.set_input_files()方法选择要上传的输入文件。它期望第一个参数指向类型为 的输入元素"file"。数组中可以传递多个文件。如果某些文件路径是相对的,则它们将相对于当前工作目录进行解析。空数组清除所选文件。# Select one filepage.get_by_label("Upload file").set_input_files('myfile.pdf')# Select multiple filespage.get_by_label("Upload files").set_input_files(['file1.txt', 'file2.txt'])# Remove all the selected filespage.get_by_label("Upload file").set_input_files([])# Upload buffer from memorypage.get_by_label("Upload file").set_input_files( files=[ {"name": "test.txt", "mimeType": "text/plain", "buffer": b"this is a test"} ],)
如果当前没有输入元素(它是动态创建的),可以通过处理page.on(“filechooser”)事件或在您的操作中使用相应的等待方法:with page.expect_file_chooser() as fc_info: page.get_by_label("Upload file").click()file_chooser = fc_info.valuefile_chooser.set_files("myfile.pdf")
select 下拉框使用locator.select_option()选择元素中的一个或多个选项。可以指定选项value,或label选择。可以选择多个选项。# Single selection matching the valuepage.get_by_label('Choose a color').select_option('red')# Single selection matching the labelpage.get_by_label('Choose a color').select_option(label='Green')# Multiple selected itemspage.get_by_label('Choose multiple colors').select_option(['red', 'green', 'blue'])
复选框和单选使用locator.set_checked()是选中和取消选中复选框或单选按钮的最简单方法。input[type=checkbox]此方法可与,input[type=radio]和元素一起使用[role=checkbox]。# Check the checkboxpage.get_by_label('I agree to the terms above').check()# Assert the checked stateassert page.get_by_label('Subscribe to newsletter').is_checked() is True# Select the radio buttonpage.get_by_label('XL').check()
drag_to 拖动这个操作和selenium的拖拽非常像,实现的功能也是一样的,这个方法将:将鼠标悬停在要拖动的元素上按鼠标左键将鼠标移动到将接收放置的元素松开鼠标左键page.locator("#item-to-be-dragged").drag_to(page.locator("#item-to-drop-at"))
如果页面依赖于dragover正在调度的事件,则您至少需要移动两次鼠标才能在所有浏览器中触发它。要可靠地发出第二次鼠标移动,请重复mouse.move()或locator.hover()两次。操作顺序是:悬停拖动元素,鼠标向下,悬停放置元素,第二次悬停放置元素,鼠标向上。代码如下:page.locator("#item-to-be-dragged").hover()page.mouse.down()page.locator("#item-to-drop-at").hover()page.mouse.up()
总结本文主要介绍了playwright对于元素的操作,包括输入内容,鼠标点击,上传文件,拖拽元素等操作,相对于selenium来说,playwright在很多方面更加简单快捷,相对于selenium,有明显的优势。(图片来源网络,侵删)
0 评论