我正在尝试使用Selenium打开页面并转到Netflix并打开视频并播放。一旦我真正进入视频,我无法加载它,因为我收到错误:
缺少组件...请访问chrome:// components,找到WidevineCdm组件......
转到chrome:// components时,没有安装任何组件。如果我定期打开Chrome并像在Selenium中那样导航到视频,我可以播放它。当我在常规Chrome中使用chrome://组件时,其中有更多组件。我正在尝试找出如何导入我正常的Chrome设置,但我似乎无法弄明白。我尝试过使用ChromeOptions和DesiredCapabilities.CHROME,但我无法使用它。我也找不到DesiredCapabilities.CHROME字典中所有项目的文档。我希望一旦我能够将正常的Chrome设置添加到webdriver版本中,我就可以通过Selenium Chrome webdriver加载Netflix视频。
答案 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 *。
例如,在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
。你需要它,因为有一些隐藏的按钮,当你试图点击它们时会抛出异常。