当前位置: 代码迷 >> python >> 使用Selenium / Chrome和Python下载多个csv文件
  详细解决方案

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

热度:70   发布时间:2023-07-14 08:59:01.0

我在使用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)

谢谢你的帮助!

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

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

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


附带说明一下,也许从浏览器中获取下载链接(可能与cookie一起),并在没有浏览器的情况下单独下载它们会更加可靠(使用Selenium进行下载时,很多事情都会出错,变量太多)。

抱歉,但是我看不到任何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]
  相关解决方案