Skip to main content
 首页 » 编程设计

python之Selenium Python之Webscraping Xpath 错误

2024年10月01日46haluo1

我正在尝试从以下页面抓取国家/地区名称 - 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