为什么硒没有点击下拉菜单中的子菜单

Why selenium is not clicking on the submenu in the drop down

这是我试图用来从 FRED 网站抓取数据以下载 CSV 格式的时间序列数据的代码,但它会将我重定向到另一个页面

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver import ActionChains

url='https://fred.stlouisfed.org/series/TERMCBAUTO48NS'
driver=webdriver.Chrome(executable_path=r'D:\Workspace\Python\automation\chromedriver.exe') 
driver.get(url)
element=driver.find_element_by_id('download-button')
element.click()

wait1=WebDriverWait(driver,20)
result1=wait1.until(
    EC.element_to_be_clickable((By.ID,'fg-download-menu')))
print('Result 1: ',result1)

menu=driver.find_element_by_id('fg-download-menu')

wait1=WebDriverWait(driver,20)
result2=wait1.until(
    EC.element_to_be_clickable((By.ID,'download-data-csv')))
print('Result 2: ',result2)
hidden_submenu=driver.find_element_by_id('download-data-csv')

actions=ActionChains(driver)
actions.move_to_element(menu)
actions.click(hidden_submenu)
actions.perform()

driver.quit()

这应该有效:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome("D:/chromedriver/94/chromedriver.exe")
driver.get("https://fred.stlouisfed.org/series/TERMCBAUTO48NS")
# wait 60 seconds 
wait = WebDriverWait(driver,60)
wait.until(EC.element_to_be_clickable((By.ID, "download-button"))).click()
wait.until(EC.element_to_be_clickable((By.ID, "download-data-csv"))).click()

您使用的定位器不是唯一的。就像有几个标签具有相同的 id download-button.

为元素找到独特的定位器很重要。可以参考This link

尝试如下并确认:

driver.get("https://fred.stlouisfed.org/series/TERMCBAUTO48NS")
wait = WebDriverWait(driver,30)

# Click on Download button
wait.until(EC.element_to_be_clickable((By.XPATH,"//div[@id='page-title']//button[@id='download-button']"))).click()

# Click on CSV data
wait.until(EC.element_to_be_clickable((By.XPATH,"//ul[@id='fg-download-menu']//a[@id='download-data-csv']"))).click()