提问人:Jeff Gordon 提问时间:11/3/2023 最后编辑:Jeff Gordon 更新时间:11/7/2023 访问量:62
你的目标是用什么元素来点击一个带有 selenium webdriver 的复选框?
What element do you target to click a checkbox with selenium webdriver?
问:
我正在尝试使用 selenium webdriver 单击网站上的复选框。复选框的 HTML 如下所示:
<input type="checkbox" name="registrationForm:certIndCB" id="registrationForm:certIndCB" value="true" onclick="continueAction();">
我尝试了以下代码:
# first code
driver_wait = WebDriverWait(driver, 10)
cert_info = driver_wait.until(EC.element_to_be_clickable((By.ID, 'registrationForm:certIndCB')))
cert_info.click()
# second code
cert_info = driver.find_element(By.ID,'registrationForm:certIndCB')
cert_info.click()
# third code
cert_info = driver.find_element(By.XPATH, "//input[@id='registrationForm:certIndCB']")
cert_info.click()
但都返回了错误。第一个代码收到超时错误,另外两个代码发送此错误:
---------------------------------------------------------------------------
NoSuchElementException Traceback (most recent call last)
Cell In[6], line 143
139 time.sleep(3)
141 # driver_wait = WebDriverWait(driver, 10)
142 # cert_info = driver_wait.until(EC.element_to_be_clickable((By.ID, 'registrationForm:certIndCB')))
--> 143 cert_info = driver.find_element(By.ID,'registrationForm:certIndCB')
144 cert_info.click()
145 wait
我刷新了页面,确保元素没有弯曲并且保持为 .我的印象是选择更好的元素。有没有人可能知道为什么当我检查元素时它出现时它找不到元素?id
registrationForm:certIndCB
id
.click()
更新
所以,我意识到网站打开了一个新窗口,这是我的元素所在的位置。虽然,我希望这将是问题所在,但它仍然没有读取元素。我使用这段代码循环到正确的页面:
for window_handle in driver.window_handles:
driver.switch_to.window(window_handle)
if "name" in driver.title:
break
但是,这仍然无法找到该元素。在尝试使用右键单击,然后选择并使用该选项,但我的程序说它找不到该元素。inspect element
Copy
Copy Xpath / Copy Full Xpath
我还仔细检查了它,它不在 iFrame 中。
如果有人有见解,我会对为什么它不会检测到该元素感到困惑。是否有办法阻止网站选择元素?该站点由 user/pswd 访问,因此我无法使用跳过该步骤的 URL 绕过该元素(此步骤还会验证某些信息,因此我希望执行此步骤)。selenium
答:
请参阅以下代码以在 python selenium 中使用单击 Web 元素:JavaScript
time.sleep(5)
radioButton = driver.find_element(By.ID,'registrationForm:certIndCB')
driver.execute_script("arguments[0].click();", radioButton )
评论
TypeError: Object of type Javascript is not JSON serializable
--> 144 Javascript(driver.execute_script("arguments[0].click();", radioButton ))
Javascript()
from IPython.display import Javascript
当您使用
(By.ID,'registrationForm:certIndCB')
Selenium 将其转换为 CSS 选择器
#registrationForm:certIndCB
CSS 选择器不喜欢 ID 中的 “:”s。我以前遇到过这个问题。我发现将其转换为CSS选择器的不同语法对我有用。
[id="registrationForm:certIndCB"]
下面是您的原始代码,使用新的 CSS 选择器进行了适当的等待更新。
driver_wait = WebDriverWait(driver, 10)
cert_info = driver_wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '[id="registrationForm:certIndCB"]')))
cert_info.click()
上一个:如何点击进行循环迭代
下一个:设置单击机器人框架的持续时间
评论
IFRAME
JS