Skip to main content
 首页 » 编程设计

python-3.x之找到WebDriver元素后,如何在该元素上应用xpath来进一步缩小其范围

2025年05月04日101kevingrace

情况如下:

我的HTML代码的结构如下所示:

XPATH1 
     XPATH1 + XPATH2 
     XPATH1 + XPATH3 
XPATH1 
     XPATH1 + XPATH2 
     XPATH1 + XPATH3 


我需要访问这些子路径。因此,我试图首先将所有XPATH1放入列表,然后尝试对其进行迭代。

不幸的是,这给我带来了重复。

我在Python中有以下代码:

elements_list = driver.find_elements_by_xpath(XPATH1) 
 
for element in element_list: 
    var1 = element.find_element_by_xpath(XPATH2) #We need XPATH1/XPATH2 
    var2 = element.find_element_by_xpath(XPATH3) 
    #lots more sub-paths 


我怀疑正在发生的事情是element.find_element_by_xpath(XPATH2)不适用于该元素的XPATH。相反,它在页面上通用地应用它并获取XPATH2的整个列表。

我也不能使用XPATH1 + XPATH2,因为那样的话,它仍然会指向每个元素。

如何使用for循环访问此页面上的每个元素?

另外,有没有使用element.find_element_by_xpath函数?似乎几乎没有用,因为xpath应用于整个页面。

请您参考如下方法:

这是因为您未指定CONTEXT NODE。

请注意,您应该使用代表“当前上下文”(XPATH1)的点来启动XPATH2和XPATH3:

elements_list = driver.find_elements_by_xpath('//div') 
 
for element in element_list: 
    var1 = element.find_element_by_xpath('./a') 
    var2 = element.find_element_by_xpath('.//p') 


仅通过XPath搜索时固有的此Selenium行为。使用 find_element_by_css_selectorfind_element_by_name等其他方法时,不应指定上下文节点,因此 element.find_element_by_css_selector('a')可以正常工作