【问题标题】:Python selenium 'list' object has no attribute 'text' errorPython selenium 'list' 对象没有属性 'text' 错误
【发布时间】:2018-09-28 17:16:45
【问题描述】:

我正在尝试从网站<span class="auto-link">yes</span> 上的评论中复制文本,而我的 python 代码是

element=browser.find_elements_by_xpath('//span[@class="auto-link"][1]')
print(element.text)

但我不断收到“列表”对象没有属性“文本”错误,我不知道自己做错了什么。

【问题讨论】:

标签: python selenium


【解决方案1】:

我在 python 中使用硒。试试这个代码,我希望这对你有用。

    element=browser.find_elements_by_xpath('//span[@class="auto-link"][1]')

    for value in element:
        print(value.text)

【讨论】:

    【解决方案2】:

    我从未使用过 Selenium,但根据错误和您的回复,答案很清楚。

    当您搜索一个类时,可能有多个匹配元素,因此它会返回所有找到的匹配项的列表。即使该类只有一个元素,它仍然会返回一个列表以保持一致性。

    只需从找到的元素中抓取第一个元素:

    elements = browser.find_elements_by_xpath('//span[@class="auto-link"][1]')
    # ^ Renamed to reflect type better
    
    print(elements[0].text)
    #              ^ Grab the first element
    

    【讨论】:

      【解决方案3】:
      # instead of driver.find_elements_by_xpath() use driver.find_element_by_xpath() to get the individual element of the table
      from selenium import webdriver
      from webdriver_manager.chrome import ChromeDriverManager
      import time
      
      # Google Chrome
      driver = webdriver.Chrome(ChromeDriverManager().install())
      
      driver.get("https://testautomationpractice.blogspot.com/") 
      
      # Get Number of Rows
      rows = len(driver.find_elements_by_xpath("//*[@id='HTML1']/div[1]/table/tbody/tr"))
      
      # Get Number of Columns
      columns = len(driver.find_elements_by_xpath("//*[@id='HTML1']/div[1]/table/tbody/tr[1]/th"))
      
      print("Number of Rows:", rows)
      print("Number of Columns:", columns)
      
      # In web table index starts with 1 instead of 0 
      for row in range(2, rows+1):
          for col in range(1,columns+1):
              value = driver.find_element_by_xpath("//*[@id='HTML1']/div[1]/table/tbody/tr["+str(row)+"]/td["+str(col)+"]").text
              print(value, end='      ')
          print()
      
      
      time.sleep(5)
      
      # Close the Browser
      driver.close()
      

      【讨论】:

        【解决方案4】:

        当您要查找多个元素并获取与 xpath 匹配的第一个元素时,这将起作用:

        element=browser.find_elements_by_xpath('//span[@class="auto-link"][1]').get_attribute("innerHTML")
        print(element)
        

        这是你只寻找一个的时候:

        element=browser.find_element_by_xpath('//span[@class="auto-link"]').get_attribute("innerHTML")
        print(element)
        

        输出:

        >>>yes
        

        【讨论】:

          【解决方案5】:

          首先写下你当前工作的 span 的 xpath,然后在 xpath 的最后一个位置添加索引号,如下所示。

          from selenium import webdriver`
          driver = webdriver.Firefox()
          driver.get("http://www.example.org")
          element=browser.find_elements_by_xpath('//span[@class="auto-link"[1]').click()
          print(element)
          

          [1] 是我想要访问的值的索引号。

          【讨论】:

            【解决方案6】:

            不要使用find_elements_by_xpath,而是使用find_element_by_xpath

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-07-18
              • 2012-10-06
              • 2023-02-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多