【问题标题】:How to get div text by id with selenium如何使用 selenium 通过 id 获取 div 文本
【发布时间】:2021-05-07 10:17:22
【问题描述】:

我正在尝试从亚马逊webpage 获取一本书的描述文本。我使用driver.find_element_by_id 得到了这本书的图像、标题和价格,但是当涉及到divid="iframeContent" 中的描述时,它就不起作用了。任何想法?我也试过WebDriverWait,但没有运气。

我使用以下代码:

def get_product_description(self, url):
    """Returns the product description of the Amazon URL."""
    self.driver.get(url)
    try:
        product_desc = self.driver.find_element_by_id("iframeContent")
    except:
        pass

    if product_desc is None:
        product_desc = "Not available"
    return product_desc

【问题讨论】:

    标签: python selenium amazon getelementbyid


    【解决方案1】:

    由于该元素位于 iframe 内,您必须切换到该 iframe 才能访问 iframe 内的元素。
    所以首先你必须找到iframe

    iframe = driver.find_element_by_id("bookDesc_iframe")
    

    然后切换到它

    driver.switch_to.frame(iframe)
    

    现在您可以访问位于div#iframeContent css_selector 的元素
    最后你应该从iframe 跳到默认内容

    driver.switch_to.default_content()
    

    感谢author

    【讨论】:

      【解决方案2】:

      你需要使用 selenium 中的 text 方法。

      try:
          product_desc = self.driver.find_element_by_id("iframeContent").text
          print(product_desc)
      except:
          pass
      

      更新 1:

      其中涉及到iframe,所以需要先将webdriver的焦点改为iframe

      iframe = self.driver.find_element_by_id("bookDesc_iframe")
      self.driver.switch_to.frame(iframe)
      product_desc = self.driver.find_element_by_id("iframeContent").text
      print(product_desc)
      

      现在您可以访问 bookDesc_iframe iframe 内的每个元素,但在此框架之外的元素您需要先将 webdriver 焦点设置为默认值,如下所示:

      self.driver.switch_to.default_content()
      

      【讨论】:

      • 试过了,没用。问题是它没有找到 id iframeContent,更不用说它的文本了。
      • 更新了答案,您需要使用 switch_to.frame 切换到 iframe 才能继续进行,否则您将得到 noSuchElement 异常
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-07
      • 2021-06-17
      • 1970-01-01
      • 1970-01-01
      • 2016-08-09
      • 1970-01-01
      相关资源
      最近更新 更多