使用Selenium / Chrome和Python下载多个csv文件

时间:2018-09-17 14:35:40

标签: python csv selenium selenium-chromedriver

我在使用Selenium和Python使用Chrome下载多个文件时遇到问题。我执行以下循环,但仅在我的下载文件夹(使用Mac)中找到“单击”的最后一个文件:

for x in range(4): 
    driver.execute_script("arguments[0].click()",sub_elements[x])  
    print(sub_elements[x].get_attribute('innerText').strip())

    element = WebDriverWait(driver, 3).until(
            EC.text_to_be_present_in_element((By.ID, 'selectedMonth'), 
    sub_elements[x].get_attribute('innerText').strip() ))                                           

    driver.find_element_by_id("exportCsv").click() #

在谷歌搜索之后,我尝试按以下方式更改浏览器选项,但是它不起作用:

from selenium.webdriver.chrome.options import Options

chrome_options = Options()
prefs = {'profile.default_content_setting_values.automatic_downloads': 1}
chrome_options.add_experimental_option("prefs",prefs)
driver = webdriver.Chrome(chrome_options=chrome_options)

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

此exportCsv听起来像RPC,需要花费一些时间来执行。这只是一个理论,但可能值得一试。

背景知识:单击链接后,将发送一个请求。如果在任何形式的响应到达第一个请求之前单击另一个链接,则第一个请求将被取消。似乎发生的是,您单击得如此之快,以至于您取消了前三个请求,只有最后一个请求通过了(我想可能要花一两秒钟才能真正得到响应)。

单击后,尝试等待下载开始。 (我不认为可以使用WebDriver方法,但是例如,您可以观察“下载”文件夹中的文件数量),或者两次单击之间仅睡5秒钟,作为一种快速而肮脏的测试。


作为一个旁注,也许从浏览器中获取下载链接(可能与cookie一起),然后在没有浏览器的情况下单独下载它们会更可靠(使用Selenium进行下载可能会出错,变量太多) )。

答案 1 :(得分:0)

对不起,但是我看不到任何URL或与您的问题有关的任何东西...除非您要从桌面上的文件夹中合并多个CSV。如果是这样,我可以为您提供一些解决方案...但是您似乎正在通过网络进行操作...无论如何,请查看此解决方案。希望这能使您朝正确的方向前进,但是...我不能告诉您您在做什么...

ad <- read.csv("http://www-bcf.usc.edu/~gareth/ISL/Advertising.csv")
head(ad)

这是从URL引用多个PDF文件并下载每个文件的一种方法。

library(XML)
library(RCurl)

url <- "https://www.bot.or.th/English/MonetaryPolicy/Northern/EconomicReport/Pages/Releass_Economic_north.aspx"
page   <- getURL(url)
parsed <- htmlParse(page)
links  <- xpathSApply(parsed, path="//a", xmlGetAttr, "href")
inds   <- grep("*.pdf", links)
links  <- links[inds]