Селеновый цикл по страницам таблиц

#python #selenium

#питон #селен

Вопрос:

Я пытался очистить оглавление с помощью Селена и Красивого супа, но, похоже, не могу найти хороший способ просмотреть страницы таблицы, учитывая, как написан HTML, поскольку кнопки «Далее» нет, а у кнопки «Выбранная страница» есть активный класс. Это код, который у меня есть до сих пор:

 from selenium import webdriver from selenium.webdriver.common.keys import Keys from bs4 import BeautifulSoup as bs import pandas as pd  path_driver = "C:/Users/CS330584/Documents/Documentos de Defesa da Concorrência/Automatização de Processos/chromedriver.exe" website = "https://sat.sef.sc.gov.br/tax.NET/Sat.Dva.Web/ConsultaPublicaDevedores.aspx" value_search = "300"  driver = webdriver.Chrome(path_driver) driver.get(website)  search_max = driver.find_element_by_id("Body_Main_Main_ctl00_txtTotalDevedores") search_max.send_keys(value_search)  btn_consult = driver.find_element_by_id("Body_Main_Main_ctl00_btnBuscar") btn_consult.click()  driver.implicitly_wait(10)  i = 1 while True:  try:  #some wait  driver.find_element_by_xpath("//*[@id='Body_Main_Main_grpDevedores_gridView']/tbody/tr[51]/td/ul/li' and .='[]']".format(str(i   1))).click()    except:  break   

Как я могу эффективно (или даже не так эффективно) просматривать эти страницы таблиц, чтобы очистить данные ?

Комментарии:

1. внизу находятся кнопки перехода к следующим страницам, на которых выполняется код JavaScript javascript:GridView_ScrollToTop(amp;quot;Body_Main_Main_grpDevedores_gridViewamp;quot;);__doPostBack('ctl00$ctl00$ctl00$Body$Main$Main$grpDevedores$gridView','Page$1') , и вы можете использовать его для изменения страниц. Вам нужно только обновить номер в Page$1'

2. в своем коде вы забыли i = i 1

Ответ №1:

Кнопки для перехода на следующие страницы запускают JavaScript код

 javascript:GridView_ScrollToTop('Body_Main_Main_grpDevedores_gridView');__doPostBack('ctl00$ctl00$ctl00$Body$Main$Main$grpDevedores$gridView','Page$1')  

и вы также можете использовать его для смены страниц.

Вам нужно только обновить номер в Page$1 — т. е. с помощью f-string

 from selenium import webdriver from selenium.webdriver.common.keys import Keys import time import math  path_driver = "C:/Users/CS330584/Documents/Documentos de Defesa da Concorrência/Automatização de Processos/chromedriver.exe" website = "https://sat.sef.sc.gov.br/tax.NET/Sat.Dva.Web/ConsultaPublicaDevedores.aspx" value_search = 300  #driver = webdriver.Chrome(path_driver) driver = webdriver.Firefox() driver.get(website)  search_max = driver.find_element_by_id("Body_Main_Main_ctl00_txtTotalDevedores") search_max.send_keys(value_search)  btn_consult = driver.find_element_by_id("Body_Main_Main_ctl00_btnBuscar") btn_consult.click()  driver.implicitly_wait(10)   pages = math.ceil(value_search/50) print('pages:', pages)  for i in range(2, pages 1):  try:  time.sleep(2)  driver.execute_script(f"javascript:GridView_ScrollToTop('Body_Main_Main_grpDevedores_gridView');__doPostBack('ctl00$ctl00$ctl00$Body$Main$Main$grpDevedores$gridView','Page${i}')")  except Exception as ex:  print(ex)  break   

Вы также можете получить все ссылки на страницу и использовать i в качестве индекса — вам нужно добавить 1, чтобы пропустить ссылку lt;lt;

 for i in range(2, pages 1):  try:  time.sleep(2)   all_links = driver.find_elements_by_xpath('//tr[@class="sat-gv-pagination-row"]//li//a')  all_links[i 1].click()   except Exception as ex:  print(ex)  break   

Или вы можете использовать f-string для создания xpath с li[{i 1}]

 for i in range(2, pages 1):  try:  time.sleep(2)   next_link = driver.find_element_by_xpath(f'//tr[@class="sat-gv-pagination-row"]//li[{i 1}]//a')  next_link.click()    except Exception as ex:  print(ex)  break