【发布时间】:2017-10-19 16:48:40
【问题描述】:
我的目的是从https://www.shareinvestor.com/prices/price_download_zip_file.zip?type=history_all&market=bursa
下载一个 zip 文件
这是此网页中的链接https://www.shareinvestor.com/prices/price_download.html#/?type=price_download_all_stocks_bursa。然后保存到这个目录"/home/vinvin/shKLSE/(我用的是pythonaywhere)。然后解压,csv文件解压到目录中。
代码运行到最后没有错误,但没有下载。 当手动点击https://www.shareinvestor.com/prices/price_download_zip_file.zip?type=history_all&market=bursa 时,会自动下载 zip 文件。
我的代码使用了有效的用户名和密码。使用真实的用户名和密码,以便更容易理解问题。
#!/usr/bin/python
print "hello from python 2"
import urllib2
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
from pyvirtualdisplay import Display
import requests, zipfile, os
display = Display(visible=0, size=(800, 600))
display.start()
profile = webdriver.FirefoxProfile()
profile.set_preference('browser.download.folderList', 2)
profile.set_preference('browser.download.manager.showWhenStarting', False)
profile.set_preference('browser.download.dir', "/home/vinvin/shKLSE/")
profile.set_preference('browser.helperApps.neverAsk.saveToDisk', '/zip')
for retry in range(5):
try:
browser = webdriver.Firefox(profile)
print "firefox"
break
except:
time.sleep(3)
time.sleep(1)
browser.get("https://www.shareinvestor.com/my")
time.sleep(10)
login_main = browser.find_element_by_xpath("//*[@href='/user/login.html']").click()
print browser.current_url
username = browser.find_element_by_id("sic_login_header_username")
password = browser.find_element_by_id("sic_login_header_password")
print "find id done"
username.send_keys("bkcollection")
password.send_keys("123456")
print "log in done"
login_attempt = browser.find_element_by_xpath("//*[@type='submit']")
login_attempt.submit()
browser.get("https://www.shareinvestor.com/prices/price_download.html#/?type=price_download_all_stocks_bursa")
print browser.current_url
time.sleep(20)
dl = browser.find_element_by_xpath("//*[@href='/prices/price_download_zip_file.zip?type=history_all&market=bursa']").click()
time.sleep(30)
browser.close()
browser.quit()
display.stop()
zip_ref = zipfile.ZipFile(/home/vinvin/sh/KLSE, 'r')
zip_ref.extractall(/home/vinvin/sh/KLSE)
zip_ref.close()
os.remove(zip_ref)
HTML sn-p:
<li><a href="/prices/price_download_zip_file.zip?type=history_all&market=bursa">All Historical Data</a> <span>About 220 MB</span></li>
请注意,当我复制 sn-p 时会显示 &。它是从视图源中隐藏的,所以我猜它是用 JavaScript 编写的。
我发现的观察
即使我运行代码没有错误,目录
home/vinvin/shKLSE也没有创建我尝试下载一个小得多的 zip 文件,它可以在一秒钟内完成,但在等待 30 秒后仍然无法下载。
dl = browser.find_element_by_xpath("//*[@href='/prices/price_download_zip_file.zip?type=history_daily&date=20170519&market=bursa']").click()
【问题讨论】:
-
想知道您是否可以接受 Windows 平台上的解决方案?谢谢
-
@Dev 可以接受。只要它能够始终如一地工作。
-
观察到您在代码中使用了
folderList、showWhenStarting、download.dir和neverAsk.saveToDisk,但您在描述中没有提到它们。您对这些功能有什么要求吗?谢谢 -
没有,只要下载到zip目录下解压即可。
标签: javascript python selenium