【发布时间】:2021-01-30 18:48:57
【问题描述】:
我正在尝试使用 selenium 单击复选框,如图的 HTML 所示。想法是,所有四个选项的复选框输入标记都是相同的,它们仅通过 id="country_england" ... 来区分。我不确定如何编写代码来选择英格兰框并单击它。任何帮助表示赞赏。
HTML 代码:
【问题讨论】:
标签: python selenium selenium-webdriver xpath webdriverwait
我正在尝试使用 selenium 单击复选框,如图的 HTML 所示。想法是,所有四个选项的复选框输入标记都是相同的,它们仅通过 id="country_england" ... 来区分。我不确定如何编写代码来选择英格兰框并单击它。任何帮助表示赞赏。
HTML 代码:
【问题讨论】:
标签: python selenium selenium-webdriver xpath webdriverwait
使用 xpath:
//b[@id="country_england"]/../input
您也可以使用:
//b[@id="country_england"]/preceding-sibling::input
代码是:
webD.get("https://icem.data-archive.ac.uk/#step1")
WebDriverWait(webD, 20).until(EC.element_to_be_clickable(
(By.XPATH, '//*[@value="1861"]'))).click()
WebDriverWait(webD, 20).until(EC.element_to_be_clickable(
(By.XPATH, '//b[@id = "country_england"]/preceding-sibling::input'))).click()
【讨论】:
webD.find_element_by_xpath('//p[@id="country_england"]/preceding-sibling::input').click()
所需的元素是Angular 元素。所以点击你需要为element_to_be_clickable()诱导WebDriverWait的元素,你可以使用以下Locator Strategies之一:
使用XPATH 和前面的:
driver.get("https://icem.data-archive.ac.uk/#step1")
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@value='1851']"))).click()
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//b[@class='ng-binding' and @id='country_england']//preceding::input[1]"))).click()
使用XPATH 和preceding-sibling:
driver.get("https://icem.data-archive.ac.uk/#step1")
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@value='1851']"))).click()
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//b[@class='ng-binding' and @id='country_england']//preceding-sibling::input[1]"))).click()
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
浏览器快照:
【讨论】: