背景

在上一期玩转Echarts5中,留了一个问题:将html转为图片。周末亲测,发现cancas可以提取并保存,但是

块中的背景图片缺没有办法再拼接保存,尤其是LBS可视化。

于是,本主再次基础重器selenium。

代码

import base64

import os

import time

from selenium import webdriver

from selenium.common.exceptions import WebDriverException

options = webdriver.ChromeOptions()

#options.add_argument('--headless') # Chrome最新驱动无效,可以使用firefox或phantomjs

options.add_argument('--disable-gpu')

options.add_argument('--no-sandbox')

options.add_argument('window-size=1920x1080')

path = os.getcwd().replace("\\", "/")

full_path = path+'/templates/test_flask_render.html'

try:

driver = webdriver.Chrome(options=options)

driver.maximize_window()

driver.get(f'file:///{full_path}')

time.sleep(3)

driver.get_screenshot_as_file('./images/test-canvas.png')

driver.quit()

print("截图成功")

except WebDriverException:

print("截图失败")

这玩意有几个弊端:

1.selenium新版本已经不支持谷歌浏览器的无头模式。

2.预设浏览器窗口大小,仅截取窗口内的内容。

3.渲染图片需要时间,所以截图需要延迟3s。

全部页面

from selenium import webdriver

import time

import os.path

import multiprocessing as mp

def webshot(tup):

print("当前进程%d已启动" %os.getpid())

options = webdriver.ChromeOptions()

options.add_argument('--headless') # 不知为啥只能在无头模式执行才能截全屏

options.add_argument('--disable-gpu')

driver = webdriver.Chrome(options=options)

driver.maximize_window()

# 返回网页的高度的js代码

js_height = "return document.body.clientHeight"

picname = str(tup[0])

link = tup[1]

print(link)

try:

driver.get(link)

k = 1

height = driver.execute_script(js_height)

while True:

if k * 500 < height:

js_move = "window.scrollTo(0,{})".format(k * 500)

print(js_move)

driver.execute_script(js_move)

time.sleep(0.2)

height = driver.execute_script(js_height)

k += 1

else:

break

scroll_width = driver.execute_script('return document.body.parentNode.scrollWidth')

scroll_height = driver.execute_script('return document.body.parentNode.scrollHeight')

driver.set_window_size(scroll_width, scroll_height)

driver.get_screenshot_as_file("D:/pics/" + picname)

print("Process {} get one pic !!!".format(os.getpid()))

driver.quit()

except Exception as e:

print(picname, e)

if __name__ == '__main__':

# 首先创建一个保存截图的文件夹

filename = "D:/pics/"

if not os.path.isdir(filename):

# 判断文件夹是否存在,如果不存在就创建一个

os.makedirs(filename)

# 读取保存url的文件,返回一个列表

# 列表中每个元素都是一个元组,文件保存url的格式是:保存为图片的名称, 网页地址。

# 例:baidu.png,https://www.baidu.com

# zhihu.png,https://www.zhihu.com

with open('urls.txt', 'r') as f:

lines = f.readlines()

urls = []

for line in lines:

thelist = line.strip().split(",")

if len(thelist) == 2 and thelist[0] and thelist[1]:

urls.append((thelist[0], thelist[1]))

# 创建进程池来多进程执行

pool = mp.Pool()

pool.map_async(func=webshot, iterable=urls)

pool.close()

pool.join()

结语

最早本主使用腾讯地图的API,实现热点图等。最近在尝试使用Bokeh联合Echarts5实现地理位置可视化的交互。

