从分裂中保存内嵌图像

时间:2015-07-17 17:43:04

标签: python selenium selenium-webdriver 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等......

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

1 个答案:

答案 0 :(得分:2)

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