使用 Python & Selenium 从动态 table 抓取数据

Scrape data from dynamic table using Python & Selenium

我正在尝试从 URL 中抓取数据:https://qmjhldraft.rinknet.com/results.htm?year=2018,但我似乎无法从动态 table 中抓取一个名称。

这是我目前拥有的代码:

from selenium import webdriver
PATH = 'C:\Program Files (x86)\chromedriver.exe'
driver = webdriver.Chrome(PATH)
driver.get('https://qmjhldraft.rinknet.com/results.htm?year=2018')
element = driver.find_element_by_xpath('//*[@id="ht-results-table"]/tbody[1]/tr[2]/td[4]').text
print(element)

代码给我这个错误:

NoSuchElementException: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="ht-results-table"]/tbody[1]/tr[2]/td[4]"}

我的 XPath 显然有问题,但我不知道是什么。

非常感谢您的帮助!

第一个问题是好像网站是动态加载的,您需要花一些时间来完全加载页面。解决它你可以使用这个

time.sleep(2) 
// change the number according to your need.
element = driver.find_element_by_xpath('//*[@id="ht-results-table"]/tbody[1]/tr[2]/td[4]').text

最好的方法是使用 Explicit Waits。这将等待元素加载然后执行下一步。

第二个问题是您不应该只从 chrome 开发工具

复制 XPath

要获取所有名称,您可以执行此操作

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

PATH = 'C:\Program Files (x86)\chromedriver.exe'
driver = webdriver.Chrome(PATH)
driver.get('https://qmjhldraft.rinknet.com/results.htm?year=2018')

try:
    elements = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, "//tr[@rnid]/td[3]"))
    )
finally:
    names = driver.find_elements_by_xpath('//tr[@rnid]/td[3]')

for name in names:
    nm = name.text
    print(nm)

driver.quit()