Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用selenium按id获取div文本_Python_Selenium_Amazon_Getelementbyid - Fatal编程技术网

Python 如何使用selenium按id获取div文本

Python 如何使用selenium按id获取div文本,python,selenium,amazon,getelementbyid,Python,Selenium,Amazon,Getelementbyid,我正试图从亚马逊上获取一本书的描述文本。我通过使用驱动程序获得了这本书的图像、标题和价格。通过\u id查找\u element\u,但是当涉及到div中带有id=“iframeContent”的描述时,它不起作用。有什么想法吗?我也试过WebDriverWait,但运气不好 我使用以下代码: def get_product_description(self, url): """Returns the product description of the A

我正试图从亚马逊上获取一本书的描述文本。我通过使用
驱动程序获得了这本书的图像、标题和价格。通过\u id
查找\u element\u,但是当涉及到
div
中带有
id=“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\u选择器的元素
最后,您应该使用

driver.switch_to.default_content()

的信任尝试了这一点,但没有成功。问题是它找不到id iframeContent,更不用说它的文本了。更新了答案,您需要使用switch_to.frame切换到iframe才能继续,否则您将得到NoTouchElement异常