如何在Python中使用selenium从表中获取数据

S A*_*rew 2 python selenium

我有这个URL,其中有表格。我需要从所有多个页面的表中获取所有行和列数据。我无法理解如何从表中获取数据。下面是我的代码:

from selenium import webdriver
import os
import time
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as ec
from selenium.webdriver.support.ui import Select
from pynput.keyboard import Key, Controller

curr_path = os.path.dirname(os.path.abspath(__file__))

keyboard = Controller()

driver = webdriver.Firefox()
driver.get("http://silk.dephut.go.id/index.php/info/iuiphhk")
driver.maximize_window()
Run Code Online (Sandbox Code Playgroud)

上面的代码打开一个 Firefox 并加载 url。我用来点击下一页的以下代码:

next_btn = (By.XPATH, "//div[@id='silk_content_wrapper']//ul[1]//li[4]//a[1]")
WebDriverWait(driver, 30).until(ec.element_to_be_clickable(next_btn)).click() 
Run Code Online (Sandbox Code Playgroud)

但我无法理解如何从表中获取数据。我不是来自网络开发领域,所以无法理解网站代码。我参考了这个问题接受的答案,并提取了表的ID:

table_id = driver.find_element(By.ID, 'diviuiphhk')
Run Code Online (Sandbox Code Playgroud)

但我没有找到行的ID来获取值。要查找 url 上任何对象的 ID、XPATH,我使用chropath。任何人都可以帮助我了解如何从表中获取数据。请帮忙。谢谢

S A*_*rew 6

我能够解决它。下面是代码:

table_id = driver.find_element(By.XPATH, "//table[@class='table']")

for row in range(1, 11):
    rows = table_id.find_elements(By.XPATH, "//body//tbody//tr[" + str(row) + "]")
    for row_data in rows:
        col = row_data.find_elements(By.TAG_NAME, "td")
        for i in range(len(col)):
            print(col[i].text)
Run Code Online (Sandbox Code Playgroud)

首先,我使用 chropath 获取表的 XPATH 值。然后我还得到了row的XPATH。该行的 XPATH 对于表中的所有行都是相同的,只需将数字从 1 增加到 10。行内的列由 TAG tdNAME 引用。因此使用这个标签名称来获取列的值。

谢谢