Поместить часть процесса соскабливания в петлю - PullRequest
0 голосов
/ 10 апреля 2020

Я делаю небольшой проект для себя, но мне нужна помощь. Вот код, и я постараюсь объяснить как можно лучше, в какой части мне нужна помощь.

Это мой код, который делает все вручную: / Часть, в которой мне нужна помощь, находится в def test_untitled_test_case (self) : # Вы можете видеть это В коде, вот где все, что мне нужно, происходит, и это та часть, которую я хотел бы l oop.

# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import NoAlertPresentException
import unittest, time, re

class UntitledTestCase(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Firefox()
        self.driver.implicitly_wait(30)
        self.base_url = "https://www.google.com/"
        self.verificationErrors = []
        self.accept_next_alert = True

    def test_untitled_test_case(self):
        driver = self.driver
        driver.get("http://portal.ujn.gov.rs/RezultatiPretrage.aspx?tab=1&pocetna=1&tp=F1KlmN+JuNI=&nad=HYaKK73A0XelYBXaLv+GK5iiW756vgDY")
        driver.find_element_by_id("ctl00_cphMain_gvJavneNabavke_ctl02_btnPregled").click()
        driver.find_element_by_id("ctl00_cphMain_grvChild_ctl03_btnPregled").click()
        driver.find_element_by_id("ctl00_cphMain_btnNazad").click()
        driver.find_element_by_id("ctl00_cphMain_btnNazad").click()
        driver.find_element_by_id("ctl00_cphMain_gvJavneNabavke_ctl03_btnPregled").click()
        driver.find_element_by_id("ctl00_cphMain_grvChild_ctl02_btnPregled").click()
        driver.find_element_by_id("ctl00_cphMain_btnNazad").click()
        driver.find_element_by_id("ctl00_cphMain_btnNazad").click()
        driver.find_element_by_id("ctl00_cphMain_gvJavneNabavke_ctl04_btnPregled").click()
        driver.find_element_by_id("ctl00_cphMain_grvChild_ctl02_btnPregled").click()
        driver.find_element_by_id("ctl00_cphMain_btnNazad").click()
        driver.find_element_by_id("ctl00_cphMain_btnNazad").click()

    def is_element_present(self, how, what):
        try: self.driver.find_element(by=how, value=what)
        except NoSuchElementException as e: return False
        return True

    def is_alert_present(self):
        try: self.driver.switch_to_alert()
        except NoAlertPresentException as e: return False
        return True

    def close_alert_and_get_its_text(self):
        try:
            alert = self.driver.switch_to_alert()
            alert_text = alert.text
            if self.accept_next_alert:
                alert.accept()
            else:
                alert.dismiss()
            return alert_text
        finally: self.accept_next_alert = True

    def tearDown(self):
        self.driver.quit()
        self.assertEqual([], self.verificationErrors)

if __name__ == "__main__":
    unittest.main()

Driver.get ("http://portal.ujn.gov.rs/RezultatiPretrage.aspx?tab=1&pocetna=1&tp=F1KlmN+JuNI=&nad=HYaKK73A0XelYBXaLv+GK5iiW756vgDY ") - это результат поиска по слову периодични, а затем он перечисляет все эти тендеры. Когда вы нажимаете маленькое увеличительное стекло, оно вводит детали для этого конкретного c тендера.

И детали, которые мне нужны, находятся в Обавештење о закљученом уговору. Оттуда мне нужно почистить Процењена вредност и Уговорена вредност.

Шаги, из основного URL, войти в каждый тендер, нажав на увеличительное стекло, нажав Обавештење о закљученом уговору (если есть, если нет возврата к основному URL, если есть щелчок по нему и удаление необходимых данных), и возврат к основному URL. И цикл весь этот процесс. И это все, что мне нужно. Надеюсь, я объяснил это достаточно хорошо.

Любые советы / рекомендации будут с благодарностью. Спасибо

1 Ответ

0 голосов
/ 10 апреля 2020

Попробуйте передать все ссылки в список. Заранее сохраните все свои ссылки в текстовом формате, JSON или XML -File. После анализа и сохранения их в списке, я пропустил этот шаг, потому что не мог импортировать ваши библиотеки, поэтому nvm. Но потом это довольно просто, просто вызовите for-loop, в котором вы выбираете в каждой итерации одну ссылку в вашем списке и выполняете нужную команду.

class UntitledTestCase(unittest.TestCase):

def __init__(self,list_of_weblinks):
  self.driver = webdriver.Firefox()
  self.driver.implicitly_wait(30)
  self.base_url = "https://www.google.com/"
  self.verificationErrors = []
  self.accept_next_alert = True
  self.list_of_weblinks=list_of_weblinks

def test_untitled_test_case(self):
  driver = self.driver

  for element in self.list_of_weblinks:
    driver.get(element).click()

def is_element_present(self, how, what):
    try: self.driver.find_element(by=how, value=what)
    except NoSuchElementException as e: return False
    return True

def is_alert_present(self):
    try: self.driver.switch_to_alert()
    except NoAlertPresentException as e: return False
    return True

def close_alert_and_get_its_text(self):
    try:
        alert = self.driver.switch_to_alert()
        alert_text = alert.text
        if self.accept_next_alert:
            alert.accept()
        else:
            alert.dismiss()
        return alert_text
    finally: self.accept_next_alert = True

def tearDown(self):
    self.driver.quit()
    self.assertEqual([], self.verificationErrors)

if __name__ == "__main__":
    unittest.main()


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