将部分抓取过程置于循环中



我正在为自己做一个小抓取项目,但我需要一些帮助。这是代码,我将尽力解释我需要帮助的部分。

这是我手动完成所有操作的代码:/我需要帮助的部分在 def test_untitled_test_case(self):#you 可以看到它在代码中,这就是我需要的一切发生的地方,这就是我想循环的部分。

# -*- 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") 是单词 периодични 的搜索结果,然后它列出了所有这些投标。当您单击小放大镜时,它会输入该特定招标的详细信息。

我需要的细节可以在 Обавештење о закљученом уговору.从那里我需要刮 Процењена вредност 和 Уговорена вредност.

步骤是,从主网址,通过点击放大镜进入每个招标,点击 Обавештење о закљученом уговору(如果有,如果没有回到主网址,如果有点击它并抓取所需的数据),然后回到主网址。并循环整个 过程。 啊,这就是我所需要的。希望我解释得足够好。

任何提示/指导将不胜感激。 谢谢

尝试将所有链接传递到一个列表中。事先在txt,JSON或XML文件中保护您的所有链接。除了解析它们并将它们保护到列表中之外,我跳过了该步骤,因为我无法导入您的库,所以 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)

相关内容

  • 没有找到相关文章

最新更新