【问题标题】:saving inline image from splinter从碎片中保存内联图像
【发布时间】:2015-07-17 17:43:03
【问题描述】:

我有一个页面,一旦运行一些 javascript,就会生成一个图像。我可以使用splinter 到达我有图像但我无法保存它的位置。

我使用的代码真的很简单:

    browser = Browser('firefox')
    browser.visit(png_url)
    browser.driver.save_screenshot(str(step+1) + '.png')

但是屏幕截图是空的...

页面基本上是:

<body style="margin: 0px;">
<img style="-webkit-user-select: none" src="http://localhost:8000/x">
</body>

我可以右键单击并保存图像,但不确定如何使用 splinter 自动执行该操作。

此外,该图像是一个内联 png,当我检查它的来源时,它显示为:

data:image/png;base64,iVBORw0KGgoAAAANSUhE 等等...

如何自动保存此图像?我正在尝试生成链接列表,然后遍历它们并保存每个链接的图像。

【问题讨论】:

    标签: python selenium selenium-webdriver splinter


    【解决方案1】:

    添加延迟以允许图像通过explicit wait 显示:

    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    wait = WebDriverWait(browser.driver, 10)
    wait.until(EC.visibility_of_element_located((By.TAG_NAME, "img")))
    
    browser.driver.save_screenshot(str(step+1) + '.png')
    

    或者,time.sleep()(不推荐):

    import time 
    
    time.sleep(5)
    
    browser.driver.save_screenshot(str(step+1) + '.png')
    

    或者,read that base64 image data, decode and save it(未测试):

    image_data = browser.driver.find_element_by_tag_name("img").get_attribute("src")
    image_data = image_data[22:]  # getting rid of data:image/png;base64,
    
    fh = open(str(step+1) + '.png', "wb")
    fh.write(image_data.decode('base64'))
    fh.close()
    

    【讨论】:

    • 谢谢!您的第一个显式等待示例非常完美,但我必须添加 from selenium.webdriver.common.by import By 才能使其正常工作。
    猜你喜欢
    • 2013-08-14
    • 2012-08-17
    • 2010-10-26
    • 2013-05-11
    • 1970-01-01
    • 2018-09-25
    • 2012-12-11
    • 2011-01-17
    • 2020-02-15
    相关资源
    最近更新 更多