Python ASP.NET定位对象时出现的问题-Selenium

Python ASP.NET定位对象时出现的问题-Selenium,python,asp.net,selenium,xpath,Python,Asp.net,Selenium,Xpath,我是python新手,我正试图在一个ASPX网站上创建一个scraper。 我在这个页面上得到了两种结果,一种是空的,另一种是结果, 我的代码可以得到空的,但当它们存在时我无法得到结果, 我尝试了各种各样的方法,但仍然没有得到结果 有人能帮我吗 这是我的密码 import time from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.ke

我是python新手,我正试图在一个ASPX网站上创建一个scraper。 我在这个页面上得到了两种结果,一种是空的,另一种是结果, 我的代码可以得到空的,但当它们存在时我无法得到结果, 我尝试了各种各样的方法,但仍然没有得到结果

有人能帮我吗

这是我的密码

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

planilha = load_workbook('./BASE 05-09.xlsx')
driver = webdriver.Chrome(executable_path=r'C:\Python37\webdriver\chromedriver.exe')
wait = WebDriverWait(driver, 10)

sheet = planilha['Aba1']
driver.get("http://www1.cfc.org.br/sisweb/siscnai/externaConsultaCadastro.aspx")

for Count in range(2, 1101):
    driver.find_element_by_id("ContentPlaceHolder1_tbxCPF").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*='ContentPlaceHolder1_gvwProfissional'] > tbody > tr")))
    resultado_pesquisa = results[0].text.strip() if "ContentPlaceHolder1_gvwProfissional" in results[0].get_attribute("class") else results[0].find_element_by_xpath("./td[1]").text.strip()

    driver.find_element_by_id("ContentPlaceHolder1_tbxCPF").clear()
    
    sheet.cell(row=Count, column=7).value = resultado_pesquisa
    planilha.save("BASE 05-09.xlsx")

driver.quit()
这是我得到结果时的页面代码,我想得到“5433”


CNAI

卡达斯特罗领事馆
利用质量保证 佩斯奎萨:

诺姆: Número CNAI: 中央公积金: 登记处: 哈比利塔昂: QTGBCBUsePCVM 用友: 自动控制 艾尔 是 美联社 文学士 总工程师 DF 锿 去 文科硕士 镁 太太 机器翻译 帕 PB 体育课 圆周率 公共关系 RJ 注册护士 反渗透 RR RS 东南方 联合国安全理事会 服务提供商 到

注册数量:1

Nº;克尔库法蒂沃·德哈比利塔和#231ão 5433ADRIEL PAULSC-038746/OSC16/10/2017QTG


这是结果为空时的页面代码,在本例中,我希望获得“Nenhum registro encontrado”


CNAI

卡达斯特罗领事馆
利用质量保证 佩斯奎萨:

诺姆: Número CNAI: 中央公积金: 登记处: 哈比利塔昂: QTGBCBUsePCVM 用友: 自动控制 艾尔 是 美联社 文学士 总工程师 DF 锿 去 文科硕士 镁 太太 机器翻译 帕 PB 体育课 圆周率 公共关系 RJ 注册护士 反渗透 RR RS 东南方 联合国安全理事会 服务提供商 到

注册数量:0

内恩图罗·恩孔塔多。


我一直收到这个错误:

---------------------------------------------------------------------------
NoSuchElementException                    Traceback (most recent call last)
<ipython-input-48-eb337bf8471d> in <module>
     19 
     20     results = wait.until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "table[id*='ContentPlaceHolder1_gvwProfissional'] > tbody > tr")))
---> 21     resultado_pesquisa = results[0].text.strip() if "ContentPlaceHolder1_gvwProfissional" in results[0].get_attribute("class") else results[0].find_element_by_xpath("./td[1]").text.strip()
     22 
     23     driver.find_element_by_id("ContentPlaceHolder1_tbxCPF").clear()

