使用 Selenium (Python) 抓取网页时如何更改 ChromeDriver 的默认摄像头?

How to change Default Camera of ChromeDriver when web scraping with Selenium (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 字典中可以更改的内容,但我不是很了解

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

您可以在启动脚本时转到 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 不支持与 Shadow DOM 元素交互,您需要遍历每个 shadow-root 元素。