<p>看起来<code>./td[2]</code>在<code><tr class='odd'></code>下只有一个<code>td</code>元素的情况下抛出了<code>NoSuchElementException</code>。如果表中没有结果,则会发生这种情况</p>
<p>这可以通过在调用<code>driver.find_element_by_xpath("./td[2]")</code>之前检查子元素的计数来解决。我将重构这段代码,以便更清楚地了解有搜索结果与没有搜索结果的场景</p>
<p>另外,我注意到一些搜索结果显示<code><tr class='odd'></code>和其他<code><tr class='even'></code>。我不确定您是否打算排除<code>even</code>类行,因此我将为这两个行提供一个示例</p>
<p>下面的示例使用“CPF”字段进行搜索,然后等待结果行出现。代码在结果行中循环并打印出单元格文本。如果表中没有结果,循环将中断</p>
<pre><code>driver = webdriver.Chrome()
driver.get("http://www1.cfc.org.br/sisweb/Registro/ConsultaCNPC")
wait = WebDriverWait(driver, 30)
# search in CPF
wait.until(EC.presence_of_element_located((By.ID, "Cpf"))).send_keys("336.174.128-90" + Keys.ENTER)
# use this XPath to wait on all rows in the table rows are either class='odd' or class='even'
results = wait.until(EC.visibility_of_all_elements_located((By.XPATH, "//tr[@class='odd'] | //tr[@class='even']")))
# optional: use below line to exclude 'even' rows:
#results = wait.until(EC.visibility_of_all_elements_located((By.XPATH, "//tr[@class='odd']")))
# loop through result rows
for result in results:
# get child td elements under this row
child_elements = result.find_elements_by_xpath("td")
# if there is only one td child element, then no results are present in the table
if len(child_elements) == 1:
print("No results returned")
else:
# if row has child elements, loop through elements and print text
for child in child_elements:
print(child.text)
</code></pre>
<p>我运行的测试的输出:</p>
<pre><code>420
FRANCISCO ANTONIO PARADA VAZ FILHO
SP-253063 / O
CRC-SP
17/06/2016
Detalhes
</code></pre>