使用 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 从动态网站获取数据:如何发现数据库查询的完成方式?