java 怎么实现网页截图

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 怎么实现网页截图相关的知识,希望对你有一定的参考价值。

参考技术A 代码如下

[java]
<span style="font-size:18px;">package com.util;

import java.awt.AWTException;
import java.awt.Desktop;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
import java.net.URL;

import javax.imageio.ImageIO;

public class CutPicture
public static void main(String[] args) throws Exception,
IOException, URISyntaxException, AWTException
// 此方法仅适用于JdK1.6及以上版本
Desktop.getDesktop().browse(new URL("http://java.662p.com/").toURI());
Robot robot = new Robot();
robot.delay(10000);
Dimension d = new Dimension(Toolkit.getDefaultToolkit().getScreenSize());
int width = (int) d.getWidth();
int height = (int) d.getHeight();
// 最大化浏览器
robot.keyRelease(KeyEvent.VK_F11);
robot.delay(2000);
Image image = robot.createScreenCapture(new Rectangle(0, 0, width,height));
BufferedImage bi = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
Graphics g = bi.createGraphics();
g.drawImage(image, 0, 0, width, height, null);
// 保存图片
ImageIO.write(bi, "jpg", new File("c:/open.jpg"));


</span>
参考技术B

使用java中的自动测试类,模拟键盘鼠标的功能,可以直接实现电脑桌面的截图功能,

如果需要网页截图,只需要先打开网页,将其最大化,最后截图桌面即可!

简单实现的代码:

Python中使用 Selenium 实现网页截图实例

Selenium 是一个可以让浏览器自动化地执行一系列任务的工具,常用于自动化测试。不过,也可以用来给网页截图。目前,它支持 Java、C#、Ruby 以及 Python 四种客户端语言。如果你使用 Python,则只需要在命令行里输入“sudo easy_install selenium”并回车,即可安装 selenium 的 Python 版本的客户端支持。

以 Python 为例,我们可以使用下面的脚本来给指定页面(比如脚本之家首页)截图:

# -*- coding: utf-8 -*-
#
# author: oldj <[email protected]>
#
 
from selenium import webdriver
import time
 
 
def capture(url, save_fn="capture.png"):
  browser = webdriver.Firefox() # Get local session of firefox
  browser.set_window_size(1200, 900)
  browser.get(url) # Load page
  browser.execute_script("""
    (function () {
      var y = 0;
      var step = 100;
      window.scroll(0, 0);
 
      function f() {
        if (y < document.body.scrollHeight) {
          y += step;
          window.scroll(0, y);
          setTimeout(f, 50);
        } else {
          window.scroll(0, 0);
          document.title += "scroll-done";
        }
      }
 
      setTimeout(f, 1000);
    })();
  """)
 
  for i in xrange(30):
    if "scroll-done" in browser.title:
      break
    time.sleep(1)
 
  browser.save_screenshot(save_fn)
  browser.close()
 
 
if __name__ == "__main__":
 
  capture("http://www.jb51.net")

  

注意到,上面的代码中,我并没有在打开页面后立即截图,而是先在页面上执行了一段 JavaScript 脚本,先将页面的滚动条拖到最下方,再拖回顶部,然后才截图。这样的好处是如果页面下方有一些延迟加载的内容,在这个操作之后一般也都已加载了。

与 PageSaver 等浏览器插件相比,Selenium 功能更为强大,例如,它可以在页面上注入并执行一段 JS,还可以模拟鼠标点击等行为,而且可以同时运行多个实例(多个线程同时截图)。这样看来,使用 Selenium 来给页面截图似乎是一个不错的选择。

以上是关于java 怎么实现网页截图的主要内容,如果未能解决你的问题,请参考以下文章

如何用PHP实现网页截图

javascript 网页截图 保存为本地图片

如何用nodejs去做网页截图

用Puppeteer Docker镜像给网页截图

Python中使用 Selenium 实现网页截图实例

求助:java web开发实现截图,客户机截取本机图片,上传到服务器