我正在嘗試使用機器人登錄 Twitter。
self.browser.get('https://www.twitter.com/login')
sleep(20)
username_input = self.browser.find_element(By.XPATH,'//*[@id="react-root"]/div/div/div/main/div/div/div/div[2]/div[2]/div[1]/div/div[5]/label/div/div[2]/div/input')
sleep(20)
username_input.send_keys(username)
sleep(5)
但我不斷收到 No such Element 錯誤:
NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="react-root"]/div/div/div/main/div/div/div/div[2]/div[2]/div[1]/div/div[5]/label/div/div[2]/div/input"}
我復制并粘貼了確切的 Xpath,但我不明白為什么它找不到該欄位。
uj5u.com熱心網友回復:
我看到name='text'在 HTML DOM 中是獨一無二的。所以沒有必要使用XPath。
username_input = self.browser.find_element(By.NAME, "text")
username_input.send_keys('send username here')
一種更好的方法是誘導ExplicitWait.
代碼:
self.browser.maximize_window()
wait = WebDriverWait(self.browser, 30)
self.browser.get('https://www.twitter.com/login')
username_input = wait.until(EC.visibility_of_element_located((By.NAME, "text")))
username_input.send_keys('send username here')
進口:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
CSS 選擇器將是:
input[name='text']
XPATH 將是:
//input[@name='text']
使用它們,而不是By.NAME請使用By.CSS_SELECTOR或By.XPATH
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/379805.html
