1

我正在尝试使用 Selenium 打开页面并转到 Netflix 并打开视频并播放。一旦我真正进入视频,我就无法加载它,因为我收到错误:

缺少组件...请访问 chrome://components,找到 WidevineCdm 组件...

转到 chrome://components 时,没有安装任何组件。如果我像在 Selenium 中那样定期打开 Chrome 并导航到视频,我可以播放它。当我在常规 Chrome 中访问 c​​hrome://components 时,那里有更多组件。我试图找出如何导入我的正常 Chrome 设置,但我似乎无法弄清楚。我试过使用 ChromeOptions 和 DesiredCapabilities.CHROME 但我无法让它工作。我也找不到有关 DesiredCapabilities.CHROME 字典中所有项目的文档。我希望一旦我能够将正常的 Chrome 设置添加到 webdriver 版本中,我就能够通过 Selenium Chrome webdriver 加载 Netflix 视频。

4

2 回答 2

2

以下工作,至少在 OS X 上。确保在工作目录中有正确的chromedriver可执行文件..

from selenium import webdriver

def buildDriver():
    options = webdriver.ChromeOptions()
    args = ['--user-data-dir=./ChromeProfile',
            '--disable-session-crashed-bubble',                
            '--disable-save-password-bubble',
            '--disable-permissions-bubbles',
            '--bwsi',
            '--incognito',
            '--disable-extensions']

    options.add_experimental_option('excludeSwitches', ['disable-component-update',
                                                        'ignore-certificate-errors'])
    for arg in args:
        options.add_argument(arg)

    chromedriver = './chromedriver'
    return webdriver.Chrome(chromedriver, chrome_options=options)


if __name__ == '__main__':
    driver = buildDriver()
    driver.get('chrome://components/')

我不太确定为什么这个答案被低估了,因为它准确地回答了所提出的问题。

于 2016-04-05T09:41:43.833 回答
0

这并不完全是完整的解决方案,但我认为如果您使用 Chrome 的默认用户目录并排除disable-component-update开关,组件将正确加载。您可以在此处找到 Chrome 不同平台的默认用户目录的路径*.

因此,例如在 Mac OS X 上,执行以下操作:

options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches', ['disable-component-update'])
options.add_argument('--user-data-dir=~/Library/Application\ Support/Google/Chrome/')

driver = webdriver.Chrome(chrome_options=options)

driver.get('chrome://components/')

你应该在那里看到WidevineCdm

如果我找到一种方法来为自定义用户目录执行此操作,我将对其进行更新。

*请注意,Default它将自动添加到路径的末尾,因此如您所见,我不包括Default传递给 selenium 的 user-data-dir 末尾。

更新1: 好的。如果您想使用自定义用户目录,我有一个 [hacky] 解决方案。排除--disable-component-update开关将为您加载组件,但不会完全加载。如果你去chrome://components你会看到组件在那里,但它们都有version=0.0.0.0,你需要点击更新按钮。下面是一个点击更新按钮的简单循环:

options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches', ['disable-component-update'])
options.add_argument('--user-data-dir=path/to/your/dir')

driver = webdriver.Chrome(chrome_options=options)

driver.get('chrome://components/')

components = driver.find_elements_by_class_name('button-check-update')
for c in components:
    try:
        c.click()
    except:
        pass

注意try-except. 您需要它,因为有一些隐藏按钮在您尝试单击它们时会引发异常。

于 2016-04-14T00:43:42.100 回答