2017-06-20 5 views
0

下記のYouTubeビデオからトランスクリプトを取得したいと思います(使用できる場合はccキャプションを取得する方法がありますが、しばしばそうではありません)。Pythonのphantomjsで動的に読み込まれたメニューをクリックする

私はphantomjsを使ってこれをPythonで行います。

url = 'https://www.youtube.com/watch?v=wOn8xawC-HQ' 

phantom_driver = webdriver.PhantomJS(executable_path="./phantomjs-2.1.1- macosx/bin/phantomjs") 

phantom_driver.get(url) 

転写物は唯一私がアクセスできる「もっと...」ボタンをクリックした後に表示されます。これは、A含む化合物クラス"yt-uix-menu-content yt-ui-menu-content yt-uix-kbd-nav yt-uix-menu-content-hidden"divを作成します...

phantom_driver.find_element_by_id('action-panel-overflow-button').click() 

メニューには、4つの要素からなる<ul>が含まれています。

これらの4つの要素のいずれかをクリックして転写ボックスを開く必要があります(具体的には、化合物クラス"yt-ui-menu-item has-icon yt-uix-menu-close-on-select action-panel-trigger action-panel-trigger-transcript"のボタンをクリックする必要があります)。要素は、(Element is not currently visible and may not be manipulated)まだ隠されているようだので、

しかし、

phantom_driver.find_element_by_class_name('action-panel-trigger-transcript').click() 

を実行することはできません。

「もっと...」ボタンをクリックして、開いているメニューを直接クリックする必要があると思います。

選択したmenuesでthis post、そしてクリック後にhtmlを使用するとthis oneと表示されました。どちらも私の問題を解決しませんでした。

スクリプトには何が欠けていますか?クリック後に取得したhtmlを「更新」する必要はありますか?

答えて

0

"action-panel-overflow-button"はボタンIDではない名前です。 あなたはそれのXPathで

を、この要素をクリックすることができ、これは正常に動作します:

phantom_driver.find_element_by_xpath('//*[@id="action-panel-overflow-button"]').click() 
phantom_driver.find_element_by_xpath('//*[@class="yt-ui-menu-item has-icon yt-uix-menu-close-on-select action-panel-trigger action-panel-trigger-transcript"]').click() 
関連する問題