2 回答

TA貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超6個贊
內(nèi)聯(lián)框架存在于您的頁面上。在與輸入框交互之前,您需要打開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()
注意:請將以下導(dǎo)入添加到您的解決方案中
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait

TA貢獻(xiàn)1850條經(jīng)驗(yàn) 獲得超11個贊
您嘗試查找的元素位于 iframe 內(nèi),因此您需要先切換到該 iframe,然后再執(zhí)行查找元素。此外,最佳做法是在查找元素超時并引發(fā)錯誤之前,使用等待為頁面/元素提供加載時間。
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()
單擊后,您需要在發(fā)送密鑰之前重新找到輸入框。
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()
如果您想在完成此操作后繼續(xù)在 iframe 外部進(jìn)行交互,則需要像這樣切換回 iframe:
driver.switch_to.default_content()
添加回答
舉報