2016-07-11 13 views
0

ソースタグからsrcリンクを収集してリストに追加するWebスクレーパーを開発しています。Python Selenium webdriverが要素を一貫して選択していません

サイトはdiv要素の負荷の下でネストされたビデオを持っていますが、すべてのページが最終的に来る:

<video type="video/mp4" poster="someimagelink" preload="metadata" crossorigin="anonymous"> 
    <source type="video/mp4" src="somemp4link"> 
</video> 

私の現在の方法は、へのリンクをページに行く、サイトにログインされます各ビデオページに1つずつ進み、ソースタグを見つけてそれをリストに追加しようとします。だから、最初のものは正常に動作します

[<source src="themp4link" type="video/mp4"></source>] 
[] 
[] 
[] 

は、すべての残りはちょうど何のソースタグがなかったかのように...ブラックリストを返しますが、mannually:

import time 
import requests 
from bs4 import BeautifulSoup 
from selenium import webdriver 

browser = webdriver.Firefox() 

# A bunch of log in and get list of video page links, which works fine 

soup = BeautifulSoup(browser.page_source) 
for i in range(3): 
    browser.get(soup('a', {'class', 'subject__item'})[i]['href']) 
    vsoup = BeautifulSoup(browser.page_source) 
    print(vsoup('source')) 
    browser.get('pageWithVideoPages') 

    # This doen't add to a list, it just goes to the video page, 
    # tries to find the source tag and print it out. 
    # Then go back to original page and start loop again. 

は、私はこれを取得何が起こっていますインスペクタをチェックすると、そこにソースタグがあることがわかります。

これを繰り返し、私は今取得:

[<source src="http://themp4link" type="video/mp4"></source>] 
[] 
[<source src="http://themp4link" type="video/mp4"></source>] 

(私はこれを行うにwebdriverをを使用している理由である)コンテンツをロードするために有効にサイトに必要なjavascriptの...とは何かかもしれませんそれ?

ご協力いただきありがとうございます。

+1

属性を取得する前に、その動画要素が読み込まれるのを待っていますか?希望の情報を取得して保存しているコードを表示してください。 –

+0

@BreaksSoftwareああそうです!vsoup = BeautifulSoup(browser.page_source) print(vsoup( 'source')) 'browser.get(スープ( 'a'、{'クラス'、 'subject__item'})[i] ['href'私が探しているものを取得するコードです... 'time.sleep(5)'を追加し、完璧に動作します!ありがとうございました! (あなたが答えとして繰り返すなら、私は答えとしてこれを受け入れるでしょう)...そのことに感謝します。 – TomHill

答えて

1

おそらく、探しているWeb要素を待つ必要があります。 WebDriverWaitを使用して探索する必要があります。

関連する問題