python selenium find_elements输出错误

时间:2020-07-05 16:39:29

标签: python-3.x selenium-webdriver

我是python + selenium的新手。我正在尝试使用find_elements *函数返回一些东西-请参见下面的代码。当我询问列表的长度时,我可以看到项目数是正确的,但是当我打印元素的内容时,我可以看到每个元素包含相同的值,并且应该包含不同的值。

elems = browser.find_elements_by_xpath("//div[@class='some_class_name')]")
print(len(elems))   # returns correct number of items

for elem in elems:
    print(elem.find_element_by_xpath("//span[@class='another_class_name']").text)
    print(elem.find_element_by_xpath("//div[starts-with(@href, 'https://some_web_page_name.com/')]").get_attribute(
        'data'))
    print(elem.find_element_by_xpath("//div[@class='other_class_name']").text)

2 个答案:

答案 0 :(得分:0)

您应该使用.将xpath的范围缩小到当前元素child / grandchildren。您的情况是,XPath指向页面上的第一个元素,而不是在当前elem下查找 更改代码,如下所示

for elem in elems:
    print(elem.find_element_by_xpath(".//span[@class='another_class_name']").text)
    print(elem.find_element_by_xpath(".//div[starts-with(@href, 'https://some_web_page_name.com/')]").get_attribute(
        'data'))
    print(elem.find_element_by_xpath(".//div[@class='other_class_name']").text)

答案 1 :(得分:0)

在循环或在其他选择器中使用find_element时,必须添加“。”在选择器内部,否则它将多次打印相同的元素

first_element = browser.find_elements_by_xpath("//div[@class='some_class_name')]")[0].find_element_by_xpath(".//span[@class='another_class_name']").text

在您的情况下,请使用以下代码

elems = browser.find_elements_by_xpath("//div[@class='some_class_name')]")
print(len(elems))   # returns correct number of items

for elem in elems:
    print(elem.find_element_by_xpath(".//span[@class='another_class_name']").text)
    print(elem.find_element_by_xpath(".//div[starts-with(@href, 'https://some_web_page_name.com/')]").get_attribute('data'))
    print(elem.find_element_by_xpath(".//div[@class='other_class_name']").text)