我正在尝试找到一个要单击的元素。我可以使用 DevTools 从浏览器中找到该元素,但使用 Selenium 时会遇到错误,找不到元素。
我的代码:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
driver=webdriver.Chrome()
driver.implicitly_wait(2)
driver.get("https://www.fsmone.com.my/funds/tools/factsheet/aham-bond-fund?fund=MYAFCAPF")
WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.XPATH,"//div\[@id='content'\]")))
element=driver.find_element(By.XPATH, "//span\[text()='Latest NAV Price '\]")
element.click()
它返回以下错误
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//span[text()='Latest NAV Price ']"}
请参阅下面的工作重构代码:
import time
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
driver=webdriver.Chrome()
driver.get("https://www.fsmone.com.my/funds/tools/factsheet/aham-bond-fund?fund=MYAFCAPF")
# Create explicit wait object with wait time of 10s
wait = WebDriverWait(driver, 10)
element = wait.until(EC.element_to_be_clickable((By.XPATH, "//span[text()='Latest NAV Price ']")))
element.click()
time.sleep(10)
注意几点:
implicit wait
和 explicit wait
并不是最佳做法。如果您注意到我已从您的代码中删除了 driver.implicitly_wait(2)
。只需使用一个 wait
对象即可有效定位所有元素,就像我在上面的代码中所做的那样。presence of element
即可单击所需的元素(最新资产净值价格)。我已经删除了您检查是否存在 //div[@id='content']
的代码行。以下代码已经解决了这个问题element = wait.until(EC.element_to_be_clickable((By.XPATH, "//span[text()='Latest NAV Price ']")))