2016-07-11 3 views
0

Ich entwickle einen Web-Scraper, um die SRC-Link von einem Quell-Tag in einer HTML-Datei zu sammeln und zu einer Liste hinzuzufügen.Python selen webdriver nicht konsistent Element auswählen, obwohl es da ist

Die Seite hat ein Video unter einer Last von div-Tags verschachtelt, aber alle Seiten schließlich kommen:

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

Meine aktuelle Methode wird in die Website angemeldet haben, mit den Links zu den auf die Seite gehen Videoseiten, gehen Sie nacheinander zu den einzelnen Videoseiten und versuchen Sie, das Quell-Tag zu finden und es der Liste hinzuzufügen.

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. 

Was aber passiert ist, ich diese:

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

So die erste funktioniert gut, dann den ganzen Rest nur schwarze Listen zurückkehren ... als ob es kein Quell-Tag war, aber mannually Überprüfen des Inspektors zeigt, dass dort ein Quell-Tag ist.

diese Wiederholung, bekomme ich jetzt:

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

Die Seite Javascript erforderlich aktiviert den Inhalt laden (weshalb ich WebDriver bin mit, dies zu tun) ... könnte es etwas sein, mit dem zu tun Das?

Jede Hilfe wird sehr geschätzt!

+1

warten Sie darauf, dass das Videoelement geladen wird, bevor Sie versuchen, das Attribut zu erfassen? Bitte zeigen Sie uns den Code, der die gewünschten Informationen erfasst und speichert. –

+0

@BreaksSoftware Ah ja das ist es! 'browser.get (suppe ('a', {'klasse', 'subject__item'}) [i] ['href']) vsoup = BeautifulSoup (browser.page_source) drucken (vsoup ('source'))' ist der Code, der bekommt, wonach ich suche ... hinzugefügt 'time.sleep (5)' und funktioniert perfekt! Vielen Dank! (Wenn du es als Antwort wiederholst, akzeptiere ich das als Antwort) ... danke dafür. – TomHill

Antwort

1

Sie müssen wahrscheinlich auf das Web-Element warten, das Sie suchen. Sie sollten mit WebDriverWait erkunden.

Verwandte Themen