我是一名菜鸟程序员,并且正在自学一些网络爬虫。我正在尝试制作一个Python程序,该程序通过用硒抓取网页来从嵌入式播放器返回直接视频下载URL。
因此,这是该网页的相关html:
<video class="vjs_tech" id="olvideo_html5_api" crossorigin="anonymous"></video>
<button class="vjs-big-play-button" type="button" aria-live="polite" title="Play Video" aria-disabled="false"><span class="vjs-control-text">Play Video</span></button>
视频元素最初没有src属性。但是,当我单击浏览器上的以上按钮时,该页面似乎运行了一些JavaScript,并且video元素获得了src属性。我想将此src属性的内容打印到监视器。所以这就是我在python中复制此过程的方式:
#Clicking the Button
playbutton = driver.find_element_by_tag_name('button')
playbutton.send_keys(Keys.RETURN)
#Selecting the Video Element
wait = WebDriverWait(driver, 5)
video = wait.until(EC.visibility_of_element_located((By.TAG_NAME, 'video')))
#Printing the details of the Video Element
print "Class: ", video.get_attribute("class")
print "ID: ", video.get_attribute("id")
print "SRC: ", video.get_attribute("src")
输出看起来像这样:
Class: vjs_tech
ID: olvideo_html5_api
SRC:
如您所见,我可以准确地获取'class'和'id'信息,但'src'标记始终返回空。但是,如果我使用Chrome打开网站并手动单击按钮,则可以看到src字段已按预期填充。
我在做什么错?如何使src属性显示在输出中?
(我在Python27上将Selenium与ChromeDriver结合使用。)
答案 0 :(得分:0)
我猜您在单击“按钮”和src后需要一些时间(可能是毫秒)出现在视频元素中。由于视频元素始终存在,因此webdriver将获得其当前状态(即no src)。隐式/显式等待在这里无济于事,在这种情况下,您将需要使用time.sleep
import time
#Clicking the Button
playbutton = driver.find_element_by_tag_name('button')
playbutton.send_keys(Keys.RETURN)
time.sleep(5) #<<<<<<<<<<<<<<<to add 5 sec sleep, you can adjust this
#Selecting the Video Element
video = driver.find_element_by_tag_name('video')
#Printing the details of the Video Element
print "Class: ", video.get_attribute("class")
print "ID: ", video.get_attribute("id")
print "SRC: ", video.get_attribute("src")