Python вложено для л oop селена - PullRequest
0 голосов
/ 24 марта 2020

Я создаю два цикла for (один вложенный в другой).

Мой код выглядит следующим образом:

try:
    a = browser.find_elements_by_class_name("node")
    for links in a:
        links.click()
        for id in range(2, 41):
            my_id = "stree{}".format(id)
            browser.find_element_by_id(my_id).click()
            browser.find_element_by_xpath('/html/body/center[2]/form/table[1]/tbody/tr/td[3]/table/tbody/tr[5]/td[1]/a[1]/img').click()
            browser.find_element_by_xpath('/html/body/center[2]/form/table[2]/tbody/tr/td[4]/input').click()
            browser.find_element_by_xpath('/html/body/center/form/table[2]/tbody/tr/td[5]/a').click()
            sleep(5)
            # browser.execute_script("window.history.go(-1)")
except:
    a = browser.find_elements_by_class_name("node")
    for links in a:
        links.click()
        for id in range(2, 41):
            my_id = "stree{}".format(id)
            browser.find_element_by_id(my_id).click()
            browser.find_element_by_xpath('/html/body/center[2]/form/table[1]/tbody/tr/td[3]/table/tbody/tr[5]/td[1]/a[1]/img').click()
            browser.find_element_by_xpath('/html/body/center[2]/form/table[2]/tbody/tr/td[4]/input').click()
            browser.find_element_by_xpath('/html/body/center/form/table[2]/tbody/tr/td[5]/a').click()
            sleep(5)
            # browser.execute_script("window.history.go(-1)")

Что делает код: он проходит через два цикла for и затем переходит на новую страницу, где нажимает на что-то. Затем я хочу, чтобы браузер go вернулся к go через циклы for. Проблема в том, что поскольку внешний l oop должен быть выполнен первым, прежде чем второй l oop может быть выполнен, я сталкиваюсь с некоторой проблемой при возвращении.

Два важных вопроса: 1. Нужно ли сообщать моему браузеру go назад? 2. Как я могу сначала выполнить внешний код, а затем код внутри?

Страница выглядит следующим образом: введите описание изображения здесь

html для внешнего l oop выглядит так: введите описание изображения здесь

html для внутреннего l oop (нажав на это, я go перейду на следующую страницу): введите описание изображения здесь

Как мне улучшить мой код? Просто чтобы уточнить: я хочу go через все файлы.

Редактировать: Кто-то попросил уточнить. На фото страницы (прилагается) вы видите значки папок? Я хочу нажать на них, чтобы открыть все значки файлов. Я выбираю эти файлы, нажимая на них, затем нажимая на стрелку на странице, чтобы поместить их в какое-то поле, и затем нажимая «Принятие моего выбора», который переносит меня на следующую страницу, где я нажимаю на Excel, и это скачивает мой файл «For-l oop» - это моя попытка go просмотреть все файлы в этих папках. Очевидно, я дал большое объяснение, но вопрос остается в силе. «Имя класса - узел» относится к значкам папок, а «for-id» относится к значкам файлов.

1 Ответ

0 голосов
/ 24 марта 2020
  1. В конце внешнего для l oop, вы можете добавить функцию, которая возвращается на начальную страницу, чтобы перейти по следующей ссылке

    ИЛИ

  2. Вместо того, чтобы щелкать ссылки, вы можете собрать их, а затем использовать внешний l oop для подключения к этим ссылкам. Другими словами, соберите все ссылки стартовой страницы с помощью find_all и сделайте так, чтобы ваш браузер подключался к каждой с внешней для l oop. Более конкретно:

Сначала вы создаете экземпляр браузера (ABrowser может быть Firefox () или что-то еще) и подключаетесь к начальной веб-странице, как вы уже это сделали:

browser = webdriver.ABrowser()
connection=browser.get(StartingPageURL)

Затем вы собираете все ссылки с нужными характеристиками:

a = browser.find_elements_by_class_name("node")

И теперь у вас есть список ссылок URL-адресов. Вместо того, чтобы щелкнуть ссылку, выполнить задание и go вернуться на начальную страницу, вы можете подключить браузер к URL-адресу ссылки, выполнить задание и затем подключиться к следующему URL-адресу ссылки и т. Д. c. с для л oop

    for links in a:
        connection=browser.get(link) ## browser connect to the link URL
        for id in range(2, 41): 
            my_id = "stree{}".format(id)
            browser.find_element_by_id(my_id).click()
            browser.find_element_by_xpath('/html/body/center[2]/form/table[1]/tbody/tr/td[3]/table/tbody/tr[5]/td[1]/a[1]/img').click()
            browser.find_element_by_xpath('/html/body/center[2]/form/table[2]/tbody/tr/td[4]/input').click()
            browser.find_element_by_xpath('/html/body/center/form/table[2]/tbody/tr/td[5]/a').click()
            sleep(5)

Обычно я предпочитаю второй вариант

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