问题描述
我在使用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)
谢谢你的帮助!
1楼
这个exportCsv听起来像RPC,需要花费一些时间来执行。 这只是一个理论,但可能值得一试。
背景知识:点击链接后,就会发送请求。 如果在任何形式的响应到达第一个请求之前单击另一个链接,则第一个请求将被取消。 这里似乎发生的事情是,您单击得如此之快,以至于您取消了前三个请求,只有最后一个请求通过了(我想可能要花一两秒钟才能真正得到响应)。
单击后,尝试等待下载开始。 (我认为没有WebDriver方法,但是例如您可以观察“下载”文件夹中的文件数量),或者单击两次之间仅睡5秒钟,这是一项快速而肮脏的测试。
附带说明一下,也许从浏览器中获取下载链接(可能与cookie一起),并在没有浏览器的情况下单独下载它们会更加可靠(使用Selenium进行下载时,很多事情都会出错,变量太多)。
2楼
抱歉,但是我看不到任何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]