在Java中,你可以使用几种不同的方法来实现对指定URL的网页截图。以下是几种常见的实现方式:
方法一:使用Selenium WebDriver
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.apache.commons.io.FileUtils;
import java.io.File;
public class URLScreenshot {
public static void main(String[] args) {
// 设置ChromeDriver路径
System.setProperty("webdriver.chrome.driver", "path/to/chromedriver");
WebDriver driver = new ChromeDriver();
try {
// 访问目标URL
driver.get("https://www.example.com");
// 等待页面加载完成(可根据需要调整等待时间)
Thread.sleep(3000);
// 截图并保存
File screenshot = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(screenshot, new File("screenshot.png"));
System.out.println("截图成功保存到 screenshot.png");
} catch (Exception e) {
e.printStackTrace();
} finally {
driver.quit();
}
}
}
方法二:使用HtmlUnit(无头浏览器)
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import java.io.File;
import javax.imageio.ImageIO;
public class HtmlUnitScreenshot {
public static void main(String[] args) {
try (WebClient webClient = new WebClient()) {
webClient.getOptions().setJavaScriptEnabled(true);
webClient.getOptions().setCssEnabled(false);
HtmlPage page = webClient.getPage("https://www.example.com");
// 等待JS执行
webClient.waitForBackgroundJavaScript(5000);
// 截图
File screenshot = new File("screenshot.png");
ImageIO.write(page.getScreenshot(), "PNG", screenshot);
System.out.println("截图成功保存到 screenshot.png");
} catch (Exception e) {
e.printStackTrace();
}
}
}
方法三:使用第三方API(如PhantomJS)
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.phantomjs.PhantomJSDriver;
import org.openqa.selenium.OutputType;
import org.apache.commons.io.FileUtils;
import java.io.File;
public class PhantomJSScreenshot {
public static void main(String[] args) {
System.setProperty("phantomjs.binary.path", "path/to/phantomjs");
WebDriver driver = new PhantomJSDriver();
try {
driver.get("https://www.example.com");
File screenshot = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(screenshot, new File("screenshot.png"));
System.out.println("截图成功保存到 screenshot.png");
} catch (Exception e) {
e.printStackTrace();
} finally {
driver.quit();
}
}
}
注意事项
-
依赖项:上述方法需要添加相应的依赖库:
-
Selenium: 需要下载对应的浏览器驱动(如ChromeDriver)
-
HtmlUnit: 需要添加HtmlUnit的Maven依赖
-
PhantomJS: 需要下载PhantomJS二进制文件
-
-
Maven依赖示例:
<!-- Selenium --> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>3.141.59</version> </dependency> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-chrome-driver</artifactId> <version>3.141.59</version> </dependency> <!-- HtmlUnit --> <dependency> <groupId>net.sourceforge.htmlunit</groupId> <artifactId>htmlunit</artifactId> <version>2.50.0</version> </dependency> <!-- Apache Commons IO --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.11.0</version> </dependency> -
chromedriver 插件下载
夸克网盘链接:https://pan.quark.cn/s/d7a48b46620d,需要下载对应chrome 浏览器版本前三位就是版本号(134),
-
应用测试
package cn.com.goldenwater.zb.app.fac.controller; import org.apache.commons.io.FileUtils; import org.openqa.selenium.OutputType; import org.openqa.selenium.TakesScreenshot; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.chrome.ChromeOptions; import java.io.File; import java.util.concurrent.TimeUnit; public class ChromeHeadlessScreenshot { public static void main(String[] args) { // 1. 设置ChromeDriver路径 System.setProperty("webdriver.chrome.driver", "D:\\develop\\chromedriver-win64\\chromedriver.exe"); // 2. 配置Chrome无头模式选项 ChromeOptions options = new ChromeOptions(); options.addArguments("--headless"); // 启用无头模式 options.addArguments("--disable-gpu"); // 禁用GPU加速 options.addArguments("--window-size=1920,1080"); // 设置窗口大小 // 3. 创建WebDriver实例 WebDriver driver = new ChromeDriver(options); try { // 4. 访问目标网页 driver.get("https://www.example.com"); // 5. 等待页面加载(可根据需要调整) driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); // 6. 截图并保存 File screenshot = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); FileUtils.copyFile(screenshot, new File("chrome_screenshot.png")); System.out.println("截图已保存: chrome_screenshot.png"); } catch (Exception e) { e.printStackTrace(); } finally { // 7. 关闭浏览器 driver.quit(); } } }执行结果:

-
下载图片展示

5万+

被折叠的 条评论
为什么被折叠?



