Определите все ссылки для скачивания на странице, затем загрузите все файлы - PullRequest
0 голосов
/ 11 мая 2019

Я хочу скачать все файлы на сайте. Все файлы имеют ссылку с текстом = "Скачать" и по нажатию на нее загружает каждый файл.

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 ]

1 голос
/ 11 мая 2019

Что касается заданного вами кода, если только изменяемое значение равно 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 динамически во время выполнения кода или определить диапазон внутри кода.

0 голосов
/ 11 мая 2019

Метод findElements () можно использовать для получения всех ссылок на файлы в списке.

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

Попробуйте использовать эту логику.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...