我是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)
答案 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)