1

我有一个页面,一旦运行一些 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,iVBORw0KGgoAAAANSUhEETC...

我该怎么做才能自动保存此图像?我正在尝试生成链接列表,然后遍历它们并保存每个链接的图像。

4

1 回答 1

2

添加一个延迟,允许图像通过显式等待出现:

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

或者,读取 base64 图像数据,解码并保存(未测试):

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()
于 2015-07-17T18:05:45.873 回答