使用 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()
我正在尝试从 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()