【问题标题】:Why selenium is not clicking on the submenu in the drop down为什么硒没有点击下拉菜单中的子菜单
【发布时间】:2021-12-03 09:09:36
【问题描述】:

这是我试图从 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()

【问题讨论】:

    标签: python selenium selenium-webdriver web-scraping automation


    【解决方案1】:

    您使用的定位器不是唯一的。就像有几个标签具有相同的 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()
    

    【讨论】:

    • 它不起作用。它重定向到它之前重定向到的同一页面。 Link到页面
    • @RajAryan - 我又试了一次,我可以看到文件已下载。并且网站没有任何变化。
    • 我还是有问题。可以问一下你的邮箱吗?
    【解决方案2】:

    这应该可行:

    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()
    

    【讨论】:

    • 它不起作用。它重定向到它之前重定向到的同一页面。 Link到页面
    • 对!我看到我放了一个 driver.redirect_back_to_same_page_once_page_is_loaded()。傻我。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多