我有一个页面,一旦运行一些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
等......
如何自动保存此图片?我正在尝试生成链接列表,然后遍历它们并从每个链接保存图像。
答案 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()