我想做的事: 為推特構建一個推特機器人。
我的問題: 即使我使用顯式等待,我的程式也無法找到輸入用戶名的文本框。
我試過的:
- 按類定位元素
- 按名稱定位元素
- 通過 xpath 定位元素
- 在程式繼續之前使用顯式等待來確保元素在螢屏上。
我的代碼:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# getting webdriver path
s = Service('/Users/shannonslater/Desktop/Everything/Dev/WebDrivers/chromedriver101')
driver = webdriver.Chrome(service=s)
# navigating to twitter login page
driver.get('https://twitter.com/login')
# trying to click on the username text box
try:
username_text_box = WebDriverWait(driver, 20).until(
EC.presence_of_element_located(By.XPATH, '//*[@id="layers"]/div/div/div/div/div/div/div[2]/div[2]/div/div/div[2]/div[2]/div[1]/div/div/div[5]/label/div/div[2]/div/input')
)
username_text_box.click()
except:
print("could not find username_text_box element")
# username text box is never clicked and "could not find username" is always printed
我直接從檢查的 html 元素復制 xpath:

uj5u.com熱心網友回復:
Twitter 登錄頁面上的用戶名字段是一個動態元素。
<input autocapitalize="sentences" autocomplete="username" autocorrect="on" name="text" spellcheck="true" type="text" dir="auto" class="r-30o5oe r-1niwhzg r-17gur6a r-1yadl64 r-deolkf r-homxoj r-poiln3 r-7cikom r-1ny4l3l r-t60dpp r-1dz5y72 r-fdjqy7 r-13qz1uu" value="">
解決方案
要將字符序列發送到您需要為element_to_be_clickable()誘導WebDriverWait的元素,您可以使用以下任一定位器策略:
使用CSS_SELECTOR:
options = Options() options.add_argument("start-maximized") s = Service('C:\\BrowserDrivers\\chromedriver.exe') driver = webdriver.Chrome(service=s, options=options) driver.get("https://twitter.com/i/flow/login") WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[autocomplete='username']"))).send_keys("ShannonSlater")使用XPATH:
options = Options() options.add_argument("start-maximized") s = Service('C:\\BrowserDrivers\\chromedriver.exe') driver = webdriver.Chrome(service=s, options=options) driver.get("https://twitter.com/i/flow/login") WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@autocomplete='username']"))).send_keys("ShannonSlater")注意:您必須添加以下匯入:
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/474001.html
上一篇:單擊第一個表格行
