如何使用 selenium 通过 id 获取 div 文本

How to get div text by id with selenium

我正在尝试从亚马逊 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

您需要使用 selenium 中的文本方法。

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()

由于该元素在 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