Selenium Python - Webscraping Xpath错误

时间:2017-12-05 15:13:11

标签: python selenium xpath

我正在尝试通过以下网页抓取国家/地区名称 - 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解决了第一个问题,因为这是错误抛出。之后它说无法找到当前元素。

1 个答案:

答案 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()