c:\python37\lib\site-packages\selenium\webdriver\remote\webelement.py in find_element_by_xpath(self, xpath)
    349             element = element.find_element_by_xpath('//div/td[1]')
    350         """
--> 351         return self.find_element(by=By.XPATH, value=xpath)
    352 
    353     def find_elements_by_xpath(self, xpath):

c:\python37\lib\site-packages\selenium\webdriver\remote\webelement.py in find_element(self, by, value)
    657 
    658         return self._execute(Command.FIND_CHILD_ELEMENT,
--> 659                              {"using": by, "value": value})['value']
    660 
    661     def find_elements(self, by=By.ID, value=None):

c:\python37\lib\site-packages\selenium\webdriver\remote\webelement.py in _execute(self, command, params)
    631             params = {}
    632         params['id'] = self._id
--> 633         return self._parent.execute(command, params)
    634 
    635     def find_element(self, by=By.ID, value=None):

c:\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py in execute(self, driver_command, params)
    319         response = self.command_executor.execute(driver_command, params)
    320         if response:
--> 321             self.error_handler.check_response(response)
    322             response['value'] = self._unwrap_value(
    323                 response.get('value', None))

c:\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py in check_response(self, response)
    240                 alert_text = value['alert'].get('text')
    241             raise exception_class(message, screen, stacktrace, alert_text)
--> 242         raise exception_class(message, screen, stacktrace)
    243 
    244     def _value_or_default(self, obj, key, default):

NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"./td[1]"}
  (Session info: chrome=77.0.3865.90)
---------------------------------------------------------------------------
NoSuchElementException回溯(最近一次调用最后一次)
在里面
19
20结果=等待到(所有元素的EC可见性(通过.CSS选择器,“表[id*='ContentPlaceholder 1\U GVWPROFSIONAL']>tbody>tr”))
--->21 resultado_pesquisa=results[0]。text.strip()如果结果[0]中的“ContentPlaceHolder1\u gvwprofessional”。获取属性(“类”)或其他结果[0]。通过xpath(./td[1]”)查找元素。text.strip()
22
23.driver.find_element_by_id(“ContentPlaceHolder1_tbxCPF”).clear()
c:\python37\lib\site packages\selenium\webdriver\remote\webelement.py在find_element_by_xpath(self,xpath)中
349 element=element。通过xpath(“//div/td[1]”查找元素
350         """
-->351返回self.find_元素(by=by.XPATH,value=XPATH)
352
353 def通过xpath查找元素(self,xpath):
c:\python37\lib\site packages\selenium\webdriver\remote\webelement.py在find\u元素中(self、by、value)
657
658返回self.\u执行(Command.FIND\u CHILD\u元素,
-->659{“使用”:by,“值”:value})[“值”]
660
661 def find_元素(self,by=by.ID,value=None):
c:\python37\lib\site packages\selenium\webdriver\remote\webelement.py in\u execute(self、command、params)
631参数={}
632参数['id']=self.\u id
-->633返回self.\u parent.execute(命令,参数)
634
635 def find_元素(self,by=by.ID,value=None):
c:\python37\lib\site packages\selenium\webdriver\remote\webdriver.py in execute(self,driver\u命令,参数)
319响应=self.command\u executor.execu
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1"><meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" /><title>
    CNAI
</title></head>
<body>
    <form method="post" action="externaConsultaCadastro.aspx" id="form1">
<div class="aspNetHidden">
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="N4CP+jvK/5b+U+rTB9wr1ebhSvqp5jRbCS2nCn9YQmpBGkOzPBNz77XaZqDmpks4sRpruRnk5/iODtmwHpy/TgS6IoY1opVEWGrstOsGKd9qS12fLEJcrl0C4qMMX6749LvuwRu85AopjkujK6QBv1+IEz18b30UAbvkGt9UELokaKjcjtOSOLK7AsBGf0EQ20q97wEeiJm9TE85TMflKNLDXWm/juP5rpG9cU/THT/piFUCakmhaupUwYKt84cRk2Ax7Cg45MUJXLMlOBqqiBvZYiDachCY4HYWVzt0/HNny5+Ylsw9GS3Ay/VnSVJ3+FFQnhAzpEgQqGubFeW3/fmeOI/vcA/JWB6cFux8rfKD0jnCjJvwWetFPlrtRr+O1xj9jmrzwo6cpV+KsAIQvdkmDN4rPQocbKH8gL7Na3zEUM9eCse8IGFIb4ZTdspkD7LcN9irH3bYyrBZsR1P6RQPWwX//nw99cFO72DDrCAZPUQZ/oyxNt7OPolmL88KEtCvedK/aNdbrjjZLlUeqQk41VwNZ/H8CO6NX2Gv1Kf/F6bQoWfVsUP5UZN53kCaaYitCdsgJp+Pnvyrh2oh49IhYp7VKXCK5a5HcZuWFPB7iabfi2EU8W1xonpvSG2PPsrg0rU4/CdLIKuhHtXV9fNiAREpqkq4g7m6u8heKmCXBrvxwODcpScXuFnSwRgGh3Yfv2EDQWcpV23Gcz/aBSoSw0i+g9tU8RmQgVI3KqlyEPQ29T95wAlS4inUiyXzhf5x4egIgJ8pd9/2XxS2+N29HSlWuuOYetLezzA+SL9CWP7QB9kg73o6vvJNmLAsQju91/H0pF1dDkJYb/Gd1hO3vATKttcvGtyEN/GmI6grXnwgx4bTkhJTEdoEuN8C6kD7x77sTXk1IqTSgBLvWF4KeOJvzgic6BgIFDxJyb0REGmXTgLnB/b6NA7fjLP/" />
</div>

