Python - Selenium Chrome webdriver没有像WidevineCDM这样的组件

时间:2015-06-22 22:31:42

标签: python selenium chrome-web-driver

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

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

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

2 个答案:

答案 0 :(得分: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/')

我不太清楚为什么这个答案会被标记下来,因为它正好回答了问题。

答案 1 :(得分:0)

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

中找到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会自动添加到路径末尾,因此您可以看到,我在传递给selenium的user-data-dir末尾不包括Default

更新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。你需要它,因为有一些隐藏的按钮,当你试图点击它们时会抛出异常。