2015-06-22 2 views
1

Я пытаюсь использовать Selenium, чтобы открыть страницу и перейти в Netflix, открыть видео и играть. После того, как я на самом деле получить видео, я не могу загрузить его, потому что я получаю ошибку:Python - у Selenium Chrome webdriver нет таких компонентов, как WidevineCDM

недостающие компоненты ... Пожалуйста, посетите хром: // компоненты, найти компонент WidevineCdm ...

При переходе к хром: // компоненты, не установлены какие-либо компоненты. Если бы я регулярно открывал Chrome и переходил на видео, как в Selenium, я могу играть в него. Когда я попал в хром: // компоненты в обычном Chrome, там есть больше компонентов. Я пытаюсь выяснить, как импортировать мои обычные настройки Chrome, но я не могу понять, что это так. Я пробовал использовать ChromeOptions и DesiredCapabilities.CHROME, но я не мог заставить его работать. Я также не могу найти документацию по всем элементам в словаре DesiredCapabilities.CHROME. Надеюсь, что как только я смогу получить обычные настройки Chrome в версии webdriver, я смогу загружать видео Netflix через веб-ресивер Selenium Chrome.

+0

Это ответили здесь: http://stackoverflow.com/a/29970602/1559300 – ab77

+0

@Chainik, ответ, который вы связали, не является рабочим ответом. По крайней мере, не фрагмент питона. Он создает WebDriver, но WebDriver фактически не исключает флаг. Или что-то еще нужно сделать, потому что появляется такая же ошибка. Просто голова. – DuckPuncher

+0

Я отправлю точный рабочий код в качестве нового ответа. Если это не сработает для вас, вам нужно быть более конкретным, чтобы помочь определить причину. – ab77

ответ

1

следующие работы, по крайней мере, на 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/') 

Я не совсем уверен, почему этот ответ идет вниз обозначенные, потому что он точно отвечает на заданный вопрос.

0

Это не совсем полное решение, но я решил, что если вы используете пользовательский каталог по умолчанию Chrome и исключить переключатель disable-component-update, компонент будет загружен должным образом. Вы можете найти путь к каталогу пользователей по умолчанию для Chrome для разных платформ 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 будет добавлен в конец пути автоматически, так как вы можете видеть, я НЕ включаю Default в конце данных пользователя-dir, переданных в селен.

ОБНОВЛЕНИЕ 1: ОК. У меня есть [хакерское] решение, если вы хотите использовать настраиваемый пользовательский каталог. Исключая переключатель --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. Вам это нужно, потому что есть некоторые скрытые кнопки, которые генерируют исключение, когда вы пытаетесь щелкнуть их.

Смежные вопросы