【发布时间】:2021-05-11 18:28:21
【问题描述】:
我正在使用 Selenium、Chrome 和 Python 3。
这就是我正在做的一切设置
import os
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
chrome_options = Options()
options = webdriver.ChromeOptions()
prefs = {
"download.default_directory": r"C:\Download\Dir",
"download.directory_upgrade": "true",
"download.prompt_for_download": "false",
"disable-popup-blocking": "true",
'download.neverAsk.saveToDisk': 'application/octet-stream, application/json, jar, ' +
'text/comma-separated-values, text/csv, application/csv, ' +
'application/excel, application/vnd.ms-excel, ' +
'application/vnd.msexcel, text/anytext, text/plaintext, ' +
'image/png, image/pjpeg, image/jpeg, application/zip',
"safebrowsing.enabled": True
}
options.add_experimental_option("prefs", prefs)
driver = webdriver.Chrome(options=options)
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--disable-software-rasterizer')
chrome_options.add_argument('--safebrowsing-disable-download-protection')
然后我导入了一些凭据机密,以及一些网站导航以获取要下载的文件。
然后,我点击链接下载文件:
# Click Upgrade Jar File
driver.find_element_by_xpath('//a[@id="accordionPanel:j_id_3a:1:j_id_3j"]').click()
我的问题就在这里。 Chrome 会在我下载 jar 文件后询问我是否要保留它。
我已经阅读了很多文档,但我不明白如何才能规避这一点。我认为应该将其添加到 prefs 或 chrome_options.add_argument 但到目前为止,我找到的选项都没有运气。
更新 01:
一点更新,我能够让它“静默”工作,这允许您绕过“保持”按钮,但我还没有找到一个解决方案,可以绕过“保持”按钮,当你'重新查看 GUI。
options = webdriver.ChromeOptions()
prefs = {
"download.default_directory": r"C:\Download\Dir",
"download.directory_upgrade": "true",
"download.prompt_for_download": "false",
"disable-popup-blocking": "true",
"safebrowsing.enabled": False,
"default_content_settings": "contentSettings",
"download": "download"
}
options.add_experimental_option("prefs", prefs)
options.add_argument("--headless")
options.add_argument("--disable-notifications")
options.add_argument('--disable-gpu')
options.add_argument('--disable-software-rasterizer')
driver = webdriver.Chrome(options=options)
options.add_argument('--safebrowsing-disable-download-protection')
更新 02
改编自评论的代码:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import time
import os
# Secrets
user_id = [grabs from a function that queries secrets]
user_password = [grabs from a function that queries secrets]
download_dir = "C:\Download\Dir"
options = Options()
options.add_argument("--disable-infobars")
options.add_argument("start-maximized")
options.add_argument("--disable-extensions")
options.add_argument("--disable-popup-blocking")
# disable the banner "Chrome is being controlled by automated test software"
options.add_experimental_option("useAutomationExtension", False)
options.add_experimental_option("excludeSwitches", ['enable-automation'])
prefs = {
"download.default_directory": r"C:\Download\Dir",
'download.prompt_for_download': False,
'download.extensions_to_open': 'jar',
'safebrowsing.enabled': True
}
capabilities = DesiredCapabilities().CHROME
options.add_experimental_option('prefs', prefs)
capabilities.update(options.to_capabilities())
driver = webdriver.Chrome('.\chromedriver.exe', options=options)
url = 'URL GOES HERE'
driver.get(url)
print("Navigating to", url)
driver.get(url)
# Define Text Boxes For Login
print('Logging into GoAnywhere Website')
username = driver.find_element_by_id('email')
password = driver.find_element_by_name('secret')
# Enter Username/Password
username.send_keys(user_id)
password.send_keys(user_password)
password.send_keys('\n')
# Wait for Page to load
....[这里的导航逻辑]....
# Click Upgrades
print("Selecting Upgrades")
time.sleep(1)
driver.find_element_by_xpath('//div[@id="accordionPanel"]/div[5]').click()
# CLick Upgrade Jar File
time.sleep(1)
print("Downloading upgrade jar to", download_dir)
driver.find_element_by_xpath('//a[@id="accordionPanel:j_id_3a:1:j_id_3j"]').click()
....[下载后处理文件的逻辑]....
【问题讨论】:
-
当你点击这个时会发生什么:driver.find_element_by_xpath('//div[@id="accordionPanel"]/div[5]').click()?它会打开另一个页面吗?
-
同一页面,只是浏览网站的 GUI。它们不像其他页面的 ahrefs。
-
如果您无法访问您的网站,则很难解决此问题。我会玩导航逻辑,看看这是否会导致问题。您也许可以将该逻辑折叠到一个 xpath 调用中进行测试。我也总是把我的点击代码分开。
-
您正在登录公司 GoAnywhere 帐户吗?
-
是的,我正在自动下载升级 jar 文件。
标签: python selenium google-chrome selenium-webdriver