Использование selenium для загрузки файла через окно.открыть

Я пытаюсь очистить веб-страницу, где щелчок по ссылке приводит к появлению нового окна, которое немедленно загружает csv. Я не смог выяснить формат url, так как это довольно плотный javascript (и одна функция вызывается через onClickсвойство, а другая вызывается как часть hrefсвойства. Я не работал с селеном раньше, поэтому я надеялся подтвердить перед началом работы, что то, что я хочу сделать, возможно. Я где-то читал, что загрузка файлов через новые всплывающие окна не обязательно то, что я могу сделать с Selenium.

Любой совет был бы очень признателен. А this is possibleбыло бы очень полезно как бы here's how you'd do itдаже набросать в общих чертах. Большое спасибо!

Чтобы быть ясным, мои трудности в первую очередь связаны с тем, что я не могу понять, как генерируется URL для загрузки файла. Даже глядя на сетевые звонки Google chrome, я не вижу, где это, и, вероятно, мне потребуется много часов, чтобы отследить это, поэтому я ищу решение, которое опирается на щелчок по определенному тексту в браузере, а не распутывание громоздкого механизма за кулисами.

1 ответ

  1. Вот как я загружаю файлы с помощью Firefoxwebdriver. Это, по сути, создание профиля браузера, чтобы установить местоположение загрузки по умолчанию для определенных типов файлов. Затем можно проверить, существует ли файл в этом месте.

    import os
    from selenium import webdriver
    
    browser_profile = webdriver.FirefoxProfile()
    
    # add the file_formats to download
    file_formats = ','.join(["text/plain",
                             "application/pdf",
                             "application/x-pdf",
                             "application/force-download"])
    
    preferences = {
        "browser.download.folderList": 2,
        "browser.download.manager.showWhenStarting": False,
        "browser.download.dir": os.getcwd(),  # will download to current directory
        "browser.download.alertOnEXEOpen": False,
        "browser.helperApps.neverAsk.saveToDisk": file_formats,
        "browser.download.manager.focusWhenStarting": False,
        "browser.helperApps.alwaysAsk.force": False,
        "browser.download.manager.showAlertOnComplete": False,
        "browser.download.manager.useWindow": False,
        "services.sync.prefs.sync.browser.download.manager.showWhenStarting": False,
        "pdfjs.disabled": True
    }
    
    for pref, val in preferences.items():
        browser_profile.set_preference(pref, val)
    
    browser_binary = webdriver.firefox.firefox_binary.FirefoxBinary()
    browser = webdriver.Firefox(firefox_binary=browser_binary,
                                firefox_profile=browser_profile)
    
    # set the file name that will be saved as when you download is complete
    file_name = 'ABC.txt'
    
    # goto the link to download the file from it will be automatically
    # downloaded to the current directory
    file_url = 'http://yourfiledownloadurl.com'
    browser.get(file_url)
    
    # verify if the expected file name exists in the current directory
    path = os.path.join(os.getcwd(), file_name)
    assert os.path.isfile(path)