无法在 Python 中找到元素

Unable to find element in Python

我正在尝试从网站上抓取价目表,为此我需要绕过年龄验证。为此,我使用以下代码 select 年份“1999”,但出现此错误 ----

NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[name="year_field"]"}


我使用的代码:

from selenium import webdriver

from selenium.webdriver.common.keys import Keys

import time

from selenium.webdriver.support.ui import Select

PATH="chromedriver.exe"


driver=webdriver.Chrome(PATH)

driver.get("https://valuebuds.com/pages/search-results-page")

driver.switch_to.frame("_hjRemoteVarsFrame")

time.sleep(5)

sel=Select(driver.find_element_by_name ("year_field"))

sel.Select_by_visible_text("1999")

print(driver.title)

如有任何帮助,我们将不胜感激!谢谢

pop-up 对话框不在框架内,因此您不应切换到正在此处切换的框架。
此外,您应该使用预期条件显式等待而不是硬编码暂停。
你的定位器是错误的,它是 year_field id,而不是那里的 name 属性。
这应该会更好:

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
from selenium.webdriver.common.keys import Keys

import time

from selenium.webdriver.support.ui import Select

PATH="chromedriver.exe"


driver=webdriver.Chrome(PATH)
wait = WebDriverWait(driver, 20)

driver.get("https://valuebuds.com/pages/search-results-page")

wait.until(EC.presence_of_element_located((By.ID, "year_field")))
sel=Select(driver.find_element_by_id("year_field"))

sel.Select_by_visible_text("1999")

element for the year isn't within the 。所以你不必切换框架。


至select1999使用 from the you need to induce WebDriverWait for the and you can use either of the following :

  • 使用CSS_SELECTOR:

    driver.get("https://valuebuds.com/pages/search-results-page")
    Select(WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "select#year_field")))).select_by_visible_text('1999')
    
  • 使用 XPATH:

    driver.get("https://valuebuds.com/pages/search-results-page")
    Select(WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//select[@id='year_field']")))).select_by_visible_text('1999')
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
  • 浏览器快照:


参考资料

您可以在以下位置找到一些相关讨论:

  • Selecting options using Selenium and Python
  • Python with Selenium drop down list