Проблема с проверкой правильности XPATH в Python с Selenium - PullRequest
0 голосов
/ 16 октября 2019

Я пытаюсь очистить одну форму ASPX, и у меня возникают трудности при создании одного IF для выбора различных типов результатов, сначала у меня пустые результаты, а затем данные.

Как создать один IFпроверить один XPATH? ЕСЛИ XPATH - правда, я хочу сделать одно, иначе - я хочу сделать другое.

Это мой код:

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()

Это 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"

И 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]"

Извините, если я спрашиваю что-то очевидное, я новичок в python

Ответы [ 2 ]

0 голосов
/ 16 октября 2019

Код ниже введите ожидание строк, проверьте, есть ли пустой результат, и получите значение.

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()
0 голосов
/ 16 октября 2019

Когда вы говорите «ЕСЛИ XPATH - истина», я предполагаю, что вы имеете в виду, если XPath успешно находит элемент на странице. Вы можете использовать ExpectedConditions в блоке try / except против TimeoutException, чтобы выполнить это:

from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

# attempt to find element using first XPath
try: 
    element = WebDriverWait(driver, 10).until(EC.presence_of_element_located(
        (By.XPATH, "YourXPathHere")))
except TimeoutException:
    # XPath element did not exist. Do something else here.

# If you end up here, your XPath returned a WebElement successfully.
print(element)

Этот код пытается дождаться элемента, указанного в XPath в YourXPathHere. Это выполняетсяв блоке try / except, чтобы поймать TimeoutException, обнаруженный, если элемент НЕ существует на странице. Вы можете справиться с этим делом в except. Если вы передадите except, то есть элемент XPath, найденный на странице, ваш код окажется на последней строке образца.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...