使用Selenium在Python中获取HTML表格主体

5
我正在抓取以下页面:https://proximity.niceic.com/mainform.aspx 首先,请在国家文本框中输入“%%”以显示该地区的所有承包商。一旦进入,如果我检查开发工具中的HTML,我会得到以下内容: Chrome Devtools 我想从所选表格中提取所有信息。问题是,当我使用selenium进行抓取时,我找到了表格,但无法访问其主体或子项。
这是我的Python代码:
main_table = driver.find_elements_by_tag_name('table')
outer_table = main_table[3].find_element_by_tag_name('table')
print outer_table.get_attribute('innerHTML')

上述代码输出如下内容:

<table cellspacing="0" rules="all" bordercolor="Silver" border="1" id="dvContractorDetail" style="background-color:White;border-color:Silver;border-width:1px;border-style:Solid;height:200px;width:400px;border-collapse:collapse;">

</table>

如您所见,我仅能获取表格标签,却获取不到其下组件tbody或tbody标签下的所有tr标签。

我该怎么办?


它打印了什么? - Pradeep hebbar
请阅读为什么截图HTML或代码或错误是不好的做法。考虑使用基于HTML和代码试验的格式化文本更新问题。 - undetected Selenium
你能否更新问题,并提供你正在尝试自动化的确切“手动步骤”? - undetected Selenium
你可以使用pandas来抓取表格内容。 - Pygirl
1个回答

4
这里发生的情况是页面加载后,表格通过JS加载。您必须等待表格加载完成。为此,您需要使用以下任一一种Waits
我建议使用显式等待 Explicit Wait。您可以这样做:
首先,您需要添加以下导入内容。
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException

然后进行更改。
main_table = driver.find_elements_by_tag_name('table')
outer_table = main_table[3].find_element_by_tag_name('table')
print outer_table.get_attribute('innerHTML') 

to

try:
    WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'gvContractors')))
except TimeoutException:
    pass  # Handle the exception here
table = driver.find_element_by_id('gvContractors').get_attribute('innerHTML')
print(table)

这将为您提供所需的输出结果。由于输出内容过大,我不会在此处发布,但您可以通过以下方式验证它:

print('Company/Address' in table)

这将打印True

注意:
不必一个一个地使用_by_tag_name查找表格,您可以直接使用_by_id查找所需的表格。(此处的表格具有id="gvContractors")


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接