需求:

截屏后转PDF。

问题:

selenium截屏后,图片未加载

如下图:

原因:

网站使用了懒加载技术:只有在浏览器中纵向滚动条滚动到指定的位置时,页面的元素才会被动态加载。

什么是图片懒加载?

图片懒加载是一种网页优化技术。图片作为一种网络资源,在被请求时也与普通静态资源一样,将占用网络资源,而一次性将整个页面的所有图片加载完,将大大增加页面的首屏加载时间。

为了解决这种问题,通过前后端配合,使图片仅在浏览器当前视窗内出现时才加载该图片,达到减少首屏图片请求数的技术就被称为“图片懒加载”。

解决:

模拟人滚动滚动条的行为, 实现页面的加载

模拟人滚动滚动条的代码:

        js_height = "return document.body.clientHeight"
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

  

全部代码:

#!/usr/bin/python3
# -*- coding:utf-8 -*-
"""
@author: lms
@file: screenshot.py
@time: 2020/10/10 13:02
@desc:
""" import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from PIL import Image def screenshot_and_convert_to_pdf(link):
path = './' # 一定要使用无头模式,不然截不了全页面,只能截到你电脑的高度
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--no-sandbox')
driver = webdriver.Chrome(chrome_options=chrome_options)
try:
driver.implicitly_wait(20)
driver.get(link) # 模拟人滚动滚动条,处理图片懒加载问题
js_height = "return document.body.clientHeight"
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 time.sleep(1)
# 接下来是全屏的关键,用js获取页面的宽高
width = driver.execute_script("return document.documentElement.scrollWidth")
height = driver.execute_script("return document.documentElement.scrollHeight")
print(width, height)
# 将浏览器的宽高设置成刚刚获取的宽高
driver.set_window_size(width, height)
time.sleep(1) png_path = path + '/{}.png'.format('123456')
# pdf_url = SERVER_URL + '/static/global_tech_map/{}.pdf'.format(.pic_num)
# 截图并关掉浏览器
driver.save_screenshot(png_path)
driver.close()
# png转pdf
image1 = Image.open(png_path)
im1 = image1.convert('RGB')
pdf_path = png_path.replace('.png', '.pdf')
im1.save(pdf_path) except Exception as e:
print(e) if __name__ == '__main__':
screenshot_and_convert_to_pdf('https://mp.weixin.qq.com/s/nJRnGpPVeJ1kdMIOwiPNpg')

  

处理完成后的截屏:

感谢阅读~

最新文章

  1. js中 map 遍历数组
  2. WPF 组合快捷键
  3. 2016 ACM/ICPC Asia Regional Qingdao Online HDU5883
  4. gcc命令行详解
  5. 笨办法学 Python (第三版)(转载)
  6. 记一次ios使用OAuth 2.0写的接口获取token的小错
  7. 【转】基于Ubuntu 14.04 LTS编译Android4.4.2源代码
  8. Web 研发模式演变
  9. OC语法5——@property和@synthesize
  10. Golang:测试map是否存在
  11. (转)Maven项目标准目录结构
  12. JSON工具类
  13. JavaScript(ES6)学习笔记-Set和Map与数组和对象的比较(二)
  14. hadoop day 7
  15. daemon函数详解
  16. SD从零开始66 数据仓库的概念
  17. NumPy for MATLAB users
  18. 深度学习环境配置Ubuntu16.04+CUDA8.0+CUDNN5
  19. Android 自定义 ListView 上下拉动&ldquo;刷新最新&rdquo;和&ldquo;加载更多&rdquo;歌曲列表
  20. 算法笔记_149:图论之桥的应用(Java)

热门文章

  1. 最小生成树MST
  2. Jmeter 断言-检查点
  3. css实例——“旋转”太极八卦图
  4. centOS7 设置mysql数据库外网可以访问
  5. 深入理解Java中的装箱与拆箱
  6. Kubernetes笔记(五):了解Pod(容器组)
  7. CSS 简介,学习 CSS 必看
  8. WIN10自动修复失败无限循环
  9. [Leetcode]585. 2016年的投资(MySQL)
  10. python-字符串,字典,列表