<script src='masks.js'></script>
<div class="aspNetHidden">

    <input type="hidden" name="__VIEWSTATEENCRYPTED" id="__VIEWSTATEENCRYPTED" value="" />
    <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="KcA31Q+gCa7NxEiVU/OBNKTzdcD+hDJlBKesntp7xzs3YJoMskiWyBNqo48LSDxqEwpoAVhjW6XfPoOB6lAyHWd+/ffQ/UCoXcJLUVk4OsecSTxThSzxv3SdnIx4pE+ytZJVeAG7Ix3UCOgVU6tAOMY0Atbta3Kz9cnNAsQ8C2IHF/vORmd1XwPBYHXCe2FSjU+G1kfQwKV1du386WIfBCbbwl5DBW7qsVdbVaGMR+qgOd6Tjk3IV1IuJU0oCUDUm8CcVhm/R6mFrXfCUXl6LVyPHVPKiKaMsdqnGI/IKjI2TjkwkU4+UJJjjobo6ABr4v+Xc1Gwpj4/QVxMBoF5g6izDSGDO9sk5WWeQqFBQKRhABUHEpHnuNgZwYmDC+UbjJ8pArD4Gg9SJexKzZgXkAgwHp/glsGoa5/dYolKx2Nu03tomY14YXkbNq/ml4LmZ3HSPKGuEniZq5gcmd+oCNtQulHCFijcUW39e7PmrKp4MGPk9/0sjmYPa2UZAwF0/RQ0QikZQmOxLokzN/5U865m8hjp4Gj3ndmZpPHKPBa5iHbTqTHSj1qPVnn/v+9wlU4mG7fISLwaALSQHBtOGXyNHNq2F4JExT7R1QskvwzQMF8kJPnysoLhqVmN04i2rXLTH6xY+iUnAN4NOPoIP+T5YBs5DniT5K4RyjMioWQmv6a2eQES1tRxtkKBaPbztolYIVxKmabkzsEjXdOxHIxj21Z/R5UHa6bVnOPaeHKgSpSqyqhDMRu9e5vLkbA3o953g0TZx9xEfB0lw+j/MhqnI35mwplWucjxm9uA/0zTEDAHZ2ATd//iCKR4SWaxjL+y3BTBEn9Icy+LFh77qfj4yHn4Ye7Y5gyIn8oiFJOiNei51in80ZJyGkDP/MG5bKsC+f8R1LukFlur5JoefSmB6oRj7g9KVOw+FW31suQ=" />
</div>
    <div>
        &nbsp;<table border="0" cellpadding="0" cellspacing="0">
            <tr>
                <td colspan="2" style="height: 68px; width: 801px;">
                    <img src="Imagens/banner_cnai_externo.jpg" /></td>
            </tr>
            <tr>
                <td colspan="2" style="width: 801px; height: 232px;">
        
