【问题标题】:Python Selenium problems with get_attribute('innerHTML')get_attribute('innerHTML') 的 Python Selenium 问题
【发布时间】:2021-01-19 09:41:42
【问题描述】:

我在使用 Selenium 在 Python 中检索多个元素的 innerHTML 时遇到了一些问题。

当我从一个元素中检索数据时,这与以下代码完美配合:

productid0 = driver.find_element_by_class_name("mod-article-tile__meta")
productid1 = productid0.get_attribute('innerHTML')

从我将 element 更改为 elementS 的那一刻起,我的代码就不再工作了,我收到以下错误 "AttributeError: 'list' object has no attribute 'get_attribute'":

productid0 = driver.find_elements_by_class_name("mod-article-tile__meta")
productid1 = productid0.get_attribute('innerHTML')

我需要使用元素,因为我想从特定页面上的所有元素中获取它。

谁能帮我解决这个问题?

谢谢!

【问题讨论】:

    标签: python html python-3.x selenium


    【解决方案1】:

    find_element_by_class_name 返回一个元素,但find_elements_by_class_name 返回一个元素列表。就像错误表明您在 Python list 上调用 get_attribute() 一样,这不是一回事。您必须在该列表中指定一个元素:

    products = driver.find_elements_by_class_name("mod-article-tile__meta")
    # get the innerhtml of the first element in the list
    innerhtml = products[0].get_attribute('innerHTML')
    

    【讨论】:

      【解决方案2】:

      会发生什么?

      find_elements_by_class_name 创建所有匹配项的列表,这就是您无法直接访问innerHTML 的原因

      如何解决?

      遍历列表并获取每场比赛的innerHTML

      for product in driver.find_elements_by_class_name("mod-article-tile__meta"):
          product.get_attribute('innerHTML')
      

      【讨论】:

        【解决方案3】:

        只需遍历 productid0。

        productid0 = driver.find_elements_by_class_name("mod-article-tile__meta")
        for product in product0:
            print(product.get_attribute('innerHTML'))
        

        【讨论】:

          【解决方案4】:

          您使用find_element_by_class_name("mod-article-tile__meta") 的第一部分只返回第一个类名为“mod-article-tile__meta”的元素,而find_elements_by_class_name("mod-article-tile__meta") 则返回一个类名为“mod-article-tile__meta”的元素列表。

          要使用元素,您必须遍历列表并在列表的每个成员上调用 get_attribute。

          productid0 = driver.find_elements_by_class_name("mod-article-tile__meta")
          productid1 = list(map(lambda p: p.get_attribute('innerHTML') , productid0)) 
          

          上面的代码也可以写成for循环

          productid0 = driver.find_elements_by_class_name("mod-article-tile__meta")
          productid1 = []
          
          for p0 in productid0:
              productid1.append(p0.get_attribute('innerHTML'))
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-05-07
            • 2022-11-28
            • 1970-01-01
            • 2019-11-15
            • 2020-09-29
            • 1970-01-01
            • 2018-02-04
            • 1970-01-01
            相关资源
            最近更新 更多