首页 > 解决方案 > 确定页面中的所有下载链接,然后下载所有文件

问题描述

我想下载站点中的所有文件。所有文件都有一个带有文本=“下载”的链接,点击它会下载每个文件。

每个文件的html是这样的:

<a abc-id="0" href="#" class="todown" nc="0">Download</a>

在每个文件的 XPath 中,唯一改变的值是tr这样的数字:

    //*[@id='dwn']/div/table[1]/tbody[1]/tr[1]/td[3]/a
    //*[@id='dwn']/div/table[1]/tbody[1]/tr[2]/td[3]/a
    .
    .
    .
    //*[@id='dwn']/div/table[1]/tbody[1]/tr[100]/td[3]/a        

我当前的代码在下面,但我有几个time.sleep()...click()命令,每个文件一个:

import time
from selenium import webdriver

driver = webdriver.Chrome("C:\webdrivers\chromedriver.exe")

driver.get ("http://www.examplesite.com/")
time.sleep(3)
driver.find_element_by_xpath("//*[@id='dwn']/div/table[1]/tbody[1]/tr[1]/td[3]/a").click()
time.sleep(3)
driver.find_element_by_xpath("//*[@id='dwn']/div/table[1]/tbody[1]/tr[2]/td[3]/a").click()
.
.
.
time.sleep(3)
driver.find_element_by_xpath("//*[@id='dwn']/div/table[1]/tbody[1]/tr[100]/td[3]/a").click()

可能有人帮助我如何使用一种循环下载页面中的所有文件,因为文件的数量并不总是相同的。

提前致谢

标签: pythonseleniumselenium-chromedriver

解决方案


对于您给定的代码,如果仅更改值是 TR,那么您可以通过增加其循环计数器值来循环所有 TR 标记。

from time import sleep
from selenium import webdriver

driver = webdriver.Chrome("C:\webdrivers\chromedriver.exe")

driver.get ("http://www.examplesite.com/")
time.sleep(3)
length_of_tr = 100
for i in range(1,length_of_tr):
    driver.find_element_by_xpath("//*[@id='dwn']/div/table[1]/tbody[1]/tr["+str(i)+"]/td[3]/a").click()
    sleep(3)

您可以决定如何定义 tr 的长度。您可以在运行代码时动态获取 tr 标签的长度,也可以在代码内定义一个范围。


推荐阅读