我正在尝试通过以下网页抓取国家/地区名称 - http://hdr.undp.org/en/composite/trends
我正在尝试获取特定元素的Xpath。
所以对于第一个国家,它看起来像这样 -
Country = driver.find_element_by_xpath("//[@id='styleSheet.css']/div/div/div/div/table/tbody/tr[2]/td[2]").text
所以基本上对于所有国家,我在python中使用For循环和范围函数。
for i in range(2,193):
try:
print(i)
Country = driver.find_element_by_xpath("//[@id='styleSheet.css']/div/div/div/div/table/tbody/tr["+int(i)+"]/td[11]").text
print(Country)
except Exception:
print("none")
但问题是X路径对我不起作用。请帮助我找到正确的元素。
我通过将int更改为str解决了第一个问题,因为这是错误抛出。之后它说无法找到当前元素。
答案 0 :(得分:2)
您不必为每个单个的selenium元素位置问题使用XPath。在这种情况下,有更好的方法来定位国家。如果您浏览tr
的{{1}}内的每个tbody
元素并获取包含国家/地区名称的第二个table
元素,该怎么办:
td
打印:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get("http://hdr.undp.org/en/composite/trends")
table = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".pane-content table")))
for row in table.find_elements_by_css_selector("tbody > tr")[1:]: # skipping the first header row
country = row.find_element_by_css_selector("td:nth-child(2)")
print(country.text)
driver.close()