<div align=center>
    <br />
    <table style="font-weight: bold; font-size: 12pt; width: 800px; color: white; font-family: verdana;
        height: 7px; background-color: firebrick">
        <tr>
            <td>
                CONSULTAR CADASTRO CNAI</td>
        </tr>
    </table>
    <br />
    <span style="font-size: 10pt; color: red; font-family: Verdana"><strong>Utilize <span
        style="text-decoration: underline">qualquer um</span> dos campos abaixo para fazer
        a pesquisa:</strong></span><br />
    <br />
    <table>
        <tr>
            <td style="text-align: right; font-weight: bold; color: firebrick; font-family: verdana;">
                <span style="font-size: 10pt; font-family: Verdana">Nome:</span></td>
            <td style="text-align: left">
                <input name="ctl00$ContentPlaceHolder1$tbxNome" type="text" maxlength="100" id="ContentPlaceHolder1_tbxNome" style="font-family:Verdana;font-size:10pt;width:295px;" /></td>
        </tr>
        <tr>
            <td style="text-align: right; font-weight: bold; color: firebrick; font-family: verdana;">
                <span style="font-size: 10pt; font-family: Verdana">Número CNAI:</span></td>
            <td style="text-align: left">
                <input name="ctl00$ContentPlaceHolder1$tbxNumeroCNAI" type="text" maxlength="8" id="ContentPlaceHolder1_tbxNumeroCNAI" style="font-family:Verdana;font-size:10pt;width:100px;" /></td>
        </tr>
        <tr>
            <td style="text-align: right; font-weight: bold; color: firebrick; font-family: verdana;">
                <span style="font-size: 10pt; font-family: Verdana">CPF:</span></td>
            <td style="text-align: left">
                <input name="ctl00$ContentPlaceHolder1$tbxCPF" type="text" value="462.929.158-08" maxlength="14" id="ContentPlaceHolder1_tbxCPF" style="font-family:Verdana;font-size:10pt;width:150px;" /></td>
        </tr>
        <tr>
            <td style="text-align: right; font-weight: bold; color: firebrick; font-family: verdana;">
                <span style="font-size: 10pt; font-family: Verdana">Registro:</span></td>
            <td style="text-align: left">
                <input name="ctl00$ContentPlaceHolder1$tbxNumeroRegistro" type="text" maxlength="8" id="ContentPlaceHolder1_tbxNumeroRegistro" style="font-family:Verdana;font-size:10pt;width:100px;" /></td>
        </tr>
        <tr>
            <td style="text-align: right; font-weight: bold; color: firebrick; font-family: verdana;">
                <span style="font-size: 10pt; font-family: Verdana">Habilitação:</span></td>
            <td style="text-align: left">
                <table id="ContentPlaceHolder1_cbxlCredenciamento" style="font-family:Verdana;font-size:10pt;">
    <tr>
        <td><input id="ContentPlaceHolder1_cbxlCredenciamento_0" type="checkbox" name="ctl00$ContentPlaceHolder1$cbxlCredenciamento$0" value="1" /><label for="ContentPlaceHolder1_cbxlCredenciamento_0">QTG</label></td><td><input id="ContentPlaceHolder1_cbxlCredenciamento_1" type="checkbox" name="ctl00$ContentPlaceHolder1$cbxlCredenciamento$1" value="2" /><label for="ContentPlaceHolder1_cbxlCredenciamento_1">BCB</label></td><td><input id="ContentPlaceHolder1_cbxlCredenciamento_2" type="checkbox" name="ctl00$ContentPlaceHolder1$cbxlCredenciamento$2" value="3" /><label for="ContentPlaceHolder1_cbxlCredenciamento_2">SUSEP</label></td><td><input id="ContentPlaceHolder1_cbxlCredenciamento_3" type="checkbox" name="ctl00$ContentPlaceHolder1$cbxlCredenciamento$3" value="4" /><label for="ContentPlaceHolder1_cbxlCredenciamento_3">CVM</label></td>
    </tr>
</table></td>
        </tr>
        <tr>
            <td style="text-align: right; font-weight: bold; color: firebrick; font-family: verdana;">
                <span style="font-size: 10pt; font-family: Verdana">UF:</span></td>
            <td style="text-align: left">
                <select name="ctl00$ContentPlaceHolder1$ddlUF" id="ContentPlaceHolder1_ddlUF" style="font-family:Verdana;font-size:10pt;">
    <option selected="selected" value=""></option>
    <option value="AC">AC</option>
    <option value="AL">AL</option>
    <option value="AM">AM</option>
    <option value="AP">AP</option>
    <option value="BA">BA</option>
    <option value="CE">CE</option>
    <option value="DF">DF</option>
    <option value="ES">ES</option>
    <option value="GO">GO</option>
    <option value="MA">MA</option>
    <option value="MG">MG</option>
    <option value="MS">MS</option>
    <option value="MT">MT</option>
    <option value="PA">PA</option>
    <option value="PB">PB</option>
    <option value="PE">PE</option>
    <option value="PI">PI</option>
    <option value="PR">PR</option>
    <option value="RJ">RJ</option>
    <option value="RN">RN</option>
    <option value="RO">RO</option>
    <option value="RR">RR</option>
    <option value="RS">RS</option>
    <option value="SE">SE</option>
    <option value="SC">SC</option>
    <option value="SP">SP</option>
    <option value="TO">TO</option>

