我正在使用selenium对超链接执行单击功能,该超链接加载到某个页面上。该脚本适用于谷歌浏览器,但不适用于phantomjs。为什么这不起作用?
from selenium import webdriver
driver = webdriver.Chrome()
#driver = webdriver.PhantomJS(executable_path = "/Users/jameslemieux/PythonProjects/phantomjs-1.9.8-macosx/bin/phantomjs")
driver.get("http://www.youtube-mp3.org/?e=t_exp&r=true#v=hC-T0rC6m7I")
elem = driver.find_element_by_link_text('Download')
elem.click()
driver.save_screenshot('/Users/jameslemieux/Desktop/Misc./test_image.png')
driver.quit()
这适用于chrome,但它始终会打开一个新的Chrome窗口来完成任务。我读到我应该使用phantomjs让它在幕后运行,但是当我将驱动程序切换到phantomjs时,下载似乎没有通过。截图抓取,它确实在正确的页面上,并且'下载'肯定在那里。所以
elem.click()
没有做它应该做的事情,或者它正在点击,但是phantomjs不知道如何处理直接下载链接。请帮忙,我已经连续几个小时了。
答案 0 :(得分:4)
由于PhantomJS
永远不会继续下载请求,我们需要手动下载该文件。
这里的想法是点击"转换"按钮,wait for the "Download" link to appear,get the href
attribute,其中包含指向生成的mp3
文件的链接,并通过urllib.urlretrieve()
下载:
import urllib
from urlparse import urljoin
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
base_url = 'http://www.youtube-mp3.org/'
driver = webdriver.PhantomJS()
driver.get("http://www.youtube-mp3.org/?e=t_exp&r=true#v=hC-T0rC6m7I")
# convert the video to mp3
driver.find_element_by_id('submit').click()
# wait for download link to appear
element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.LINK_TEXT, "Download")))
link = element.get_attribute('href')
url = urljoin(base_url, link)
# download the song
urllib.urlretrieve(url, 'song.mp3')
driver.quit()
# enjoy the great song