确定页面中的所有下载链接,然后下载所有文件

时间:2019-05-11 07:16:21

标签: python selenium selenium-chromedriver

我想下载站点中的所有文件。所有文件都有一个文本链接为“下载”的链接,单击该链接将下载每个文件。

每个文件的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()

由于文件数量并不总是相同,有人可以帮助我如何循环下载页面中的所有文件。

预先感谢

2 个答案:

答案 0 :(得分:1)

对于给定的代码,如果仅更改值为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标签的长度,也可以在代码内部定义一个范围。

答案 1 :(得分:0)

findElements()方法可用于获取列表中的所有文件链接。

List<WebElement> l=driver.findElements(By.linkText("Download"));
for(int i=0;i<l.size();i++)
{
l.get(i).click();
}

尝试使用此逻辑。