</select></td>
        </tr>
       
        <tr>
            <td colspan="2">
                <br />
                <input type="submit" name="ctl00$ContentPlaceHolder1$btnConsultar" value="Consultar" id="ContentPlaceHolder1_btnConsultar" style="font-family:Verdana;font-size:8pt;width:100px;" />&nbsp;<input type="submit" name="ctl00$ContentPlaceHolder1$btnVoltar" value="&lt;&lt;&lt; Voltar" id="ContentPlaceHolder1_btnVoltar" style="font-family:Verdana;font-size:8pt;width:100px;" /></td>
        </tr>
    </table>
    <br />
    <span id="ContentPlaceHolder1_lblQtdRegistros" style="color:Firebrick;font-family:Verdana;font-size:10pt;font-weight:bold;">Quantidade de registros encontrados: 0</span><br />
    <br />
    <div>
    <table cellspacing="0" cellpadding="4" id="ContentPlaceHolder1_gvwProfissional" style="color:#333333;font-family:Verdana;font-size:8pt;width:790px;border-collapse:collapse;">
        <tr style="color:Red;font-family:verdana;font-size:10pt;">
            <td colspan="9">Nenhum registro encontrado.</td>
        </tr>
    </table>
</div>
    <br />
    <br />
</div>    

                </td>
            </tr>
            <tr>
                <td colspan="2" style="height: 29px; background-color: #ffff92; text-align: center">
                    <span style="font-size: 8pt; color: firebrick; font-family: Verdana"><strong>
                        <hr style="width: 790px" />
                        <span style="color: firebrick">CFC/DEINF - Departamento de Informática</span></strong></span></td>
            </tr>
        </table>
    </div>
    
<script>_20d372f0c34740b2ae81fb5d201835ad = new Mask("###.###.###-##");_20d372f0c34740b2ae81fb5d201835ad.attach(document.getElementById('ContentPlaceHolder1_tbxCPF'));</script></form>
</body>
</html>
---------------------------------------------------------------------------
NoSuchElementException                    Traceback (most recent call last)
<ipython-input-48-eb337bf8471d> in <module>
     19 
     20     results = wait.until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "table[id*='ContentPlaceHolder1_gvwProfissional'] > tbody > tr")))
---> 21     resultado_pesquisa = results[0].text.strip() if "ContentPlaceHolder1_gvwProfissional" in results[0].get_attribute("class") else results[0].find_element_by_xpath("./td[1]").text.strip()
     22 
     23     driver.find_element_by_id("ContentPlaceHolder1_tbxCPF").clear()

c:\python37\lib\site-packages\selenium\webdriver\remote\webelement.py in find_element_by_xpath(self, xpath)
    349             element = element.find_element_by_xpath('//div/td[1]')
    350         """
--> 351         return self.find_element(by=By.XPATH, value=xpath)
    352 
    353     def find_elements_by_xpath(self, xpath):

c:\python37\lib\site-packages\selenium\webdriver\remote\webelement.py in find_element(self, by, value)
    657 
    658         return self._execute(Command.FIND_CHILD_ELEMENT,
--> 659                              {"using": by, "value": value})['value']
    660 
    661     def find_elements(self, by=By.ID, value=None):

c:\python37\lib\site-packages\selenium\webdriver\remote\webelement.py in _execute(self, command, params)
    631             params = {}
    632         params['id'] = self._id
--> 633         return self._parent.execute(command, params)
    634 
    635     def find_element(self, by=By.ID, value=None):

c:\python37\lib\site-packages\selenium\webdriver\remote\webdriver.py in execute(self, driver_command, params)
    319         response = self.command_executor.execute(driver_command, params)
    320         if response:
--> 321             self.error_handler.check_response(response)
    322             response['value'] = self._unwrap_value(
    323                 response.get('value', None))

c:\python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py in check_response(self, response)
    240                 alert_text = value['alert'].get('text')
    241             raise exception_class(message, screen, stacktrace, alert_text)
--> 242         raise exception_class(message, screen, stacktrace)
    243 
    244     def _value_or_default(self, obj, key, default):

NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"./td[1]"}
  (Session info: chrome=77.0.3865.90)
results = wait.until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "table[id*='ContentPlaceHolder1_gvwProfissional'] > tbody > tr")))
if "ContentPlaceHolder1_gvwProfissional" in results[0].get_attribute("class"):
    resultado_pesquisa = results[0].text.strip()
else:
    resultado_pesquisa=results[1].find_element_by_xpath("./td[1]").text.strip()

Print(resultado_pesquisa)
results = wait.until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "table[id*='ContentPlaceHolder1_gvwProfissional'] > tbody > tr")))
resultado_pesquisa = "Nenhum registro encontrado." if "Nenhum registro encontrado." in results[0].text else results[1].find_element_by_xpath("./td[1]").text.strip()