微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python 下载脚本在有头模式下成功工作在无头模式下无法工作

如何解决Python 下载脚本在有头模式下成功工作在无头模式下无法工作

我想弄清楚为什么我的代码在无头模式下没有下载文件,而在常规/有头模式下运行时,我确实得到了下载文件。直到本周,它过去都可以正常工作。

此脚本会打开一个公共 Google 驱动器,然后在选择第一个下载链接之前应用列表视图和排序方向。这是我从互联网上输入和复制/粘贴的内容

chrome_options = webdriver.ChromeOptions()
    
chrome_options.add_argument("--headless")
chrome_options.add_argument("--disable-infobars")
chrome_options.add_argument("--window-size=1920,1080")
chrome_options.add_argument("--disable-extensions")
chrome_options.add_argument("--proxy-server='direct://'")
chrome_options.add_argument("--proxy-bypass-list=*")
chrome_options.add_argument("--start-maximized")
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument('--no-sandBox')
chrome_options.add_argument('--ignore-certificate-errors')
    
prefs = {}
prefs["profile.default_content_settings.popups"]=0
prefs["download.default_directory"]=download_path
chrome_options.add_experimental_option("prefs",prefs)
    
browser = splinter.browser('chrome',options=chrome_options)
    
browser.visit('https://drive.google.com/drive/folders/')
logging.debug("Google Drive website opened")
time.sleep(5)
    
webdriverwait(browser.driver,20).until(EC.element_to_be_clickable((By.CSS_SELECTOR,'[aria-label="List view"]'))).send_keys(keys.Keys.ENTER)
logging.debug("List view requested")
time.sleep(5)
webdriverwait(browser.driver,'[aria-label="Reverse sort direction"]'))).send_keys(keys.Keys.ENTER)
logging.debug("Sort with latest on top requested")
time.sleep(5)
webdriverwait(browser.driver,'[aria-label="Download"]'))).send_keys(keys.Keys.ENTER)
logging.debug("Download requested")
time.sleep(5)

wait_for_downloads(browser.driver,download_path,headless=True)
    
logging.debug("Download completed")
    
browser.quit()
logging.debug("browser Quit")

解决方法

请尝试如下。

from selenium import webdriver
import time
from selenium.webdriver.chrome.options import Options

options = webdriver.ChromeOptions()
options.add_argument("headless")
driver = webdriver.Chrome(executable_path='C:\\temp\\chromedriver_win32\\chromedriver.exe',options=options)
driver.get('http://www.google.com')
,

以下代码测试成功。

from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument("--headless")

driver = webdriver.Chrome(executable_path="./chromedriver",options=chrome_options)
,

我已经放弃尝试在无头模式下使用 chrome 从谷歌驱动器下载。我切换到 Firefox,它使用相同的代码/方法在无头模式下工作。我在 Splinter 中设置它时遇到了一些问题,所以我是这样做的,以防其他人偶然发现这个问题并且无法让 Google Headless 像非 Headless 一样运行:

#Solution below from https://github.com/cobrateam/splinter/issues/378#issuecomment-87162477

prof = {}
prof['browser.download.manager.showWhenStarting'] = 'false'
prof['browser.helperApps.alwaysAsk.force'] = 'false'
prof['browser.download.dir'] = download_path
prof['browser.download.folderList'] = 2
prof['browser.helperApps.neverAsk.saveToDisk'] = 'text/csv,application/csv,text/html,application/xhtml+xml,application/xml,application/octet-stream,application/pdf,application/x-msexcel,application/excel,application/x-excel,application/vnd.ms- excel,image/png,image/jpeg,text/plain,application/msword,text/x-c,application/x-7z-compressed,application/zip'
prof['browser.download.manager.useWindow'] = 'false'
prof['browser.helperApps.useWindow'] = 'false'
prof['browser.helperApps.showAlertonComplete'] = 'false'
prof['browser.helperApps.alertOnEXEOpen'] = 'false'
prof['browser.download.manager.focusWhenStarting']= 'false'

browser = splinter.Browser('firefox',profile_preferences=prof,headless=True)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?