Python 3.x 尝试从同一下拉菜单下载多个文件-Python Selenium Chromedriver

Python 3.x 尝试从同一下拉菜单下载多个文件-Python Selenium Chromedriver,python-3.x,selenium,selenium-webdriver,selenium-chromedriver,Python 3.x,Selenium,Selenium Webdriver,Selenium Chromedriver,我在尝试使用Selenium Chromedriver从网站上的同一下拉菜单下载两个单独的文件时遇到问题 我有代码点击两个链接,但它只承认第一个链接;未下载第二个文件。我知道当我不使用webdriver时,我可以同时进行多个下载,所以问题可能是chromedriver一次只允许一个下载?我不确定。我曾尝试在电子表格和shapefile单击之间添加一个隐式等待,但最终使代码只下载shapefile而不下载电子表格。这是我的密码 from selenium import webdriver ###

我在尝试使用Selenium Chromedriver从网站上的同一下拉菜单下载两个单独的文件时遇到问题

我有代码点击两个链接,但它只承认第一个链接;未下载第二个文件。我知道当我不使用webdriver时,我可以同时进行多个下载,所以问题可能是chromedriver一次只允许一个下载?我不确定。我曾尝试在电子表格和shapefile单击之间添加一个隐式等待,但最终使代码只下载shapefile而不下载电子表格。这是我的密码

from selenium import webdriver

### Assign chrome driver path and setup driver ###
chromedriver = r"C:\Users\johns\Documents\chromedriver"
driver = webdriver.Chrome(chromedriver)

### Open Chrome and go to webpage for file ###
driver.get("http://data-ocpagis.opendata.arcgis.com/datasets/osceolataxparcels09012020?geometry=-82.957%2C27.570%2C-79.562%2C28.419")
### Wait because ARCGISOL webpages take a little to fully load ###
driver.implicitly_wait(5)

### Click Download dropdown button ###
DownloadButton = driver.find_element_by_xpath("""//*[@id="ember64"]/button""")
DownloadButton.click()

### Click link for csv download ###
CSVLink = driver.find_element_by_id("ember66")
CSVLink.click()

### Click link for shapefile download ###
ShapefileLink = driver.find_element_by_id("ember68")
ShapefileLink.click()

使用此代码,单击CSV文件按钮并下载文件,但之后不会发生任何事情。我需要这些代码来单击并从下拉菜单下载电子表格和形状文件。

尝试在下载之间刷新页面:

driver.refresh();

尝试在两次下载之间刷新页面:

driver.refresh();

另一种方法是使用一个库(如BeautifulSoup)从HTML中提取下载链接

访问网站后,您可以获取页面源代码,并从中创建一个汤。然后我们可以搜索下载项目并获取URL

from bs4 import BeautifulSoup
from requests import get

req = get('http://data-ocpagis.opendata.arcgis.com/datasets/osceolataxparcels09012020?geometry=-82.957%2C27.570%2C-79.562%2C28.419&selectedAttribute=AREA')
soup = BeautifulSoup(str(req.content), 'html.parser')
files = soup.find_all('a', class_='download-item')

for file in files:
    print(file['href'])

另一种方法是使用一个库(如BeautifulSoup)从HTML中提取下载链接

访问网站后,您可以获取页面源代码,并从中创建一个汤。然后我们可以搜索下载项目并获取URL

from bs4 import BeautifulSoup
from requests import get

req = get('http://data-ocpagis.opendata.arcgis.com/datasets/osceolataxparcels09012020?geometry=-82.957%2C27.570%2C-79.562%2C28.419&selectedAttribute=AREA')
soup = BeautifulSoup(str(req.content), 'html.parser')
files = soup.find_all('a', class_='download-item')

for file in files:
    print(file['href'])

这很有效,非常感谢!在第二次下载之前,我只需重新插入下拉按钮,它就像一个魔咒!一个问题:我必须为11个不同的网站写这个脚本,有些网站我必须下载10+个文件。要下载多个文件,是否需要始终刷新并重新单击我的下拉按钮?这似乎是一个多一点的工作比必要的,但我还是非常新的硒。嗯,我想这就是你的网站的工作方式。也许你可以和你的开发人员谈谈(如果你使用selenium来自动化测试——这只是我的假设),他们可以改变你页面的工作方式。我实际上只是使用selenium从多个不同的县房地产估价师网站收集数据,而不是出于任何测试目的。但我相信我能找到使过程顺利进行的最佳方法。我已经接受了你的答案,再次感谢你!这很有效,非常感谢!在第二次下载之前,我只需重新插入下拉按钮,它就像一个魔咒!一个问题:我必须为11个不同的网站写这个脚本,有些网站我必须下载10+个文件。要下载多个文件,是否需要始终刷新并重新单击我的下拉按钮?这似乎是一个多一点的工作比必要的,但我还是非常新的硒。嗯,我想这就是你的网站的工作方式。也许你可以和你的开发人员谈谈(如果你使用selenium来自动化测试——这只是我的假设),他们可以改变你页面的工作方式。我实际上只是使用selenium从多个不同的县房地产估价师网站收集数据,而不是出于任何测试目的。但我相信我能找到使过程顺利进行的最佳方法。我已经接受了你的答案,再次感谢你!我以前没用过漂亮的汤,但它看起来确实很有用。我知道selenium的正常用途是网页测试,但我只是用它从我需要的网站上刮取不同的文件。你会推荐用靓汤代替硒吗?@ParkerJohnson如果你只是在刮,靓汤可能很适合你。它不需要为浏览器安装web驱动程序。我绝对推荐beautifulsoup。Selenium是一个很好的工具,但是对于较小的工作来说,只要使用html解析器,就可以更轻松、更高效地完成刮削。我以前没有使用过beautiful soup,但它看起来确实很有用。我知道selenium的正常用途是网页测试,但我只是用它从我需要的网站上刮取不同的文件。你会推荐用靓汤代替硒吗?@ParkerJohnson如果你只是在刮,靓汤可能很适合你。它不需要为浏览器安装web驱动程序。我绝对推荐beautifulsoup。Selenium是一个很好的工具,但对于较小的工作,只要使用html解析器,就可以更轻松、更高效地完成刮取。