问题说明
我用selenium执行webUI自动化,遇到如下图的弹框,chrome要允许麦克风权限,但是这个弹框无法用元素定位到,也不是alert等类似的弹框,解决方法如下。
解决方法
在chrome options中设置配置即可。
options = webdriver.ChromeOptions()
# 默认chrome允许使用麦克风和摄像头权限(1允许2不允许)
options.add_experimental_option('prefs',
{'profile.default_content_setting_values.media_stream_mic': 1,
'profile.default_content_setting_values.media_stream_camera': 1})
driver = webdriver.Chrome(options=options)
顺便附上火狐浏览器的设置方法。
FirefoxOptions options = new FirefoxOptions();
options.addPreference("permissions.default.microphone", 1);
options.addPreference("permissions.default.camera", 1);
扩展
我一般会把options封装成一个函数,然后生成driver对象的时候再调用,这样做的目的就是可以把许许多多的options项单独整一个py文件来管理,一套东西带着走。
【chrome_options.py】文件代码如下:
from selenium import webdriver
def options():
# 创建chrome options对象
options = webdriver.ChromeOptions()
# 窗口最大化
options.add_argument('start-maximized')
# 取消控制台一些无用输出信息
options.add_argument('--log_level=3')
options.add_argument('--disable-gpu')
# 忽略证书错误,不需要手动点高级选项
options.add_argument('--ignore-certificate-errors')
# 去除小黄条和取消控制台无用信息
options.add_experimental_option('excludeSwitches',
['enable-automation', 'enable-logging'])
# 默认chrome取消弹出记住密码框,允许使用麦克风、摄像头、地图定位、通知权限(1允许2不允许)
options.add_experimental_option('prefs',
{'credentials_enable_service':False,'profile.password_manager_enable': False,
'profile.default_content_setting_values.media_stream_mic': 1, # 麦克风
'profile.default_content_setting_values.media_stream_camera': 1, # 摄像头
'profile.default_content_setting_values.geolocation': 1, # 定位
'profile.default_content_setting_values.notifications': 1}) # 通知
# 无头模式(以无头模式运行时,要设置window-size,不然有些元素会报element not interactable)
# options.add_argument('--headless')
# options.add_argument('--window-size=1920,1080')
return options
调用options函数代码如下:
from chrome_options import options
driver = webdriver.Chrome(options=options())