我正在废弃以下页面: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>
正如你所看到的,我只能得到表格标签,但它的组件都不像tbody或tbody标签中的所有tr标签
我该怎么办?
答案 0 :(得分:2)
这里发生的是在页面加载后表格通过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_tag_name
查找所需的表格,而不是使用_by_id
逐个查找表格。 (此处表格有id="gvContractors"
)