Java实现指定URL的截图方法

在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();
        }
    }
}

注意事项

  1. 依赖项:上述方法需要添加相应的依赖库:

    • Selenium: 需要下载对应的浏览器驱动(如ChromeDriver)

    • HtmlUnit: 需要添加HtmlUnit的Maven依赖

    • PhantomJS: 需要下载PhantomJS二进制文件

  2. 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>
        
       
      
  3. chromedriver 插件下载
    夸克网盘链接:https://pan.quark.cn/s/d7a48b46620d,需要下载对应chrome 浏览器版本前三位就是版本号(134),

  4. 应用测试

    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. 下载图片展示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

人谷子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值