selenium弹窗之windows下载文件弹窗点击方法

一、弹窗类型

一般说到selenium中的弹窗包括以下三种类型:
类型一:窗口柄
在这里插入图片描述
这种窗口常说的就是窗口句柄,其实并不能算弹窗,应该属于窗口切换

类型二:web弹窗
使用如下命令导致的:

browser = webdriver.Firefox()

browser.implicitly_wait(0.1)
browser.get('https://www.bilibili.com/')
browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')
browser.execute_script('alert("to botton")')

在这里插入图片描述

第三种:windows弹窗
在这里插入图片描述
参见《selenium+python自动化–文件下载弹窗处理(PyKeyboard)
selenium+python自动化99–文件下载弹窗处理(PyKeyboard)》,链接: link.

据这篇文章所述,这种弹窗并不是web界面的弹窗,我尝试过定位,确实不行,因为元素都找不到。因而这种弹窗我称之为windows弹窗,即不可以通过selenium的鼠标、键盘操作完成,用动作链也不行

二、windows下载文件弹窗点击方法

pyuserinput模块

大部分文章对于这种弹窗的点击方法使用的是PyUserInpu模块

但是这个模块需要pyhook模块,但是这个模块pip无法下载,
在这里插入图片描述

直接下载PyUserInput 也不行
在这里插入图片描述
有解决下载的文章《https://blog.youkuaiyun.com/zhusongziye/article/details/79241410》,链接: link.
具体怎么样没有尝试,一看就很麻烦

其中pyhook最新版本为2008年的
在这里插入图片描述
pyuserinput也是2016年的了,
在这里插入图片描述
长时间没有更新,怕有许多问题就没有继续安装了

pyautogui模块

在《python之鼠标、键盘模拟》,链接: link.
找到了这个pyautogui模块,最新版2020
在这里插入图片描述
近期更新的,一看比较靠谱,就用了这个模块
下载文件弹窗的点击方法
在这里插入图片描述
在这里插入图片描述

具体的点击位置需要慢慢调,我的弹窗解决方法
代码:

import pyautogui

pyautogui.moveTo(505,410)
pyautogui.click()
pyautogui.moveTo(765,465)
print('ok')

在这里插入图片描述

<think>好的,我现在需要帮助用户解决如何使用Selenium下载文件到指定目录的问题。用户提到要配置preferences,所以我需要回忆一下Selenium的相关配置选项,尤其是Chrome浏览器的设置。 首先,我记得在Selenium中,特别是使用ChromeDriver时,可以通过ChromeOptions来设置浏览器的首选项(preferences)。下载路径的设置通常涉及到设置下载目录,并且可能需要禁用下载对话框,以便自动下载而无需用户干预。 接下来,我需要确定具体的preference参数。根据以往的经验,Chrome的preferences中,下载路径对应的键是"download.default_directory",而禁用下载提示可能需要设置"download.prompt_for_download"为false。另外,可能还需要设置"download.directory_upgrade"为true来确保路径正确升级。 然后,我需要考虑如何将这些preferences添加到ChromeOptions中。通常的做法是创建一个字典,将这些设置包含进去,然后通过add_experimental_option方法传递给ChromeOptions实例。 另外,用户可能使用的是不同的浏览器,但问题中提到了Selenium启动Chrome的配置,所以应该专注于Chrome的配置方法。同时,可能需要处理不同操作系统下的路径格式问题,比如Windows使用反斜杠,而Linux或Mac使用正斜杠,需要用双反斜杠转义或者原始字符串。 还需要注意,有些资料可能提到旧版本的参数设置,比如profile.default_content_settings.popups,但根据最新的ChromeDriver文档,可能已经有所变化,所以需要验证这些参数是否仍然有效。 此外,用户提供的引用中提到了配置选项详解的文章,虽然链接不可访问,但可以推测其中可能包含了一些示例代码,我需要确保提供的代码示例符合最新的实践,并正确应用这些配置。 最后,可能需要考虑异常处理,比如路径不存在时的处理,或者浏览器版本与驱动程序的兼容性问题。但用户的问题主要集中在如何配置preferences,所以可以优先解答这部分,再简要提及可能需要注意的其他事项。 总结步骤: 1. 导入必要的模块(webdriver、Options)。 2. 创建ChromeOptions实例。 3. 设置下载目录的路径,注意格式。 4. 添加preferences到ChromeOptions中。 5. 实例化浏览器驱动并应用这些选项。 6. 验证配置是否生效,例如进行文件下载测试。 同时,用户可能想了解不同浏览器(如Firefox)的设置方法,但问题明确提到Chrome,所以可以专注于Chrome的解决方案。如果有余力,可以简要提到其他浏览器的差异,但可能超出当前问题范围。 现在需要将这些思路整理成一个清晰的中文回答,包含代码示例,并确保使用正确的LaTeX格式和引用标记。</think>要使用Selenium下载文件到指定目录,需通过`ChromeOptions`配置浏览器首选项。以下是具体步骤: --- ### 1. 设置下载路径和禁用弹窗 在Chrome浏览器中,通过`prefs`参数配置以下选项: - `download.default_directory`: 指定下载路径,需使用绝对路径 - `download.prompt_for_download`: 设为`false`以禁用下载确认弹窗 - `download.directory_upgrade`: 设为`true`确保路径权限 代码示例: ```python from selenium import webdriver from selenium.webdriver.chrome.options import Options # 配置下载路径(注意路径格式) download_path = "D:\\selenium_downloads" # Windows路径示例 # download_path = "/tmp/selenium_downloads" # Linux/Mac路径示例 chrome_options = Options() prefs = { "download.default_directory": download_path, "download.prompt_for_download": False, "download.directory_upgrade": True, "safebrowsing.enabled": True # 可选安全浏览设置 } chrome_options.add_experimental_option("prefs", prefs) # 启动浏览器 driver = webdriver.Chrome(options=chrome_options) ``` --- ### 2. 路径格式注意事项 - Windows需使用双反斜杠转义或原始字符串: ```python download_path = r"D:\selenium_downloads" # 原始字符串写法 ``` - 确保目录存在(可添加自动创建逻辑): ```python import os if not os.path.exists(download_path): os.makedirs(download_path) ``` --- ### 3. 文件类型处理(可选) 如需指定自动保存特定文件类型,可添加MIME类型配置: ```python prefs.update({ "profile.default_content_settings.popups": 0, # 禁用弹窗 "download.extensions_to_open": "" # 不自动打开文件 }) ``` --- ### 验证配置 访问下载链接后检查文件是否出现在指定路径: ```python driver.get("https://example.com/sample.pdf") # 添加等待逻辑确保下载完成 import time time.sleep(5) # 根据文件大小调整等待时间 ``` --- ### 其他浏览器配置 Firefox需使用`FirefoxProfile`设置: ```python profile = webdriver.FirefoxProfile() profile.set_preference("browser.download.dir", "/path/to/dir") profile.set_preference("browser.download.folderList", 2) # 自定义路径 profile.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/pdf") driver = webdriver.Firefox(firefox_profile=profile) ``` ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值