2016-07-11 4 views
0

Я разрабатываю веб-скребок для сбора ссылки src из исходного тега в html-файле и добавляю его в список.Python selenium webdriver не всегда выбирает элемент, хотя он есть

На сайте есть видео вложенной под нагрузкой дивы, но все страницы в конечном итоге прийти к:

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

Мой текущий метод входа на сайт, перейдя на страницу со ссылками к видео, каждый раз на каждую страницу видео, пытаясь найти исходный тег и добавив его в список.

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="themp4link" type="video/mp4"></source>] 
[] 
[] 
[] 

Так первый из них работает хорошо, то все остальное просто возвращает черные списки ... как будто не было никакого источника тегов, но ручное ее закрытие проверка инспектора показывает, что там есть тег источника.

Повторяя это, я теперь получаю:

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

Сайт требуется JavaScript включен для загрузки контента (именно поэтому я использую WebDriver, чтобы сделать это) ... это может быть что-то делать с что?

Любая помощь очень ценится!

+1

Вы ждете, чтобы этот элемент видео загружался, прежде чем пытаться захватить атрибут? Пожалуйста, покажите нам код, который захватывает нужную информацию и сохраняет ее. –

+0

@BreaksSoftware Ах да, это все! 'browser.get (soup ('a', {'class', 'subject__item'}) [i] ['href']) vsoup = BeautifulSoup (browser.page_source) print (vsoup ('source'))' это код, который получает то, что я ищу ... добавил 'time.sleep (5)' и отлично работает! Спасибо! (Если вы повторите в ответ, я соглашусь на это как на ответ) ... спасибо за это. – TomHill

ответ

1

Возможно, вам нужно подождать веб-элемента, который вы ищете. Вам следует исследовать с помощью WebDriverWait.

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