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

2024-10-01 13:44:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用selenium在一个超链接上执行一个点击功能,这个超链接被加载到某个页面上。这个脚本适用于googlechrome,但不适用于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窗口来完成任务。不过,我不应该在后台使用tomphanjs来下载它。截图抓拍到了,它确实在正确的页面上,“下载”绝对在那里。所以

^{pr2}$

不是做它应该做的,或者它在点击,但是phantomjs不知道如何处理直接下载链接。请帮帮我,我已经在这里干了好几个小时了。在


Tags: fromimport功能脚本driverselenium页面phantomjs
1条回答
网友
1楼 · 发布于 2024-10-01 13:44:42

由于PhantomJS永远不会继续下载请求,所以我们需要手动下载该文件。在

这里的想法是单击“Convert”按钮,wait for the "Download" link to appearget the ^{} attribute,其中包含到生成的mp3文件的链接,然后通过^{}下载:

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

相关问题 更多 >