2 回答
TA贡献1877条经验 获得超6个赞
内联框架存在于您的页面上。在与输入框交互之前,您需要打开iframee。请参阅以下代码以解决您的问题。
wait = WebDriverWait(driver, 10)
driver.get("https://www.msha.gov/mine-data-retrieval-system")
driver.switch_to.frame("iframe1")
wait = WebDriverWait(driver, 10)
inputBox = wait.until(EC.element_to_be_clickable((By.XPATH, "//div[@class='mstrmojo-SimpleObjectInputBox-empty']"))).click()
inputBox1 = wait.until(EC.element_to_be_clickable((By.XPATH, "//div[@class='mstrmojo-SimpleObjectInputBox-container mstrmojo-scrollNode']//input")))
inputBox1.send_keys("0100003")
更新了要处理的下拉列表的代码
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div#mstr100,mstrmojo-Popup.mstrmojo.SearchBoxSelector-suggest"))).click()
注意:请将以下导入添加到您的解决方案中
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
TA贡献1850条经验 获得超11个赞
您尝试查找的元素位于 iframe 内,因此您需要先切换到该 iframe,然后再执行查找元素。此外,最佳做法是在查找元素超时并引发错误之前,使用等待为页面/元素提供加载时间。
iframe = WebDriverWait(driver, 15).until(EC.presence_of_element_located((By.CSS_SELECTOR, '#iframe1')))
driver.switch_to.frame(iframe)
mine_id = WebDriverWait(driver, 15).until(EC.presence_of_element_located((By.XPATH, '//*[@id="mstr90"]/div[1]/div/div')))
然后,您需要单击此元素以使其可交互。
mine_id.click()
单击后,您需要在发送密钥之前重新找到输入框。
mine_id_input = WebDriverWait(driver, 15).until(EC.presence_of_element_located((By.CSS_SELECTOR, '#mstr90 input')))
mine_id_input.send_keys('0100003')
要选择显示的建议:”
suggestion = WebDriverWait(driver, 15).until(EC.presence_of_element_located((By.CSS_SELECTOR, '#mstr100')))
suggestion.click()
如果您想在完成此操作后继续在 iframe 外部进行交互,则需要像这样切换回 iframe:
driver.switch_to.default_content()
添加回答
举报