我試圖用selenium webdriver python編寫腳本。 當我嘗試做一個Selenium webdriver python通過xpath找到元素 - 找不到元素
find_element_by_xpath("//*[@id='posted_1']/div[3]")
它說
NoElementFoundException.
是否有人可以幫助我在這裏?
問候 巴拉
我試圖用selenium webdriver python編寫腳本。 當我嘗試做一個Selenium webdriver python通過xpath找到元素 - 找不到元素
find_element_by_xpath("//*[@id='posted_1']/div[3]")
它說
NoElementFoundException.
是否有人可以幫助我在這裏?
問候 巴拉
是例外,勿庸置疑,這意味着該元素是不可用的DOM。有一對夫婦的選擇這裏:
driver.implicitly_wait(10)
會告訴司機一個元素後,等待10秒(或任何時間),未發現/不可點擊等,之後再次嘗試。有時元素不會立即加載,所以隱含的等待可以修復這些類型的問題。
這裏的另一個選擇是做一個明確的等待。這將等到出現的元素,直到該元素的存在得到確認,該腳本將不會移動到下一行:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
element = WebDriverWait(ff, 10).until(EC.presence_of_element_located((By.XPATH, "//*[@id='posted_1']/div[3]")))
以我的經驗,一個隱含的等待通常是罰款,但不精確。
如果你正在NoSuchElementException
爲您提供的異常,可能有以下幾個原因: -
可能是你用不正確定位的定位,因此,你需要更好的定位解決方案共享HTML。
可能是當你要尋找的元素,它不會出現在DOM
,所以你應該實現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.XPATH, "//*[@id='posted_1']/div[3]")))
可能是這個元素在任何frame
或iframe
之內。如果是,你需要一個frame
或iframe
發現如下元素之前切換: -
driver.switch_to_frame("frame/iframe I'd or name")
wait = WebDriverWait(driver, 10)
element = wait.until(EC.visibility_of_element_located((By.XPATH, "//*[@id='posted_1']/div[3]")))
#Once all your stuff done with this frame need to switch back to default
driver.switch_to_default_content();
謝謝Saurabh,但在實施你的建議後,這是我在輸出中看到的。 0.00S [INFO]開始測量[160824_FW_3QJW] 0.36s [INFO]執行腳本的webdriver 20.76s [ERROR] TimeoutException異常: 回溯(最近最後調用):34 線,在<合成腳本> \t元素=等待.until(EC.visibility_of_element_located((By.XPATH,「// * [@ id ='posted_1']/div [3]」))) 第80行,直到 \t raise TimeoutException(message,screen,stacktrace) –
確保首先你的xpath是正確的... –
如果你的xpath是正確的,那麼確保這個元素不在任何框架或iframe中...如果它然後考慮第三個提供的點... :) –
我們需要您提供更多的信息。例如什麼網站? –