繁体   English   中英

使用 selenium webdriver python 从网站(一堆文件)下载最新文件

[英]download the latest file from (bunch of files) a website using selenium webdriver python

我想从“https://mft.rrc.texas.gov/link/328a303b-8bf8-4c9d-9285-c8b25ce18fe0”下载最新文件。 通常最新文件的前缀为 (currentdate-1)。 此时为 05-23-2022.zip。 当我运行以下示例代码时:

from selenium.webdriver.common.keys import Keys
import time
from selenium.webdriver.firefox.options import Options

options = Options()
options.add_argument("--headless")
options.set_preference("browser.download.folderList", 2)
options.set_preference("browser.download.manager.showWhenStarting", False)
options.set_preference("browser.download.dir", "/a/b/c")
options.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/force-download")

driver = webdriver.Firefox(options=options)
driver.get('https://mft.rrc.texas.gov/link/328a303b-8bf8-4c9d-9285-c8b25ce18fe0')
elem = driver.find_element(by=By.XPATH, value="//a[text()='05-23-2022.zip']")

我只能下载第一页可用的文件(网页有分页,默认只能看到250个文件)。 我打算下载的文件不在前 250 个中。因此它会抛出如下错误:

selenium.common.exceptions.NoSuchElementException:消息:无法定位元素://a[text()='05-23-2022.zip']

1)这里的问题是网站有分页,如何下载没有放在第一页的文件? 2)如何从网页下载所有文件?

下载前只需点击last page按钮即可下载最后一个文件:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# initiate driver ...

try:
  # go to last page
  wait = WebDriverWait(driver, 10)
  last_page_btn = 
  wait.until(EC.visibility_of_element_located((By.CLASS_NAME, "ui-paginator-last")))
  last_page_btn.click()

  # do your stuff ...
finally:
  driver.quit()

要下载所有文件,您必须使用以下操作创建 for 循环:

  1. 获取文件列表:

     files_list = wait.until(EC.visibility_of_all_elements_located((By.CLASS_NAME, "ui-commandlink")))
  2. for file in files_list:并通过单击下载所有文件

  3. go 到下一页(请参阅代码如何将 go 到最后一页,但将 class 名称更改为ui-paginator-next

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM