无法在 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")
html-select element for the year isn't within the 。所以你不必切换框架。
至select年为1999使用 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
我正在尝试从网站上抓取价目表,为此我需要绕过年龄验证。为此,我使用以下代码 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")
html-select element for the year isn't within the
至select年为1999使用
使用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