Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python Selenium Headless download

I'm trying to download a file with selenium. I've searched everything.

At How to control the download of files with Selenium Python bindings in Chrome some people told that it worked. But it didn't worked for me! Maybe I miss something? The only things differentlly is that my page autostarted download the csv file.

After studying the chrome codes I added:

        "safebrowsing_for_trusted_sources_enabled": False

But still id didn't worked.

options = Options()
options.add_argument("--disable-notifications")
options.add_argument('--no-sandbox')
options.add_experimental_option("prefs", {
    "download.default_directory": "C:\\Users\\claudiu.ivanescu\\Downloads",
    "download.prompt_for_download": False,
    "download.directory_upgrade": True,
    "safebrowsing_for_trusted_sources_enabled": False
})
options.add_argument('--disable-gpu')
options.add_argument('--disable-software-rasterizer')
options.add_argument('--headless')

Thank for support

like image 988
Claudiu Avatar asked Oct 16 '18 07:10

Claudiu


People also ask

What is headless Chrome Selenium Python?

A headless browser is a web browser without a user interface, it means the browser is running in the background (invisbile). This is great if you want to start a web browser to do tasks, but you don't want or need to see it.

Can you run Selenium headless?

Yes, Selenium supports headless testing. In older versions of Selenium, we used the HTMLUnitDriver mainly, a headless driver providing a Non-GUI implementation of Selenium WebDriver.


1 Answers

If anybody interested, after 2 days of search :). I manage to make it works!

I found the answer the bug tracking in this comment: https://bugs.chromium.org/p/chromium/issues/detail?id=696481#c86

The code I used is:

def enable_download_headless(browser,download_dir):
    browser.command_executor._commands["send_command"] = ("POST", '/session/$sessionId/chromium/send_command')
    params = {'cmd':'Page.setDownloadBehavior', 'params': {'behavior': 'allow', 'downloadPath': download_dir}}
    browser.execute("send_command", params)

if __name__ == '__main__':
    options = Options()
    options.add_argument("--disable-notifications")
    options.add_argument('--no-sandbox')
    options.add_argument('--verbose')
    options.add_experimental_option("prefs", {
        "download.default_directory": "C:\\tmp",
        "download.prompt_for_download": False,
        "download.directory_upgrade": True,
        "safebrowsing_for_trusted_sources_enabled": False,
        "safebrowsing.enabled": False
    })
    options.add_argument('--disable-gpu')
    options.add_argument('--disable-software-rasterizer')
    options.add_argument('--headless')
    driver_path = "C:\\Users\\tmp\\chromedriver.exe"
    driver = webdriver.Chrome(driver_path, chrome_options=options)
    enable_download_headless(driver, "C:/tmp")
    driver.get(url)

Maybe will be some use to others in the future... Probably is a lot of useless things inside, but didn't have time yet to change :).

like image 138
Claudiu Avatar answered Sep 30 '22 03:09

Claudiu