我正在使用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将 永远不会有一个下载请求进行 ,我们需要手动下载的文件。
PhantomJS
这里的想法是单击“转换”按钮,等待“下载”链接出现,获取href属性,其中包含指向所生成mp3文件的链接,然后通过urllib.urlretrieve()以下链接下载:
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