这是我的问题:
对于Excel编写应用程序,我从HTML表中提取数据。我有一个包含表格的网站,我可以通过它来提取数据。
但
由于该表只显示了20行,所以我只能提取前20行,而不能提取整个表(行数非常随机)。
请注意,每次向下滚动时,HTML表都会将他的td/ID重置为row0为row19 (可能很常见,但我不是HTML :D )
我不知道如何在没有重复行数据的情况下遍历整个表。
如果有人有什么想法,欢迎你!
编辑1:
这是一个超文本标记语言(我已经对它进行了过滤,使其只包含我提取所需的col1 )
`https://jsfiddle.net/yfb429Lo/13/`
实际上,在表格的右侧有一个滚动标签,如下面的截图所示:
当我在表格中向下滚动2次时,HTML将自己更新为如下所示:
==> row2变成row0,row3变成row1,...
我有大约100个表要提取,但我不能提前知道表的长度。
谢谢大家,
阿诺德
发布于 2018-06-06 20:46:53
经过大量测试后,答案如下:
try:
last_row = driver.find_element_by_xpath(".//tr/*[contains(@id, '--TilesTable-rows-row19-col1')]")
last_row_old = driver.find_element_by_xpath(".//tr/*[contains(@id, '--TilesTable-rows-row19-col1')]").text
last_row.click()
last_row.send_keys(Keys.PAGE_DOWN)
time.sleep(2)
last_row_new = driver.find_element_by_xpath(".//tr/*[contains(@id, '--TilesTable-rows-row19-col1')]").text
while (last_row_new == last_row_old) is False:
table = driver.find_element_by_xpath("//*[contains(@id, '--TilesTable-table')]/tbody")
td_list = table.find_elements_by_xpath(".//tr/*[contains(@id, '-col1')]")
for td in td_list:
tile_title = td.text
sh_tile = wb["Tuiles"]
sh_tile.append([catalog, tile_title])
last_row = driver.find_element_by_xpath(".//tr/*[contains(@id, '--TilesTable-rows-row19-col1')]")
last_row_old = driver.find_element_by_xpath(".//tr/*[contains(@id, '--TilesTable-rows-row19-col1')]").text
last_row.click()
last_row.send_keys(Keys.PAGE_DOWN)
time.sleep(0.5)
last_row_new = driver.find_element_by_xpath(".//tr/*[contains(@id, '--TilesTable-rows-row19-col1')]").text
except selenium.common.exceptions.NoSuchElementException:
pass
发布于 2018-06-06 04:24:08
使用xpath而不是td/td提取行,因为它们不是常量。
单击“下一页”按钮,然后再次提取行,直到“下一页”按钮单击显示NotFoundException (取决于按钮在最后一页是否可见)。如果您提供HTML或网站链接,您将得到更好的答案。
https://stackoverflow.com/questions/50703723
复制相似问题