С Python3 и селеном я хочу автоматизировать поиск на общедоступном информационном сайте. На этом сайте необходимо ввести имя человека, затем выбрать орфографию, выбранную для этого имени (без или с акцентами или вариациями имени), перейти на страницу со списком найденных исков, и в этом списке вы можете получить доступ к страницекаждого случая.
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException, NoSuchElementException
from selenium.webdriver.common.keys import Keys
import time
import re
Имя, по которому будет производиться поиск
name = 'JOSE ROBERTO ARRUDA'
Создать путь, начальную ссылку поиска и пустой список для хранения информации
firefoxPath="/home/abraji/Documentos/Code/geckodriver"
link = 'https://ww2.stj.jus.br/processo/pesquisa/?aplicacao=processos.ea'
processos = []
Вызови перейдите на первую страницу поиска
driver = webdriver.Firefox(executable_path=firefoxPath)
driver.get(link)
Поместите курсор, заполните и нажмите
WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#idParteNome'))).click()
time.sleep(1)
driver.find_element_by_xpath('//*[@id="idParteNome"]').send_keys(name)
time.sleep(6)
WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#idBotaoPesquisarFormularioExtendido'))).click()
Отметьте все возможности правописания для поиска
WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#idBotaoMarcarTodos'))).click()
WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#idBotaoPesquisarMarcados'))).click()
time.sleep(1)
Проверьте, сколько страницданных есть - для использования в «диапазоне»
capta = driver.find_element_by_xpath('//*[@id="idDivBlocoPaginacaoTopo"]/div/span/span[2]').text
print(capta)
paginas = int(re.search(r'\d+', capta).group(0))
paginas = int(paginas) + 1
print(paginas)
Процедура захвата
for acumula in range(1, paginas):
# Fill the field with the page number and press enter
driver.find_element_by_xpath('//*[@id="idDivBlocoPaginacaoTopo"]/div/span/span[2]/input').send_keys(acumula)
driver.find_element_by_xpath('//*[@id="idDivBlocoPaginacaoTopo"]/div/span/span[2]/input').send_keys(Keys.RETURN)
time.sleep(2)
# Captures the number of processes found on the current page - qt
qt = driver.find_element_by_xpath('//*[@id="idDivBlocoMensagem"]/div/b').text
qt = int(qt) + 2
print(qt)
# Iterate from found number of processes
for item in range(2, qt):
# Find the XPATH of each process link - start at number 2
vez = '//*[@id="idBlocoInternoLinhasProcesso"]/div[' + str(item) + ']/span[1]/span[1]/span[1]/span[2]/a'
print(vez)
# Access the direct link and click
element = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, vez)))
element.click()
# Run tests to get data
try:
num_unico = driver.find_element_by_xpath('//*[@id="idProcessoDetalhesBloco1"]/div[6]/span[2]/a').text
except NoSuchElementException:
num_unico = "sem_numero_unico"
try:
nome_proc = driver.find_element_by_xpath('//*[@id="idSpanClasseDescricao"]').text
except NoSuchElementException:
nome_proc = "sem_nome_encontrado"
try:
data_autu = driver.find_element_by_xpath('//*[@id="idProcessoDetalhesBloco1"]/div[5]/span[2]').text
except NoSuchElementException:
data_autu = "sem_data_encontrada"
# Fills dictionary and list
dicionario = {"num_unico": num_unico,
"nome_proc": nome_proc,
"data_autu": data_autu
}
processos.append(dicionario)
# Return a page to click on next process
driver.execute_script("window.history.go(-1)")
# Close driver
driver.quit()
В этом случае я захватил количество страниц ссылок (3) и общее количествоссылок (84). Поэтому моя первоначальная идея состояла в том, чтобы сделать «for» три раза, и внутри них разделить 84 ссылки
Прямой адрес каждой ссылки указан в XPATH (// * [@ id = "idBlocoInternoLinhasProcesso"] / div [41] / span [1] / span [1] / span [1] / span [2] / a), который я заменяю на «элемент», нажимая
Например, когда он достигает номера 42У меня есть ошибка, потому что первая страница только до 41
Моя проблема заключается в том, как перейти на вторую страницу и затем перезапустить только "для" вторичного
Я думаю, что идеальным было бызнаете точное количество ссылок на каждой из трех страниц
У кого-нибудь есть идеи?