无法使用Selenium和Python找到并单击复选框

f4t66c6m  于 2023-02-11  发布在  Python
关注(0)|答案(2)|浏览(133)

我已经看了一些类似问题的不同答案,但似乎无法找出我的具体情况出了什么问题。我已经检查了我的大部分脚本,以达到我想要的,但授权复选框似乎就是找不到。
在Python中非常简单:

### Authorize
driver.find_element('name', "d_1559640796736").click()

出现错误:

NoSuchElementException: no such element: Unable to locate element: {"method":"css selector","selector":"[name="d_1559640796736"]"}
  (Session info: chrome=109.0.5414.120)

我尝试了所有其他方法来查找元素(id、css、xpath),但有可能我的xpath是错误的。我有一种感觉,这与它是一个字段集的事实有关。我承认我的Python比我的html好得多。
HTML的快照:

fhg3lkii

fhg3lkii1#

  • classname* 属性值如 d_1559640796736h_1559640796736o1 是动态生成的,迟早会发生变化。它们可能会在您下次重新访问应用程序或下次启动应用程序时发生变化。因此不能在定位器中使用。

溶液
所需的元素是动态元素,因此要单击,需要为element_to_be_clickable()引入WebDriverWait,并且可以使用以下locator strategies之一:

  • 使用 *CSS选择器 *:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[value='Acknowledge'][name^='d_'][id^='d_'][id$='o1']"))).click()
  • 使用 XPATH
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@value='Acknowledge' and starts-with(@name, 'd_')][starts-with(@id, 'h_') and contains(@id, 'o1')][starts-with(@id, 'h_') and contains(@id, 'o1')]"))).click()

*注意:您必须添加以下导入:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
dwbf0jvd

dwbf0jvd2#

在xpath下面尝试,而不是按名称查找

//input[@type='checkbox'][1]

如果存在多个复选框,则可以按索引选择一个。

相关问题