Heim  >  Artikel  >  Java  >  Wie verwende ich PhantomJS in Java, um die Screenshot-Funktion einer HTML-Seite zu implementieren?

Wie verwende ich PhantomJS in Java, um die Screenshot-Funktion einer HTML-Seite zu implementieren?

王林
王林nach vorne
2023-04-24 11:37:151297Durchsuche

I. Hintergrund

Wie erstelle ich ein Bild im Miniprogramm und teile es mit Moments? Derzeit scheint es keine gute Lösung für das Frontend zu geben, daher kann es nur vom Backend unterstützt werden.

Das Generieren von Bildern ist relativ einfach.

Einfache Szenen können direkt von JDK unterstützt werden. Im Allgemeinen gibt es keine zu komplizierte Logik.

Ich habe bereits eine Bildsyntheselogik geschrieben und sie mit awt implementiert: Bildsynthese.

Universell, Komplexe Vorlagen

können direkt unterstützt werden, wenn sie jedoch komplizierter sind, wird es zweifellos ekelhaft sein. Ich habe auch nach einigen Open-Source-Bibliotheken zum Rendern von HTML auf Github gesucht Ich weiß nicht, ob es an der falschen Haltung oder so etwas liegt, aber daran ist nichts auszusetzen. Zufriedenstellende Ergebnisse

Wie unterstützt man jetzt komplexe Vorlagen?

Dies ist die Anleitung für diesen Artikel. Er verwendet PhantomJS zum Implementieren von HTML-Rendering. Er unterstützt das Generieren von PDFs, das Generieren von Bildern und das Parsen von Dom. Als Nächstes zeigen wir, wie PhantomJS kombiniert werden, um einen Dienst zu erstellen, der Webseiten in Bilder rendert

II. Vorbereitung der Voraussetzungen

1. Installieren Sie 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. Java-Abhängigkeitskonfiguration

Maven-Konfiguration zum Hinzufügen von Abhängigkeiten

<!--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>
Starten

Die Logik des hauptsächlichen Aufrufs von phantomjs zur Implementierung von HTML-Rendering-Bildern ist wie folgt

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);
  }
}
Testfall

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  <p>III. Tatsächliche Netzwerkmessung<strong></strong></p>Betriebsdemonstration:<p></p><p><img src="https://img.php.cn/upload/article/000/465/014/168230743789738.gif" alt="Wie verwende ich PhantomJS in Java, um die Screenshot-Funktion einer HTML-Seite zu implementieren?"></p>

Das obige ist der detaillierte Inhalt vonWie verwende ich PhantomJS in Java, um die Screenshot-Funktion einer HTML-Seite zu implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen