使用 xpath 的复选框无法访问

Checkbox using xpath not accessible

我正在尝试访问网站 (grants.gov) 上标题为“合作协议 (968)”的复选框。 URL 是 this.

HTML 页面上似乎有两个 HTML 元素。第二个 HTML 包含在 #document.

我不知道 #document 是什么意思,但我认为这是问题所在,因为,我可以得到 #document 之外的任何东西,但里面什么也没有。

这是我当前的代码:

driver.maximize_window()
driver.implicitly_wait(20)
driver.get('https://www.grants.gov/web/grants/search-grants.html')

time.sleep(3)
print('go')
cooperative_agreement = driver.find_element_by_xpath(
'/html/body/table[1]/tbody/tr/td[1]/div/div[1]/div/div/table/tbody/tr[2]/td/input')

print(cooperative_agreement.text)

我正在 chrome 上使用开发工具来获取所有内容的 XPath。如果您转到 URL 并转到 chrome 上的开发工具并尝试获取标题为“合作协议 (968)”的复选框的 XPath,您将看到我遇到的问题。

这是我在 Whosebug 上的第一个问题。如果您需要更多信息,请告诉我!谢谢大家的帮助!

你没看错,元素在 iframe 中,你需要先切换它。

诱导WebDriverWait()等待frame_to_be_available_and_switch_to_it() 诱导WebDriverWait()等待element_to_be_clickable()

WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR, "iframe#embeddedIframe")))  

WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//td[.//label[contains(., 'Cooperative Agreement')]]/input[1]"))).click()

#Jump out from iframe
driver.switch_to.default_content()

您需要导入以下库。

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