1

Selenium を使用してページを開いて Netflix に移動し、ビデオを開いて再生しようとしています。実際にビデオにアクセスすると、次のエラーが表示されるため、ロードできません。

コンポーネントがありません... chrome://components にアクセスして、WidevineCdm コンポーネントを見つけてください...

chrome://components に移動すると、コンポーネントがインストールされていません。Chrome を定期的に開いて、Selenium で行ったようにビデオに移動していれば、再生できます。通常の Chrome で chrome://components にアクセスすると、そこにはさらに多くのコンポーネントがあります。通常の Chrome 設定をインポートする方法を見つけようとしていますが、それを理解できないようです。ChromeOptions と DesiredCapabilities.CHROME を使用してみましたが、動作しませんでした。また、DesiredCapabilities.CHROME ディクショナリ内のすべての項目に関するドキュメントも見つかりません。通常の Chrome 設定を Web ドライバー バージョンに取り込めるようになったら、Selenium Chrome Web ドライバーを介して 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のとおり、セレンに渡されるユーザーデータディレクトリの最後には含めていません。

更新 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。クリックしようとすると例外をスローする隠しボタンがいくつかあるため、必要です。

于 2016-04-14T00:43:42.100 に答える