我在使用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)
感谢您的帮助!
答案 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]