python解决Chrome“选择证书”弹框问题
解决该问题的思路:
由于该弹框是由浏览器进程控制的,如果使用一个线程是无法解决该问题的。解决该问题需要启用一个新的线程,该线程用于点击确认按钮。由于该弹窗是浏览器本身弹窗,应用程序本身是无法控制该弹窗,因此需要使用一些其他方法,类似于按键精灵东西,来点击确认。
实现点击确认方法
方法一:使用VBS+Python
第一步,准备循环点击Enter按钮的vbs脚本enter.vbs,脚本内容如下:
Set WshShell=WScript.CreateObject("WScript.Shell")
For i=1 To 2
WshShell.SendKeys "{enter}"
WScript.Sleep 1000
Next
第二步,写一个调用该脚本的python方法。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Author : WEL
# @Email : langhuang521@163.com
import subprocess
import time
import threading
from selenium import webdriver
def enter():
'''
用于输入enter键,关闭弹出按钮(按默认选项值)
'''
time.sleep(5)
subprocess.call("cscript enter.vbs")
def open_baidu():
'''
打开百度页面
'''
browser = webdriver.Chrome()
browser.get("https://www.baidu.com")
if __name__=="__main__":
thre = threading.Thread(target=enter)
runt = threading.Thread(target=open_baidu)
runt.start()
thre.start()
上方代码是完整的调用程序,vbs脚本和python脚本处于同级目录。执行python脚本时,后台会启动一个cscript进程用于点击enter按键操作,这时候鼠标要聚焦在浏览器上,这样enter操作才对弹框有效,所以这时候要估计好鼠标点击次数和循环时长。
该方法缺点是启动cscript时间过长且只能在window环境有效。
第二种方法:使用python的pynput模块
第一步,准备python脚本input_enter.py用于鼠标点击:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Author : WEL
# @Email : langhuang521@163.com
'''
该脚本用于输入enter键,关闭弹出按钮(按默认选项值)
'''
from pynput.keyboard import Key,Controller
import time
for i in range(5):
time.sleep(3)
control=Controller()
control.press(Key.enter)
control.release(Key.enter)
第二步,写一个调用该脚本的python方法。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Author : WEL
# @Email : langhuang521@163.com
import subprocess
import time
import threading
from selenium import webdriver
def enter():
'''
用于输入enter键,关闭弹出按钮(按默认选项值)
'''
time.sleep(5)
subprocess.call("python input_enter.py")
def open_baidu():
'''
打开百度页面
'''
browser = webdriver.Chrome()
browser.get("https://www.baidu.com")
if __name__=="__main__":
thre = threading.Thread(target=enter)
runt = threading.Thread(target=open_baidu)
runt.start()
thre.start()
上方代码是完整的调用程序,vbs脚本和python脚本处于同级目录。执行python脚本时,后台会运行input_enter.py脚本用于点击enter按键操作,这时候鼠标要聚焦在浏览器上,这样enter操作才对弹框有效,所以这时候要估计好鼠标点击次数和循环时长。该方法比vbs速度快且平台移植性好。推荐使用该方法。