我正在嘗試從網站上抓取價目表,為此我需要繞過年齡驗證。為此,我使用以下代碼選擇年份“1999”,但出現此錯誤----
NoSuchElementException:訊息:沒有這樣的元素:無法找到元素:{"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)
對此的任何幫助將不勝感激!謝謝
uj5u.com熱心網友回復:
這html-選擇當年的元素不在iframe中。所以你不必切換幀。

要使用Selenium從下拉串列中選擇1999 年,您需要為element_to_be_clickable()引入WebDriverWait ,并且可以使用以下任一定位器策略:
使用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瀏覽器快照:

參考
您可以在以下位置找到一些相關的討論:
- 使用 Selenium 和 Python 選擇選項
- 帶有 Selenium 的 Python 下拉串列
uj5u.com熱心網友回復:
彈出對話框不在框架內,因此您不應切換到您在此處切換的框架。
此外,您應該使用預期條件顯式等待而不是硬編碼暫停。
而且您的定位器是錯誤的,它是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")
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/435272.html
