Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Selenium在Python中验证XPATH时出现问题_Python_Asp.net_Selenium_Xpath - Fatal编程技术网

使用Selenium在Python中验证XPATH时出现问题

使用Selenium在Python中验证XPATH时出现问题,python,asp.net,selenium,xpath,Python,Asp.net,Selenium,Xpath,我正试图抓取一个ASPX表单,但我很难制作一个,如果要选择不同类型的操作系统结果,我首先会有空白结果,然后是数据结果 如果要验证一个XPATH,如何创建一个?如果XPATH为真,我想做一件事,否则我想做另一件事 这是我的密码: import time from selenium import webdriver from selenium.webdriver.common.keys import Keys import openpyxl from openpyxl import load_wor

我正试图抓取一个ASPX表单,但我很难制作一个,如果要选择不同类型的操作系统结果,我首先会有空白结果,然后是数据结果

如果要验证一个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新手,当你说“如果XPATH为true”,我想你的意思是如果XPATH在页面上成功找到一个元素。您可以在
try
/
中使用ExpectedConditions,除了针对
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
/
中执行,但
块除外,以捕获在页面上不存在元素时遇到的
TimeoutException
。您可以在
中处理该情况,但
除外。如果您传递了
(除了
),这意味着在页面上找到了XPath元素,那么您的代码将位于示例中的最后一行。

下面的代码输入等待行,检查是否有空结果并获取值

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

当我尝试这段代码时,我得到了一个错误:“NoSuchElementException:消息:没有这样的元素:无法定位元素:{“方法”:“xpath”,“选择器”:“/td[2]”(会话信息:chrome=77.0.3865.90)”,当我尝试代码时,我得到了这个错误:文件“”,第28行元素=WebDriverWait(驱动程序,10)。直到(EC.presence_of_of_element_located(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])语法错误:当扫描字符串literal时,您的XPath需要在末尾加上右引号”