Selenium webdriver python通过xpath找到元素 - 找不到元素
我试图用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中...如果它然后考虑第三个提供的点... :) –
我们需要您提供更多的信息。例如什么网站? –