Selenium webdriver python通过xpath查找元素-找不到元素
我试图用SeleniumWebDriverPython编写一个脚本。 当我试着做一个Selenium webdriver python通过xpath查找元素-找不到元素,python,selenium,selenium-webdriver,Python,Selenium,Selenium Webdriver,我试图用SeleniumWebDriverPython编写一个脚本。 当我试着做一个 find_element_by_xpath("//*[@id='posted_1']/div[3]") 上面说 NoElementFoundException 有人能帮我吗 问候 Bala不出意料,这个异常意味着该元素在DOM上不可用。这里有几个选项: driver.implicitly_wait(10) 将告诉驱动程序在找不到元素/不可单击等后等待10秒(或任意时间),然后重试。有时元素不会立即加载,因
find_element_by_xpath("//*[@id='posted_1']/div[3]")
上面说
NoElementFoundException
有人能帮我吗
问候
Bala不出意料,这个异常意味着该元素在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]")))
根据我的经验,隐式等待通常很好,但并不精确。如果您得到的异常是
NoTouchElementException
,可能有以下原因:-
- 可能是您使用的定位器不正确,所以您需要共享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]")))
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();
- 此元素可能位于任何
或帧
内。如果是,您需要在查找元素之前切换该iframe
或frame
,如下所示:-iframe
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]")))
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();