当前位置: 首页 > 面试题库 >

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

狄兴业
2023-03-14
问题内容

我正在使用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永远不会有一个下载请求进行 ,我们需要手动下载的文件。

这里的想法是单击“转换”按钮,等待“下载”链接出现,获取href属性,其中包含指向所生成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


 类似资料:
  • 问题内容: 这是我的情况:我必须登录到一个网站并从那里下载CSV,而从linux服务器无头。该页面使用JS,没有它就无法工作。 经过一些研究,我选择了Selenium和PhantomJS。登录,设置CSV参数并使用Selenium / PhantomJS / Py3查找下载按钮没有问题,实际上令人称奇。 但是单击下载按钮没有任何作用。经过一番研究,我发现PhantomJS似乎不支持下载对话框和下载

  • 本文向大家介绍nodejs通过phantomjs实现下载网页,包括了nodejs通过phantomjs实现下载网页的使用技巧和注意事项,需要的朋友参考一下 功能其实很见简单,通过 phantomjs.exe 采集 url 加载的资源,通过子进程的方式,启动nodejs 加载所有的资源,对于css的资源,匹配css内容,下载里面的url资源 当然功能还是很简单的,在响应式设计和异步加载的情况下,还是

  • 我在尝试使用Selenium WebDriver单击超链接时遇到了一个问题。我尝试使用CssSelector和XPath,但似乎都不起作用。我想做的就是点击谷歌文本。

  • 本文向大家介绍通过超链接怎样传递中文参数?相关面试题,主要包含被问及通过超链接怎样传递中文参数?时的应答技巧和注意事项,需要的朋友参考一下 答:用URL编码,通过QueryString传递,用urlencode编码 用urldecode解码

  • 问题内容: 我有一个生成CSV文件并将其通过http / ajax get返回到页面的服务。我希望用户单击按钮,调用服务,然后将文件下载到用户的浏览器。 我想使用Angular Way,尽管我认识到这可能与Ajax或浏览器的关系要比Anguler本身更多。 该服务在C#中,它返回的内容是: 调用该服务的控制器代码如下所示。它有效,但是我不知道如何成功: 问题答案: 您无法从常规的ajax GET或

  • 在我实现了一个Android应用程序的解决方案后,发布到web服务器并验证Google Order,然后发布一个下载链接。现在,我正在尝试编写一个应用程序的代码,以读取thankyou.php页面中的链接 该文件是一个“.dat”扩展名,来自某个链接。应用程序应该检索一个新页面中的链接,并让客户下载文件。