其實如果加載進度條出現在你登錄頁面,你應該嘗試使用WebDriverWait
等到元素越來越如下可見: - :如果您收到 -
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
wait = WebDriverWait(driver, 10)
element = wait.until(EC.visibility_of_element_located((By.ID, "enter element id here")))
# now use send_keys
element.send_keys("enter value here")
Edited1TimeoutException
,我建議你嘗試尋找元素使用WebDriverWait
是無形的加載進度條,而不是硬編碼的睡眠等待然後找願望元素如下之前要等待: -
wait = WebDriverWait(driver, 10)
wait.until(EC.invisibility_of_element_located((By.ID, "enter loading progress bar id or other locators here")))
#now after invisible of loading progress bar wait for desire element
element = wait.until(EC.presence_of_element_located((By.ID, "enter element id here")))
# now use send_keys
element.send_keys("enter value here")
Edited2: - 元素的實際presence_of_element_located
只是檢查存在於DOM或不同時visibility_of_element_located
檢查存在,並且都可見元素,意味着presence_of_element_located
也能夠找到隱藏的元素以及可見的元素,而知名度得到唯一可見的,這就是爲什麼presence_of_element_located
作品。
現在的問題時send_keys
,因爲硒不能intract到元素,直到它的不可見的,這就是爲什麼你有麻煩可能是有慾望元素上的一些隱藏CSS
作品,這使得它無形的,這就是爲什麼硒無法與它交互但不用擔心,您仍然可以使用execute_script
來設置價值。
現在,你可以嘗試設置輸入元素值,而不是元素的發現,因爲使用後的send_keys
-
driver.execute_script("arguments[0].value = arguments[1]", element, "enter your value here")
好吧,確認我是否有加載進度條出現在登錄頁面,當你要找到元素? –
是的,它在那裏。在嘗試與之交互之前,我放了一個time.sleep(20),這足以讓登錄框出現。 – JRodge01
實際上,presence_of_element_located元素只是檢查存在於DOM上的元素,當visibility_of_element_located檢查是否存在且可見時,意味着presence_of_element_located也能夠找到隱藏元素以及可見元素,而只有可見性只有可見性,這就是爲什麼presence_of_element_located有效。 –