PYTHON selenium 查找元素速度很慢

ni65a41a  于 2022-11-10  发布在  Python
关注(0)|答案(2)|浏览(330)
<body>
    <tbody id="data-table">
       <tr>
          <td>
          </td>
          <td>
          </td>
          <td>
          </td>
          <td>
          </td>
       </tr>
       <tr>
          <td>
          </td>
          <td>
          </td>
          <td>
          </td>
          <td>
          </td>
       </tr>
       <tr>
          <td>
          </td>
          <td>
          </td>
          <td>
          </td>
          <td>
          </td>
       </tr>
    </tbody>
</body>

我需要一种快速的方法来查找每个<td>中包含的文本
我试过了

main_table = driver.find_element(By.ID, "data-table")
for i in range(3):
     main_table.find_element(By.XPATH, "tr[" + str(i + 1) + "]/td[1]").text
     main_table.find_element(By.XPATH, "tr[" + str(i + 1) + "]/td[2]").text
     main_table.find_element(By.XPATH, "tr[" + str(i + 1) + "]/td[3]").text

这是令人难以置信的缓慢。每次搜索近200毫秒
这个简单的循环需要3 x 3 x 200毫秒或1.8秒
我需要提取的实际数据更大,超过100tr,每个都有5td
这需要超过100秒才能完成
有没有更快的方法来做这件事?
例如,我想知道是否有一种方法可以只提取主表下的所有标记

extracted_data = main_table.get_all_tags()
for tr in extracted_data:
    for td in tr:
        print(td.text)

我们的想法是提取所有子标记数据,然后使用纯Python进一步提取子数据,而不是使用find_element进行爬行

ffx8fchx

ffx8fchx1#

如果您只是在每个TD标签中查找文本,您可以这样做:

main_table = driver.find_element(By.XPATH, '//*[@id="data-table"]/tr/td')
for xin main_table:
   print(x.text)
w3nuxt5m

w3nuxt5m2#

识别TABLE元素并首先获取TABLE元素的outerHtml,然后使用Pandas读取html

main_table = driver.find_element(By.XPATH, "//table[.//tbody[@id='data-table']]").get_attribute("outerHtml")
df=pd.read_html(main_table)[0]
print(df)

导入下列库

import pandas as pd

如果Pandas没有安装,那么先安装它

pip install pandas

相关问题