#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