我正在尝试使用selenium webdriver python编写脚本。 当我尝试做一个
find_element_by_xpath("//*[@id='posted_1']/div[3]")
它说
NoElementFoundException。
有人可以帮我吗?
此致 巴拉
答案 0 :(得分:1)
如果您获得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();
答案 1 :(得分:0)
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]")))
根据我的经验,隐性等待通常很好,但不精确。