情况如下:
我的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_selector,
find_element_by_name等其他方法时,不应指定上下文节点,因此
element.find_element_by_css_selector('a')可以正常工作

