Python 使用Selenium通过PhantomJS中的超链接下载文件

Python 使用Selenium通过PhantomJS中的超链接下载文件,python,selenium,selenium-webdriver,webdriver,phantomjs,Python,Selenium,Selenium Webdriver,Webdriver,Phantomjs,我使用selenium在超链接上执行单击功能,超链接加载到特定页面上。该脚本适用于google chrome,但不适用于phantomjs。为什么这不起作用 from selenium import webdriver driver = webdriver.Chrome() #driver = webdriver.PhantomJS(executable_path = "/Users/jameslemieux/PythonProjects/phantomjs-1.9.8-macosx/b

我使用selenium在超链接上执行单击功能,超链接加载到特定页面上。该脚本适用于google chrome,但不适用于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不知道如何处理直接下载链接。请帮帮我,我已经连续几个小时这么做了。

由于PhantomJS永远不会继续进行下载请求,我们需要手动下载文件

这里的想法是单击Convert按钮,其中包含指向生成的mp3文件的链接,然后通过以下方式下载:


PhantomJS不会触发下载。您必须使用XHR或其他直接url显式下载它,但有一个限制,它将在30秒后停止下载。@ArtjomB。很好,下载部分可以通过如下所示的urlretrieve进行处理。谢谢您的回答!但不幸的是,它对我不起作用。你用什么来代替“song.mp3”?当我运行您的上述代码时,我得到IOError:[Errno 13]权限被拒绝:'song.mp3'@user2565883可能是您没有写入目录的权限。尝试指定文件的绝对路径。这就解决了它!然而,现在如果我能找到一种方法将youtube视频的标题保存为.mp3,而不是“歌曲”…@user2565883,那么你可以让urlretrieve来做-只是根本不提供文件名。像urllib.urlretrieveurl?据我所知,它运行脚本,但不下载任何内容。我还尝试了urllib.urlretrieveurl,“C:\Users\user\u name\Downloads”我再次被拒绝了权限。
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