我想下载站点中的所有文件。所有文件都有一个文本链接为“下载”的链接,单击该链接将下载每个文件。
每个文件的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()
由于文件数量并不总是相同,有人可以帮助我如何循环下载页面中的所有文件。
预先感谢
答案 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();
}
尝试使用此逻辑。