Python 如何在Selenium中检测button.click()失败?
我有一个Selenium3Python脚本,用于为讨厌的调用归档。今天,一个恶棍用数字“0”(字面上的0)通过了。FTC网站拒绝了该号码,但我的脚本未能检测到故障 下面是我的Python脚本中驱动投诉过程的相关部分。拒绝该号码的FTC页面的。根据Python 如何在Selenium中检测button.click()失败?,python,selenium,selenium-chromedriver,webdriverwait,error-checking,Python,Selenium,Selenium Chromedriver,Webdriverwait,Error Checking,我有一个Selenium3Python脚本,用于为讨厌的调用归档。今天,一个恶棍用数字“0”(字面上的0)通过了。FTC网站拒绝了该号码,但我的脚本未能检测到故障 下面是我的Python脚本中驱动投诉过程的相关部分。拒绝该号码的FTC页面的。根据按钮没有返回值\u continue。单击()(如果我正确解析了文档,请参阅标题“用户输入-填写表单”) 我也买了这本书,但我在网上搜索时发现的Selenium点击结果是书中的两页。(这非常令人失望;尽管书名不同,但不推荐用于此类任务) 我的问题是,如何
按钮没有返回值\u continue。单击()
(如果我正确解析了文档,请参阅标题“用户输入-填写表单”)
我也买了这本书,但我在网上搜索时发现的Selenium点击结果是书中的两页。(这非常令人失望;尽管书名不同,但不推荐用于此类任务)
我的问题是,如何使用Selenium 3检测故障
下面是导致问题的FTC页面的特定Javascript。它来自:
click()
from selenium.common.exceptions import WebDriverException
button_continue = driver.find_element_by_id("StepTwoSubmitButton")
try:
button_continue.click()
except WebDriverException as e:
print('oops. click failed')
print(e)
click()
from selenium.common.exceptions import WebDriverException
button_continue = driver.find_element_by_id("StepTwoSubmitButton")
try:
button_continue.click()
except WebDriverException as e:
print('oops. click failed')
print(e)
该元素是一个已启用的元素,因此在其上调用click()
,理想情况下,您需要引导WebDriverWait使元素成为可单击的()
,并将其包装在try catch{}
中,您可以使用以下任一选项:
- 使用
CSS\u选择器
:
try:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[name='StepTwoSubmitButton']"))).click()
except TimeoutException as e:
print("Element click failed")
- 使用
XPATH
:
try:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@name='StepTwoSubmitButton')]"))).click()
except TimeoutException as e:
print("Element click failed")
- 注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
该元素是一个已启用的元素,因此对其调用click()
,理想情况下,您需要将元素的WebDriverWait引导为可单击()
,并将其包装在try catch{}
中,您可以使用以下任一选项:
- 使用
CSS\u选择器
:
try:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[name='StepTwoSubmitButton']"))).click()
except TimeoutException as e:
print("Element click failed")
- 使用
XPATH
:
try:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@name='StepTwoSubmitButton')]"))).click()
except TimeoutException as e:
print("Element click failed")
- 注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
谢谢。我绝对没有看到一个意外的例外。原谅我的无知。。。Python是否只在有处理程序的情况下抛出?如果您需要运行,我的脚本位于。谢谢。我绝对没有看到一个意外的例外。原谅我的无知。。。Python是否只在有处理程序的情况下抛出?如果您需要运行,我的脚本位于。您使用的selenium版本已经非常过时。。我很惊讶它能与chromium的那个版本一起工作。你应该用pip安装PyPI的最新版本。谢谢Corey。是的,老化的软件听起来差不多。我不想让皮普进入系统。它在我必须运行的生产web服务器上给我带来了太多的问题。最终,我在他们的GitHub上找到了bug报告,问题被解决了,因为它不会修复,并且评论说用户必须修复它们。我看不起这个坏掉的工具。pip已经和python的更新版本捆绑在一起了,所以你可能需要安装它。。您也可以在不使用pip的情况下安装最新的selenium。您使用的selenium版本已经非常过时。。我很惊讶它能与chromium的那个版本一起工作。你应该用pip安装PyPI的最新版本。谢谢Corey。是的,老化的软件听起来差不多。我不想让皮普进入系统。它在我必须运行的生产web服务器上给我带来了太多的问题。最终,我在他们的GitHub上找到了bug报告,问题被解决了,因为它不会修复,并且评论说用户必须修复它们。我看不起这个坏掉的工具。pip已经和python的更新版本捆绑在一起了,所以你可能需要安装它。。您还可以在不使用pip的情况下安装最新的selenium。