我的目的是从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文件。在
代码运行到最后没有错误,但它没有下载。 {/strong手动下载文件时,
我的代码和工作用户名和密码被使用。使用真实用户名和密码以便更容易理解问题。在
#!/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片段:
^{pr2}$请注意,当我复制代码段时会显示amp;amp。它对视图源代码是隐藏的,所以我想它是用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()
我看不出你的代码块有什么大的缺点。但以下是通过此解决方案和执行此自动测试脚本的一些建议:
JavaScript
&;Ajax Calls
都在发挥作用,处理这些超出了这个问题的范围。在wait
以正确呈现。在FirefoxProfile
中设置更多的首选项,如下面我的代码所述。在browser.maximize_window()
最大化浏览器窗口browser.quit()
,则不需要使用browser.close()
time.sleep()
替换为ImplicitlyWait
或{下面是您自己的代码块,其中包含一些简单的调整:
如果这回答了你的问题,请告诉我。在
我重写了你的剧本,并用评论解释了我为什么要做出改变。我认为你的主要问题可能是一个糟糕的mimetype,然而,你的脚本有一个系统性问题的日志,最多也会使它不可靠。此重写使用显式等待,这完全消除了使用
time.sleep()
的需要,使其尽可能快地运行,同时也消除了网络拥塞引起的错误。在您需要执行以下操作以确保安装了所有模块:
pip install requests explicit selenium retry pyvirtualdisplay
剧本:
完全公开:我维护显式模块。它的目的是使使用显式等待变得更容易,就像这样的情况下,网站缓慢地加载基于用户交互的动态内容。您可以将上面所有的
waiter.XXX
调用替换为直接显式等待。在把它从硒的范围之外拿出来。更改首选项设置,以便在单击链接时(首先检查链接是否有效)会弹出一个请求保存的弹出窗口,现在使用sikulihttp://www.sikuli.org/单击弹出窗口。 Mime类型并不总是有效的,也没有黑与白的答案来解释它为什么不工作。在
相关问题 更多 >
编程相关推荐