当使用Selenium(Python)进行web抓取时,如何更改ChromeDriver的默认摄像头?

2024-04-18 22:36:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Selenium(在Mac上使用Python)来抓取一个需要我的相机的网站

但是,我不想使用我的计算机摄像头,我想使用(OBS应用程序的)虚拟摄像头

一开始,我的第一个问题是允许ChromeDriver使用相机,因为出现了许可弹出窗口。我用这个代码解决了这个问题:

options = webdriver.ChromeOptions()
options.add_experimental_option("prefs", { \
    "profile.default_content_setting_values.media_stream_mic": 1,     # 1:allow, 2:block 
    "profile.default_content_setting_values.media_stream_camera": 1,  # 1:allow, 2:block 
    "profile.default_content_setting_values.geolocation": 2,          # 1:allow, 2:block 
    "profile.default_content_setting_values.notifications": 2         # 1:allow, 2:block 
})

这样,它就使用了我的默认相机。我想补充一下 "profile.default_content_setting_values.media_stream_camera.option": "OBS",在上面的代码中,但这并不完全正确。我读到位于/Users/myusername/Library/Application Support/Google/Chrome/Default/Preferences.json的Preferences.json文件可以显示在上述prefs字典中可以更改的内容,但我不是很了解它

由于我无法继续,任何帮助都是非常有价值的


Tags: 代码defaultstreamcontentprofileblockmediasetting
1条回答
网友
1楼 · 发布于 2024-04-18 22:36:37

启动脚本时,可以转到Chrome相机设置并更改默认相机:

config_camera_url = "chrome://settings/content/camera"
driver.get(config_camera_url)
sleep(3)  # Wait until selector appears
selector = driver.execute_script(
    "return document.querySelector('settings-ui')"
    ".shadowRoot.querySelector('settings-main')"
    ".shadowRoot.querySelector('settings-basic-page')"
    ".shadowRoot.querySelector('settings-section > settings-privacy-page')"
    ".shadowRoot.querySelector('settings-animated-pages > settings-subpage > media-picker')"
    ".shadowRoot.querySelector('#picker > #mediaPicker')"
    ".value = 'OBS-Camera4'"  # Change for your default camera
)

由于Selenium不支持与ShadowDOM元素交互,因此需要遍历每个Shadow根元素

相关问题 更多 >