Selenium 和非 select 下拉列表
Selenium and non select dropdown list
您知道是否可以在非 select 下拉列表中使用 selenium 单击吗?
我需要与这个网站互动:https://ec.europa.eu/info/funding-tenders/opportunities/portal/screen/opportunities/projects-results
然后点击“按节目筛选”,然后 return 抓取到第一页。
下拉导航
下拉列表中的元素通常隐藏,直到启动下拉列表。知道这一点后,在单击列表中的任何元素之前,必须先单击 下拉列表 。有关基本示例,请参见以下代码:
from selenium import webdriver
driver = webdriver.Chrome()
dropdown_list = driver.find_element_by_xpath("XPATH_OF_DROPDOWN_LIST")
dropdown_list.click()
dropdown_element = driver.find_element_by_xpath("XPATH_OF_DROPDOWN_ELEMENT")
dropdown_element.click()
WebDriverWait
对于更高级和性能更好的示例,我建议实施 WebDriverWait 因为有时 的元素之间存在滞后下拉列表可用:
dropdown_element = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "XPATH_OF_DROPDOWN_ELEMENT")))
额外资源
对于那些不熟悉的人, time.sleep 和 WebDriverWait 之间的 区别在于 time.sleep 将始终等待 N N 为 time.sleep(N) 的秒数。然而,WebDriverWait 将 等待 N 秒,其中 N 是 WebDriverWait(driver, N)。意思是如果 WebDriverWait 变量设置为 10 秒,但元素在 2 秒后变为可用,驱动程序将在 2 秒内执行操作并转到下一个命令。 但是如果元素需要超过10秒出现,程序会抛出超时异常。
Filter by programme
下拉列表在单击 <label>
元素时打开。
解决方案
要单击并展开下拉列表,您需要诱导 WebDriverWait for the and you can use either of the following :
使用 XPATH:
driver.get("https://ec.europa.eu/info/funding-tenders/opportunities/portal/screen/opportunities/projects-results")
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a.wt-cck-btn-add"))).click()
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//label[text()='Select a Programme...']"))).click()
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
浏览器快照:
您知道是否可以在非 select 下拉列表中使用 selenium 单击吗?
我需要与这个网站互动:https://ec.europa.eu/info/funding-tenders/opportunities/portal/screen/opportunities/projects-results
然后点击“按节目筛选”,然后 return 抓取到第一页。
下拉导航
下拉列表中的元素通常隐藏,直到启动下拉列表。知道这一点后,在单击列表中的任何元素之前,必须先单击 下拉列表 。有关基本示例,请参见以下代码:
from selenium import webdriver
driver = webdriver.Chrome()
dropdown_list = driver.find_element_by_xpath("XPATH_OF_DROPDOWN_LIST")
dropdown_list.click()
dropdown_element = driver.find_element_by_xpath("XPATH_OF_DROPDOWN_ELEMENT")
dropdown_element.click()
WebDriverWait
对于更高级和性能更好的示例,我建议实施 WebDriverWait 因为有时 的元素之间存在滞后下拉列表可用:
dropdown_element = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "XPATH_OF_DROPDOWN_ELEMENT")))
额外资源
对于那些不熟悉的人, time.sleep 和 WebDriverWait 之间的 区别在于 time.sleep 将始终等待 N N 为 time.sleep(N) 的秒数。然而,WebDriverWait 将 等待 N 秒,其中 N 是 WebDriverWait(driver, N)。意思是如果 WebDriverWait 变量设置为 10 秒,但元素在 2 秒后变为可用,驱动程序将在 2 秒内执行操作并转到下一个命令。 但是如果元素需要超过10秒出现,程序会抛出超时异常。
Filter by programme
下拉列表在单击 <label>
元素时打开。
解决方案
要单击并展开下拉列表,您需要诱导 WebDriverWait for the
使用 XPATH:
driver.get("https://ec.europa.eu/info/funding-tenders/opportunities/portal/screen/opportunities/projects-results") WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a.wt-cck-btn-add"))).click() WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//label[text()='Select a Programme...']"))).click()
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
浏览器快照: