我正在使用 Selenium,我看過 SO 并且看過很多帖子,但我無法以一種有效的方式實作它們。我正在使用以下代碼,但我收到的錯誤訊息是:
Message: The target element is not interactable and could not be clicked
我認為這是因為命令之間沒有“松弛”,所以我插入了一個隱式等待,但是我仍然遇到同樣的錯誤。任何想法將不勝感激。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
driver = webdriver.Safari()
driver.get("https://securities.stanford.edu/filings-case.html?id=107866")
button = driver.find_element_by_link_text('Log In')
button.click()
driver.implicitly_wait(10)
username = driver.find_element_by_id("login_email")
password = driver.find_element_by_id("login_pass")
username.send_keys("EMAIL")
password.send_keys("PASSWORD")
driver.implicitly_wait(10)
driver.find_element_by_link_text('Log In').click()
uj5u.com熱心網友回復:
該頁面上有 7 個帶有 text 的元素Log In,這就是為什么以下命令button = driver.find_element_by_link_text('Log In')將獲取與該文本匹配的第一個元素,而這不是您要查找的元素。因此,您需要使用更好的定位器來匹配正確的元素。
此外,您在driver.implicitly_wait(10)該命令之后定義。
此外,最好使用預期條件的顯式等待,而不是隱式等待。
此外,如果您使用隱式等待,則無需多次定義它。此引數在每個驅動程式會話中設定,并且在大多數情況下無需在會話期間將其重新設定為另一個值。
這應該會更好:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Safari()
wait = WebDriverWait(driver, 20)
driver.get("https://securities.stanford.edu/filings-case.html?id=107866")
wait.until(EC.visibility_of_element_located((By.XPATH, "//a[@href="#myModalLogin"]//strong[text()='Log In']"))).click()
username = wait.until(EC.visibility_of_element_located((By.ID, "login_email")))
password = wait.until(EC.visibility_of_element_located((By.ID, "login_pass")))
username.send_keys("EMAIL")
password.send_keys("PASSWORD")
driver.find_element_by_link_text('Log In').click()
uj5u.com熱心網友回復:
WebElement是一個元素,<button>但不是一個<a>元素。因此你不能使用link_text('Log In').

您可以使用以下定位器策略
CSS_SELECTOR:
driver.get("https://securities.stanford.edu/filings-case.html?id=107866") WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.hidden-tablet a[href='#myModalLogin']>strong"))).click() WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#login_email"))).send_keys("[email protected]") driver.find_element(By.CSS_SELECTOR, "input#login_pass").send_keys("[email protected]") driver.find_element(By.CSS_SELECTOR, "button[onclick='return submitLogin();']").click()路徑:
driver.get("https://securities.stanford.edu/filings-case.html?id=107866") WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[contains(@class, 'hidden-tablet')]//a[@href='#myModalLogin']/strong"))).click() WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@id='login_email']"))).send_keys("[email protected]") driver.find_element(By.XPATH, "//input[@id='login_pass']").send_keys("[email protected]") driver.find_element(By.XPATH, "//button[@onclick='return submitLogin();']").click()注意:您必須添加以下匯入:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC瀏覽器快照:

轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/411990.html
標籤:
