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

Python 确定页面中的所有下载链接,然后下载所有文件,python,selenium,selenium-chromedriver,Python,Selenium,Selenium Chromedriver,我想下载网站中的所有文件。所有文件都有一个带有text=“Download”的链接,单击该链接可下载每个文件 每个文件的html如下所示: <a abc-id="0" href="#" class="todown" nc="0">Download</a> //*[@id='dwn']/div/table[1]/tbody[1]/tr[1]/td[3]/a //*[@id='dwn']/div/table[1]/tbody[1]/tr[2]/td[3]/a

我想下载网站中的所有文件。所有文件都有一个带有text=“Download”的链接,单击该链接可下载每个文件

每个文件的html如下所示:

<a abc-id="0" href="#" class="todown" nc="0">Download</a>
    //*[@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()
也许有人能帮我下载一个循环页面中的所有文件,因为文件的数量并不总是相同的


提前感谢您提供的代码,如果只有更改的值是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标记的长度,也可以在代码中定义范围。

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

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

for(inti=0;我不使用纯粹的例外,并使用time.sleep()这是一种不好的做法。@CoreyGoldberg Hi corey,脚本加载主页,然后单击一个链接并转到同一网站的另一个页面,需要几秒钟才能完全打开另一个页面。在这第二个页面中,下载每个文件需要一些时间,如果我不使用time.sleep()它不起作用。什么可以代替时间。sleep()?@surajitmira谢谢你的回答,它似乎起作用,但主要问题是如何知道有多少链接。在我的示例中是100个,但这可能会改变。你能试试这个吗?driver.find_elements_by_xpath(“/*[@id='dwn']/div/table[1]/tbody[1]/tr”)将为您提供tr列表。从中您将获得可用元素的长度。然后将该长度用作\u tr值的长度。非常感谢。它工作得很好。现在我有另一个问题,我需要打开其他问题。这不是pythonuse WebDriverWait,而是thread.sleep()