【问题标题】:Download and save multiple csv files using selenium and python from popup使用 selenium 和 python 从弹出窗口下载并保存多个 csv 文件
【发布时间】:2017-12-19 05:17:28
【问题描述】:

我想从“https://clinicaltrials.gov/ct2/results?cond=&term=lomitapide&cntry1=&state1=&SearchAll=Search+all+studies&recrs=”网站下载 csv 文件 我正在使用 python 和 selenium 脚本,如下所示:但我得到异常“ElementNotInteractableException”并且无法下载页面

    from selenium import webdriver
    fp=webdriver.FirefoxProfile()
    fp.set_preference("browser.helperApps.neverAsk.saveToDisk","text/csv")
    browser = webdriver.Firefox(fp)
    browser.get("https://clinicaltrials.gov/ct2/results?cond=&term=lomitapide&cntry1=&state1=&SearchAll=Search+all+studies&recrs=")
    browser.find_element_by_id("submit-download-list")

【问题讨论】:

    标签: python selenium firefox geckodriver firefox-profile


    【解决方案1】:

    您将收到异常 ElementNotInteractableException ,因为在弹出窗口打开后该元素将可访问。您缺少单击打开弹出窗口的下载链接。请尝试以下方法,

    from selenium import webdriver
    fp=webdriver.FirefoxProfile()
    fp.set_preference("browser.helperApps.neverAsk.saveToDisk","text/csv")
    browser = webdriver.Firefox(fp)
    browser.get("https://clinicaltrials.gov/ct2/results?cond=&term=lomitapide&cntry1=&state1=&SearchAll=Search+all+studies&recrs=")
    browser.find_element_by_id("save-list-link").click()
    browser.find_element_by_id("submit-download-list")
    

    【讨论】:

    • 非常感谢。但是,尽管弹出窗口现在正在打开,但仍然没有下载文件。
    【解决方案2】:

    这是您问题的答案:

    您称为find_element_by_id("submit-download-list") 的元素实际上下载了PDF 文件。因此,为了这个问题/帖子/线程/讨论的未来程序员和读者的利益,您可以考虑将您的问题标题更改为 Download and Save PDF file using selenium and python from popup

    这是使用 selenium 和 python 从弹出窗口下载和保存 PDF 文件的代码块:

    import os
    from selenium import webdriver
    from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
    from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    
    binary = FirefoxBinary('C:\\Program Files\\Mozilla Firefox\\firefox.exe')
    newpath = 'C:\\home\\DebanjanB'
    if not os.path.exists(newpath):
        os.makedirs(newpath)
    
    profile = webdriver.FirefoxProfile()
    profile.set_preference("browser.download.dir",newpath)
    profile.set_preference("browser.download.folderList",2)
    profile.set_preference("browser.helperApps.neverAsk.saveToDisk", "text/plain,text/x-csv,text/csv,application/vnd.ms-excel,application/csv,application/x-csv,text/csv,text/comma-separated-values,text/x-comma-separated-values,text/tab-separated-values,application/pdf")
    profile.set_preference("browser.download.manager.showWhenStarting",False)
    profile.set_preference("browser.helperApps.neverAsk.openFile","text/plain,text/x-csv,text/csv,application/vnd.ms-excel,application/csv,application/x-csv,text/csv,text/comma-separated-values,text/x-comma-separated-values,text/tab-separated-values,application/pdf")
    profile.set_preference("browser.helperApps.alwaysAsk.force", False)
    profile.set_preference("browser.download.manager.useWindow", False)
    profile.set_preference("browser.download.manager.focusWhenStarting", False)
    profile.set_preference("browser.helperApps.neverAsk.openFile", "")
    profile.set_preference("browser.download.manager.alertOnEXEOpen", False)
    profile.set_preference("browser.download.manager.showAlertOnComplete", False)
    profile.set_preference("browser.download.manager.closeWhenDone", True)
    profile.set_preference("pdfjs.disabled", True)
    
    caps = DesiredCapabilities.FIREFOX
    browser = webdriver.Firefox(firefox_profile=profile, capabilities=caps, firefox_binary=binary, executable_path='C:\\Utility\\BrowserDrivers\\geckodriver.exe')
    browser.maximize_window()
    browser.get("https://clinicaltrials.gov/ct2/results?cond=&term=lomitapide&cntry1=&state1=&SearchAll=Search+all+studies&recrs=")
    browser.find_element_by_id("save-list-link").click()
    download_link = WebDriverWait(browser, 10).until(
        EC.presence_of_element_located((By.XPATH, "//input[@id='submit-download-list']"))
    )
    download_link.click()
    

    如果这能回答您的问题,请告诉我。

    【讨论】:

    • 非常感谢。它实际上正在工作!并且能够下载PDF文件。但是我需要不同的结果单击我想要的下载选项卡后(i)csv 或 tsv 文件:从下拉列表中我需要选择 tsv 或 csv 格式(ii)选择所有 18 个找到的研究的研究数量(iii)选择表列到所有可用列。是否可以将此修改添加到现有代码中。如果您能帮助我,我将不胜感激......
    猜你喜欢
    • 2019-03-25
    • 2019-05-04
    • 1970-01-01
    • 1970-01-01
    • 2017-12-15
    • 2018-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多