使用 Selenium 在 Python 中获取 HTML 表格正文

Posted

技术标签:

【中文标题】使用 Selenium 在 Python 中获取 HTML 表格正文【英文标题】:Get HTML table body in Python using Selenium 【发布时间】:2018-06-30 01:30:56 【问题描述】:

我正在废弃以下页面:https://proximity.niceic.com/mainform.aspx

首先请在国家文本框中输入“%%”以显示该地区的所有承包商。进入后,如果我在 devtools 中检查 html,我会得到以下信息:

我想从选定的表中提取所有信息。问题是当我使用硒报废它时,我确实找到了桌子,但我无法访问它的身体或孩子。

这是我的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>

如您所见,我只能获取 table 标签,但没有它的组件,如 tbody 或 tbody 标签中的所有 tr 标签

我能做什么?

【问题讨论】:

打印的是什么? 请阅读为什么是screenshot of HTML or code or error is a bad idea。考虑使用基于格式化文本的 HTML 和代码试验来更新问题。 您能否将问题更新为您尝试使用的确切 Manual Steps Automate 可以使用 pandas 来抓取表格的内容 【参考方案1】:

这里发生的是在页面加载后通过 JS 加载表格。您必须等到表格加载完毕。为此,您必须使用指定的Waits 中的任何一个here。

我会推荐使用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') 

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_id 查找所需的表,而不是使用_by_tag_name 逐个查找表。 (这里表格有id="gvContractors"

【讨论】:

以上是关于使用 Selenium 在 Python 中获取 HTML 表格正文的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Python 中使用 Selenium WebDriver 获取文本

如何在python中使用Selenium WebDriver获取整个网页源[重复]

使用 selenium 获取 Chrome Devtools 内容的 Python 脚本

在 python 中使用 selenium 从动态网站获取数据:如何发现数据库查询的完成方式?

如何使用 Python 从 Selenium 的重定向链中获取中间 URL?

如何在 Python + Selenium 中获取元素的值?