从分裂中保存内联图像

saving inline image from splinter

我有一个页面,一旦某些 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 等...

如何自动保存这张图片?我正在尝试生成 link 的列表,然后遍历它们并保存每个 link.

的图像

添加延迟允许图像通过 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()