Rumah >Java >javaTutorial >Bagaimana untuk menggunakan PhantomJS dalam Java untuk melaksanakan fungsi tangkapan skrin halaman HTML?

Bagaimana untuk menggunakan PhantomJS dalam Java untuk melaksanakan fungsi tangkapan skrin halaman HTML?

王林
王林ke hadapan
2023-04-24 11:37:151369semak imbas

I. Latar Belakang

Bagaimana untuk menjana gambar dalam program mini dan berkongsi dengan rakan-rakan? Pada masa ini, nampaknya tiada penyelesaian yang baik untuk bahagian hadapan, jadi ia hanya boleh disokong oleh bahagian belakang Jadi bagaimana ia boleh dimainkan?

Menjana gambar adalah agak mudah

Adegan mudah boleh disokong terus oleh jdk Secara umumnya, tiada logik yang terlalu rumit

Saya telah menulis sintesis gambar sebelum Logik, dilaksanakan menggunakan awt: Sintesis imej

Templat umum dan kompleks

Templat yang ringkas boleh disokong secara langsung, tetapi yang lebih rumit disokong oleh bahagian belakang, yang sudah pasti menjijikkan. Ia juga tersedia di github Saya mencari beberapa perpustakaan sumber terbuka untuk memaparkan HTML, tetapi saya tidak tahu sama ada ia disebabkan oleh postur yang salah atau sesuatu, tetapi saya tidak mendapat hasil yang sangat memuaskan

Bagaimanakah kita boleh menyokong templat yang kompleks sekarang?

Ini adalah panduan artikel ini Ia menggunakan phantomjs untuk merealisasikan pemaparan html. Ia menyokong penjanaan pdf, menjana gambar dan menghurai dom Seterusnya, saya akan menunjukkan cara menggabungkan phantomjs untuk membina perkhidmatan yang memaparkan web halaman menjadi imej

II Persediaan prasyarat

1. Pemasangan phantom.js

# 1. 下载
## mac 系统
wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-macosx.zip
## linux 系统
wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2
## windows 系统
## 就不要玩了,没啥意思
# 2. 解压
sudo su 
tar -jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2
# 如果解压报错,则安装下面的
# yum -y install bzip2
# 3. 安装
## 简单点,移动到bin目录下
cp phantomjs-2.1.1-linux-x86_64/bin/phantomjs /usr/local/bin
# 4. 验证是否ok
phantomjs --version
# 输出版本号,则表示ok

2 >penambahan konfigurasi maven Bergantung pada

untuk memulakan
<!--phantomjs -->
<dependency>
  <groupId>org.seleniumhq.selenium</groupId>
  <artifactId>selenium-java</artifactId>
  <version>2.53.1</version>
</dependency>
<dependency>
  <groupId>com.github.detro</groupId>
  <artifactId>ghostdriver</artifactId>
  <version>2.1.0</version>
</dependency>
<repositories>
  <repository>
    <id>jitpack.io</id>
    <url>https://jitpack.io</url>
  </repository>
</repositories>

dan terutamanya memanggil phantomjs untuk merealisasikan logik imej rendering html seperti berikut

Kes ujian
public class Html2ImageByJsWrapper {
  private static PhantomJSDriver webDriver = getPhantomJs();
  private static PhantomJSDriver getPhantomJs() {
    //设置必要参数
    DesiredCapabilities dcaps = new DesiredCapabilities();
    //ssl证书支持
    dcaps.setCapability("acceptSslCerts", true);
    //截屏支持
    dcaps.setCapability("takesScreenshot", true);
    //css搜索支持
    dcaps.setCapability("cssSelectorsEnabled", true);
    //js支持
    dcaps.setJavascriptEnabled(true);
    //驱动支持(第二参数表明的是你的phantomjs引擎所在的路径,which/whereis phantomjs可以查看)
    // fixme 这里写了执行, 可以考虑判断系统是否有安装,并获取对应的路径 or 开放出来指定路径
    dcaps.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY, "/usr/local/bin/phantomjs");
    //创建无界面浏览器对象
    return new PhantomJSDriver(dcaps);
  }
  public static BufferedImage renderHtml2Image(String url) throws IOException {
    webDriver.get(url);
    File file = webDriver.getScreenshotAs(OutputType.FILE);
    return ImageIO.read(file);
  }
}

public class Base64Util {
  public static String encode(BufferedImage bufferedImage, String imgType) throws IOException {
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
    ImageIO.write(bufferedImage, imgType, outputStream);
    return encode(outputStream);
  }
  public static String encode(ByteArrayOutputStream outputStream) {
    return Base64.getEncoder().encodeToString(outputStream.toByteArray());
  }
}
@Test
public void testRender() throws IOException {
  BufferedImage img = null;
  for (int i = 0; i < 20; ++i) {
    String url = "https://my.oschina.net/u/566591/blog/1580020";
    long start = System.currentTimeMillis();
    img = Html2ImageByJsWrapper.renderHtml2Image(url);
    long end = System.currentTimeMillis();
    System.out.println("cost: " + (end - start));
  }
  System.out.println(Base64Util.encode(img, "png"));
}
III. Pengukuran rangkaian

Demonstrasi operasi:

Atas ialah kandungan terperinci Bagaimana untuk menggunakan PhantomJS dalam Java untuk melaksanakan fungsi tangkapan skrin halaman HTML?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam