selenium无法定位chrome的特殊弹窗

用selenium实现chrome自动化登录时,有时候会出现弹窗无法识别抓取定位的情况。
弹窗样式如下:无法识别的弹窗
1.识别移动到弹窗,检查元素,无法显示使用,弹窗不在前端页面中
2.网上都说可能是alert,confirm和promte这三种弹窗,可以用driver.switch_to.alert切换到到弹窗,但是仍然会报错

raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoAlertPresentException: Message: no such alert

3.all_h=driver.window_handles所有的串口句柄中也没有弹窗的窗口
4.后续更换IE浏览器发现,并没有类似的窗口弹出。因此断定这是chrome浏览器本身自带功能模块的弹窗,所以自然selenium无法从网站的web前端中捕获和定位。。。

有点神坑

解决方案:
1.换个浏览器(但是我的项目不允许)
2.用浏览器设置证书验证弹出框,可以参考
Chrome的权限参考网址:
https://developer.chrome.com/apps/declare_permissions(没有亲测,但是应该是可行的)
3.采用多线程的方式,在网站请求堵塞的同时,调用另一个线程,按enter键跳过弹窗进行到下一步。(之前安装过PyUserInput),所以此种方式比较方便,安装请参考
https://www.jianshu.com/p/95d0a6dd7d47

不可以直接使用
#ActionChains(driver).send_keys(Keys.ENTER).perform() :会阻塞

from pykeyboard import PyKeyboard#导入键盘
import threading #导入多线程模块

def press_enter():  #定义子线程函数
    time.sleep(10) #可以多等待几秒
    k=PyKeyboard()
        #按下Enter键
    k.press_key(k.return_key) # 其中return_key就是Enter键
    #ActionChains(driver).send_keys(Keys.ENTER).perform() : #按下回车代码

主函数如下


        t = threading.Thread(target=press_enter) #初始化子线程
        t.setDaemon(True) 
    	driver.get(url) #drver访问网址登陆页面
        t.start() #子线程启动
        driver.find_element_by_id("soft-pki-login").click()

成功解决

补充:这种思路可以用在密码验证等弹窗,可以利用模拟的键盘进行密码的思路,从而实现自动化的登录

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值