前はブラウザ表示してからやるパターンですが、今回はヘッドレスモードの時。
実際のところ
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import time from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.action_chains import ActionChains # headless用のアクション 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) # 実行オプション options = Options() options.binary_location = CHROME_BIN options.add_argument('--headless') downloadPath = "/home/ubuntu" # サンドボックスなし options.add_argument('--no-sandbox') # headless時のダウンロード処理 options.add_experimental_option("prefs", { "download.default_directory": downloadPath, "download.prompt_for_download": False, "download.directory_upgrade": True, "safebrowsing_for_trusted_sources_enabled": False, "safebrowsing.enabled": False }) # 実行インスタンスの作成 print("start...\r\n") driver = webdriver.Chrome(CHROME_DRIVER, options=options) # この時、冒頭で指定した関数を実行する enable_download_headless(driver, downloadPath) # driverの初期化とか前処理とか.... print("NextPage....\r\n") driver.get('TARGET URL') print(driver.get_window_rect()) #マウスの挙動を再現するActionChainsのインスタンス actions = ActionChains(driver) # 参考元をベースにhtmlタグをベースに targetElement = driver.find_element_by_tag_name('html') # 左上を基準点に。move_to_elementでは重心になる。 actions.move_to_element_with_offset(targetElement,0,0) # target_x、target_yの分だけ移動 actions.move_by_offset(target_x,target_y) #左クリック。右クリックはcontext_click、ダブルクリックはdouble_click actions.click() # スタックしたコマンド群を実行 actions.perform() # 展開した蛇腹メニューからdownload_item_yだけ動いてダウンロード actions.move_by_offset(0,download_item_y) actions.click() actions.perform() # インスタンスを片付ける。整理整頓は基本。 driver.quit()