Selenium无法识别Chrome的弹出框(提示xxx想要在此设备上存储文件)

在尝试从某网站爬取题库时,遇到Selenium无法识别Chrome的存储权限弹出框问题,导致"no such alert"异常。经过排查,确认该弹出框为Chrome自身权限请求,而非网页元素。通过在启动Chrome时添加--unlimited-storage参数,并删除处理alert的代码,成功避免弹出框并实现正常运行。

最近想从某培训机构网站上爬取题库,遇到了弹出框无法识别的问题,控制台提示“selenium.common.exceptions.NoAlertPresentException: Message: no such alert”。

然而弹出框是确实存在的啊,设置了元素等待,在报错之前弹出框已经出现了的。手动点击没有问题。

既然不是元素等待问题,接下来考虑是不是frame不同导致元素无法识别。因为某些弹出框,本身不一定是alert、confirm等类型,也可能是一个弹出页面(虽然这个弹出框看着不像,还是要排查下)。使用Chrome自带的开发者工具(F12)发现无法识别该弹出框的任何元素。

开始怀疑这个是Chrome自身的弹出框,而不是网站的弹出框。

验证:使用Firefox浏览器操作,发现不会出现该弹出框,可以确认这是Chrome自身的弹出框。

这种提示一般跟Chrome的设置有关,然而在设置页面没有找到相关的配置项。

这个时候当然是找百度帮忙了,然而在我变换了多个搜索关键字后也搜索不到我想要的结果。我就纳闷了,难道其他人都没遇到过这种情况吗?不过也不奇怪,我也是第一次遇到这种权限申请,一般都是“网站想要发送通知”的那种。

其实

Selenium的VBA库中,处理Chrome弹出框通常涉及到处理不同类型的弹出框,如警告框(alert)、确认框(confirm)和提示框(prompt)。以下是针对不同类型弹出框的处理方法: ### 处理警告框(alert) 警告框是一种简单的弹出框,通常用于显示一条消息并要求用户点击“确定”。 ```vba Sub HandleAlert() Dim driver As New SeleniumWrapper.WebDriver driver.Start "chrome" driver.Get "https://example.com" ' 替换为实际的网页URL ' 假设点击某个元素会触发警告框 Dim element As SeleniumWrapper.WebElement Set element = driver.FindElementById("alertButton") ' 根据实际情况修改选择器 element.Click ' 切换到警告框 Dim alert As SeleniumWrapper.Alert Set alert = driver.SwitchToAlert ' 获取警告框的文本 Dim alertText As String alertText = alert.Text ' 点击“确定”关闭警告框 alert.Accept driver.Quit End Sub ``` ### 处理确认框(confirm) 确认框通常包含“确定”和“取消”两个按钮,用户可以选择其中一个。 ```vba Sub HandleConfirm() Dim driver As New SeleniumWrapper.WebDriver driver.Start "chrome" driver.Get "https://example.com" ' 替换为实际的网页URL ' 假设点击某个元素会触发确认框 Dim element As SeleniumWrapper.WebElement Set element = driver.FindElementById("confirmButton") ' 根据实际情况修改选择器 element.Click ' 切换到确认框 Dim confirm As SeleniumWrapper.Alert Set confirm = driver.SwitchToAlert ' 获取确认框的文本 Dim confirmText As String confirmText = confirm.Text ' 点击“确定” confirm.Accept ' 或者点击“取消” ' confirm.Dismiss driver.Quit End Sub ``` ### 处理提示框(prompt) 提示框允许用户输入文本,并包含“确定”和“取消”两个按钮。 ```vba Sub HandlePrompt() Dim driver As New SeleniumWrapper.WebDriver driver.Start "chrome" driver.Get "https://example.com" ' 替换为实际的网页URL ' 假设点击某个元素会触发提示框 Dim element As SeleniumWrapper.WebElement Set element = driver.FindElementById("promptButton") ' 根据实际情况修改选择器 element.Click ' 切换到提示框 Dim prompt As SeleniumWrapper.Alert Set prompt = driver.SwitchToAlert ' 获取提示框的文本 Dim promptText As String promptText = prompt.Text ' 在提示框中输入文本 prompt.SendKeys "Some text" ' 点击“确定” prompt.Accept ' 或者点击“取消” ' prompt.Dismiss driver.Quit End Sub ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值