如何使用python selenium获取多个元素的文本内容?

时间:2017-05-11 21:51:04

标签: python selenium

这是我的代码:

def textfinder():
    try:
        textfinder1 = driver.find_elements_by_class_name("m-b-none").text
    except NoSuchElementException:
        pass
        print("no such element")
    print(textfinder1)

仅当我使用find_element时才有效,当我使用find_element s 时,它会给我错误" list"对象没有属性" text"。我明白它返回列表,我只是不知道如何"阅读"它。当我从命令中删除.text时,我没有收到任何错误,但有些奇怪的数据,但我需要该类的文本内容。

3 个答案:

答案 0 :(得分:3)

实际上,当你这样做时

text = driver.find_element_by_class_name("m-b-none").text

您将获得匹配的第一个元素,并且由于Selenium,此元素拥有一个名称为text的属性。当你做

时,相反
matched_elements = driver.find_elements_by_class_name("m-b-none")
                                      ^

它将匹配所有相应的元素。鉴于matched_elements是一个列表,并且该列表是一个python本地列表(例如,它不是一个具有text作为属性的Selenium修改对象),您将不得不在它上面,迭代地获取每个元素的文本。如下

texts = []
for matched_element in matched_elements:
    text = matched_element.text
    texts.append(text)
    print(text)

或者如果您希望尽可能保持代码不变,可以一行

texts = [el.text for el in driver.find_elements_by_class_name("m-b-none")]

答案 1 :(得分:1)

您需要像列表中的元素一样引用每个元素。像这样:

textfinder1 = driver.find_elements_by_class_name("m-b-none")

for elements in textfinder1:
    print elements.text 

答案 2 :(得分:1)

方法find_elements_by_class_name返回一个列表,您应该这样做:

text = ''
textfinder1 = driver.find_elements_by_class_name("m-b-none")
for i in textfinder1:
  text += i.text + '\n' #or whatever the way you want to concatenate your text
print(text)