python html生成图片_Python将html文件转为图片相关推荐

  1. python批量生成图片_python图像处理-批量生成纯色图片

    前言 本系列课程是针对无基础的,争取用简单明了的语言来讲解,学习前需要具备基本的电脑操作能力,准备一个已安装python环境的电脑.如果觉得好可以分享转发,有问题的地方也欢迎指出,在此先行谢过. 上一 ...

  2. 通过Python的speech_recognition库将音频文件转为文字

    文章目录 前言 一.音频准备 二.音频声音 三.格式转换 四.音频转文字 1.引入库 2.定义音频路径 3.创建一个Recognizer对象 4.打开音频文件,将音频文件读入Recognizer对象 ...

  3. python 使用字节流bytes格式读取文件转为int格式,再转为0,1字符串格式

    python 使用字节流bytes格式读取文件转为int格式,再转为0,1字符串格式 with open('test.jpg', 'rb') as src:t = src.read(1) # 读进1B ...

  4. 这篇文章教你把word文件转为图片

    把word文件转为图片,一下子是没法转成的,需要先转成pdf,再转成图片,就可以达到目的,话不多说,直接上代码 //先将word转成pdf并放在字节数组流里面FileInputStream fileI ...

  5. Python 提取网页正文,将网页转为图片!

    Python 提取网页正文,将网页转为图片!!! 用到python的newspaper库 from newspaper import Article news = Article(link.strip ...

  6. PHP将word文件转为图片之二

    0804记录安装php将Word转为pdf过程 一.安装宝塔 这一步就略过了 二.安装php相关扩展 Fileinfo Redis Mcrypt Imagemagick Exif 三.Linux安装需 ...

  7. 使用5.0.0版本的cssbox将html文件转为图片文件,并解决字体显示问题

    使用5.0.0版本的cssbox将html文件转为图片文件,并解决字体显示问题 1. 引入依赖 2. 编写Util类 3. 调用Util 4. 存在的问题 5. 解决字体不兼容问题 6. 官方文档 在 ...

  8. python csv转excel_将Excel文件转为csv文件的python脚本

    将Excel文件转为csv文件的python脚本 #!/usr/bin/env python __author__ = "lrtao2010" ''' Excel文件转csv文件脚 ...

  9. python图片保存为txt文件_python实现对文件中图片生成带标签的txt文件方法

    在深度学习中经常需要生成带标签的图片名称列表,xxxlist.txt文件,下面写一个简单的python脚本生成该文件列表. import os def generate(dir,label): fil ...

最新文章

  1. 转 微博 linux中ctime,mtime,atime的区别
  2. 计算机编辑功能在哪,注册表编辑器怎么打开-电脑的剪切板在哪里 电脑剪切板里面的内容怎么修改...
  3. python期末考试题及答案翻译-[译]Python面试中8个必考问题
  4. 实现跨域cookie共享(转载)
  5. lwIP ARP协议分析
  6. (转)java中对集合对象list的几种循环访问总结
  7. vue学习路线图,学习vue就是那么清晰。
  8. logisim优先编码器怎么用_变频电机为什么要用编码器?又该如何选型?
  9. VirtualBox设置共享目录(主机win7,虚拟机Ubuntu)
  10. 442个超实用电脑快捷键大全!总有你会用上的
  11. zouxy09博客原创性博文导航
  12. 如何估算一个分布式系统的容量
  13. java流程控制if_[Java]Java基本语法结构(运算符,流程控制语句,if语句)
  14. Axure9 导入元件库
  15. jquery ajax 详细教程视频,Ajax+jquery基础与提升2017视频教程
  16. php 显示探针_PHP探针
  17. Windows平台下使用ffmpeg和segmenter实现m3u8直播点播
  18. 第十届全国大学生GIS应用技能大赛下午(试题及参考答案)
  19. c语言 main()可否省略,main函数中省略返回语句
  20. java 导出压缩文件,里面文件名字乱码的问题(麒麟系统,linux)

热门文章

  1. 影响因子(Impact Factor,IF)
  2. html5在线音乐网站模板,国内首家HTML5音乐网站发布
  3. 使用idea批量反编译class
  4. linux防火墙规则配置教程,linux防火墙iptables详细教程
  5. eclipse 配置java开发环境_如何搭建一个完整的Java开发环境
  6. 用Python实现BT种子转化为磁力链接
  7. 小程序 动态修改二维数组 示例
  8. linux终端怎么打开计算器,如何通过终端启动计算器
  9. 面试题之微信朋友圈如何测试?
  10. unity常用组件功能介绍