Estou tentando raspar um formulário ASPX, e estou tendo dificuldades em fazer um IF para selecionar tipos diferentes de resultados, eu tenho os resultados em branco primeiro e os resultados dos dados depois.
Como faço um IF para validar um XPATH? SE o XPATH for verdadeiro, quero fazer uma coisa, OUTRO, quero fazer outra.
Este é o meu código:
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import openpyxl
from openpyxl import load_workbook
driver = webdriver.Chrome(executable_path=r'C:\Python37\webdriver\chromedriver.exe')
driver.get(".aspx")
planilha = openpyxl.load_workbook('BASE 05-09.xlsx')
sheet = planilha['Aba1']
for Count in range(2,5552):
box_cpf = driver.find_element_by_xpath(".//*[@id='ctl00_ContentPlaceHolder1_TxtCpf']")
box_cpf.send_keys(sheet.cell(row=Count, column=5).value)
pesquisar_bto = driver.find_elements_by_id("ctl00_ContentPlaceHolder1_btPesquisar")[0]
pesquisar_bto.click()
if driver.find_element_by_xpath("/html/body/form/div[3]/div[2]/div/table[2]/tbody/tr[4]/td/table[3]/tbody/tr/td/table[1]/tbody/tr[2]/td/div"):
resultado_pesquisa = driver.find_element_by_xpath("/html/body/form/div[3]/div[2]/div/table[2]/tbody/tr[4]/td/table[3]/tbody/tr/td/table[1]/tbody/tr[2]/td/div")
sheet.cell(row=Count, column=6).value = resultado_pesquisa.text
else:
resultado_pesquisa = driver.find_element_by_xpath("/html/body/form/div[3]/div[2]/div/table[2]/tbody/tr[4]/td/table[3]/tbody/tr/td/table[1]/tbody/tr[2]/td[2]")
sheet.cell(row=Count, column=6).value = resultado_pesquisa.text
planilha.save("BASE 05-09.xlsx")
time.sleep(.5)
limpar_bto = driver.find_elements_by_id("ctl00_ContentPlaceHolder1_btLimpar")[0]
limpar_bto.click()
time.sleep(.5)
driver.quit()
Esse é o XPATH quando eu tenho um resultado vazio:
"/html/body/form/div[3]/div[2]/div/table[2]/tbody/tr[4]/td/table[3]/tbody/tr/td/table[1]/tbody/tr[2]/td/div"
E o XPATH quando eu tiver resultados:
"/html/body/form/div[3]/div[2]/div/table[2]/tbody/tr[4]/td/table[3]/tbody/tr/td/table[1]/tbody/tr[2]/td[2]"
Desculpe se estou perguntando algo tão óbvio, sou novo em python
O código abaixo entre em espera por linhas, verifique se há resultado vazio e obtenha o valor.
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import openpyxl
from openpyxl import load_workbook
driver = webdriver.Chrome(executable_path=r'C:\Python37\webdriver\chromedriver.exe')
wait = WebDriverWait(driver, 10)
sheet = planilha['Aba1']
driver.get(".aspx")
for Count in range(2, 5552):
driver.find_element_by_id("ctl00_ContentPlaceHolder1_TxtCpf").send_keys(sheet.cell(row=Count, column=5).value, Keys.RETURN)
results = wait.until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "table[id*='DXMainTable'] > tbody > tr[class*=DataRow]")))
resultado_pesquisa = results[0].text.strip() if "EmptyDataRow" in results[0].get_attribute("class") else results[0].find_element_by_xpath("./td[2]").text.strip()
sheet.cell(row=Count, column=6).value = resultado_pesquisa
planilha.save("BASE 05-09.xlsx")
time.sleep(.5)
driver.find_element_by_id("ctl00_ContentPlaceHolder1_btLimpar").click()
driver.quit()
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras