playwright官网验证失败,点击框体重试怎么解决?

前言网页上的alert 弹出框你不知道什么时候弹出来,selenium 处理alert弹出框的方式是先判断有没alert 再处理,并且只能处理这一次。playwright 框架可以监听dialog事件,不管你alert 什么时候弹出来,监听到事件就自动处理了。dialog 事件监听当出现 JavaScript 对话框时发出,例如alert、prompt或。侦听器必须dialog.accept()或dialog.dismiss()对话框 - 否则页面将冻结等待对话框,并且单击等操作将永远不会完成。page.on("dialog", lambda dialog: dialog.accept())
注意:当没有page.on(“dialog”)侦听器存在时,所有对话框都会自动关闭。用法page.on("dialog", handler)
使用示例from playwright.sync_api import sync_playwright
# 上海悠悠 wx:283340479
# blog:https://www.cnblogs.com/yoyoketang/
def run(playwright):
chromium = playwright.chromium
browser = chromium.launch(headless=False, slow_mo=3000)
page = browser.new_page()
# 没监听时,它自动会关闭
page.evaluate("alert('hello world')")
browser.close()
with sync_playwright() as playwright:
run(playwright)
当监听器存在时,它必须dialog.accept()或dialog.dismiss()对话框 - 否则页面将冻结等待对话框,并且单击等操作将永远不会完成。from playwright.sync_api import sync_playwright
# 上海悠悠 wx:283340479
# blog:https://www.cnblogs.com/yoyoketang/
def handle_dialog(dialog):
"""监听后处理"""
print(dialog.message)
dialog.dismiss()
def run(playwright):
chromium = playwright.chromium
browser = chromium.launch(headless=False, slow_mo=3000)
page = browser.new_page()
page.on("dialog", handle_dialog)
page.evaluate("alert('hello world')")
browser.close()
with sync_playwright() as playwright:
run(playwright)
通过page.on("dialog", handler) 监听到dialog 事件,可以获取到dialog.message内容dialog 属性和方法accept()当对话框被接受时返回。dialog.accept()
dialog.accept(**kwargs)
参数 prompt_text(可选), 要在提示中输入的文本。如果对话框 type 没有提示,则不会产生任何影响.default_value, 如果对话框是提示的,则返回默认提示值。否则,返回空字符串。dialog.default_value
dismiss 关闭对话框dialog.dismiss()
message 获取对话框中显示的消息dialog.message
type返回对话框的类型,可以是alert, beforeunload, confirm或 prompt其中一个。dialog.type
}
前言select 选择框是页面上常见的场景select 用法
用法# 上海悠悠 wx:283340479 # blog:https://www.cnblogs.com/yoyoketang/ # single selection matching the value or label element.select_option("blue") # single selection matching the label element.select_option(label="blue") # multiple selection for blue, red and second option element.select_option(value=["red", "green", "blue"]) 使用示例下拉框选择从option 中选一个示例代码方法一,先定位select元素,再定位选项1.根据选项名称定位select = page.get_by_label("所属项目:") select.select_option("test") 2.根据index 索引定位select = page.get_by_label("所属项目:") select.select_option(index=1) 3.根据label 标签定位如下select option 有label 属性的情况下可以使用label 标签定位select = page.get_by_label("选择:") select.select_option(label="第四") 方法二,通过page对象直接调用page.select_option("select#project", "test") 类似于page.fill和page.click的用法}
01、Selenium 操作被屏蔽使用selenium自动化网页时,有一定的概率会被目标网站识别,一旦被检测到,目标网站会拦截该客户端做出的网页操作。比如淘宝和大众点评的登录页,当手工打开浏览器,输入用户名和密码时,是能正常进入首页的,但是如果是通过selenium打开, 会直接提示验证失败,点击框体重试。本文介绍一种办法,不需要修改浏览器属性,不需要注入JavaScript脚本,也能轻松绕过网站检测。02、Selenium为何会被检测每一个浏览器访问网站时,都会带上特定的指纹特征,网站会解析这些特征,从而判断这次访问是不是自动化程序。一个最广为人知的特征是window.navigator.webdriver,该特征直接标明此浏览器是webdriver程序。当一个浏览器通过selenium启动后,在开发者工具中输入这个属性,会发现被标为 true, 而手工打开的浏览器是 false。实际上,浏览器被检测为webdriver程序的特征并不止这一个,这意味着,就算你通过修改属性,也不一定能绕过网站的检测。我们可以通过 sannysoft 来检测浏览器指纹,如果浏览器是通过selenium等自动化程序打开的,访问这个网址后会有很多特征暴露这些指纹,这些特征的值和手工打开后的值是不一样的,因此可以很轻易被别人检测出来。有人也试图不用selenium,换成puppeter和playwright这样的自动化工具,但是结局都是一样的。03、Selenium避免被检测方法浏览器在启动时就会带上指纹特征,如果使用自动化程序启动时已经被标记,那为什么不直接用手工启动,然后用Selenium连接已经启动的浏览器呢?那手工打开浏览器要做什么操作才能让Selenium连接呢?Selenium又是怎样连接手工打开的浏览器呢?我在 Selenium连接已存在的浏览器1 这篇文章详细记录了需要的步骤,概括起来:1、打开浏览器时添加以下参数:--remote-debugging-port=9222 --user-data-dir="C:\selenium\ChromeProfile"
2、selenium中设置浏览器选项,通过上面设置的 9222端口连接浏览器:from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
driver = webdriver.Chrome(options=chrome_options)
通过 subprocess 运行浏览器当然,做自动化程序一般不会手工点击图标来打开浏览器,我们可以用命令行启动浏览器,然后再用 selenium 连接。import subprocess
cmd = '"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" ' \
'--remote-debugging-port=9222 ' \
'--user-data-dir="C:\selenium\ChromeProfile"'
subprocess.run(cmd)
最后:下方这份完整的【自动化测试】学习教程已经整理上传完成,朋友们如果需要可以自行免费领取 【保证100%免费】}

我要回帖

更多关于 重试 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信