我正在尝试从以下页面抓取国家/地区名称 - 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 解决了第一个问题,因为这是抛出的错误。之后它说无法定位当前元素。
请您参考如下方法:
您不必为每个单独的 Selenium 元素定位问题都使用 XPath。在这种情况下,有更好的方法来定位国家/地区。如果您要遍历 table 的 tbody 内的每个 tr 元素并获得第二个 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()
打印:
Norway
Australia
Switzerland
...
San Marino
Somalia
Tuvalu
