谷歌
package com.gxq.model.controller;
import cn.hutool.core.thread.ThreadUtil;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeDriverService;
import org.openqa.selenium.chrome.ChromeOptions;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.File;
import java.io.IOException;
/**
* 获取网页图片 Controller
*
* @author 小强同学
* @date 2023年7月9日22:53:17
*/
@RestController
@Slf4j
@AllArgsConstructor
@RequestMapping("/test")
public class TestController {
/**
* 获取图片
*
* @param idnex 第几张图片
* @return
*/
@GetMapping("/get-image")
public String getImage(Integer index) {
String src = null;
try {
String url = "www.baidu.com";
log.info("请求url====={}",url);
// 设置 Selenium WebDriver 的路径
File file = new File("C:\\chromedriver\\chromedriver.exe");
log.info("Selenium WebDriver 的路径==={}","C:\\chromedriver\\chromedriver.exe");
// 新建service
ChromeDriverService service = new ChromeDriverService.Builder().usingDriverExecutable(file).usingAnyFreePort().build();
// 开启服务
service.start();
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("--headless");
//无头浏览器
chromeOptions.addArguments("--no-sandbox");
//无界面
chromeOptions.addArguments("--disable-gpu");
chromeOptions.addArguments("lang=zh_CN.UTF-8");
//生成无头浏览器
WebDriver driver = new ChromeDriver(service, chromeOptions);
// 创建 ChromeDriver 实例
// 打开目标页面
driver.get(url);
// 等待页面加载完成
try {
log.info("等待页面加载完成");
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 使用 Jsoup 解析 HTML
Document doc = Jsoup.parse(driver.getPageSource());
// 获取图片元素
Elements imgElements = doc.select("img");
log.info("解析网页中的图片元素数量{}====={}",imgElements.size(),imgElements);
// 获取图片 URL
src = imgElements.get(index).attr("src");
log.info("获取第index个图片的地址为====={}",src);
// 关闭 ChromeDriver
ThreadUtil.execute(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(60000);
} catch (InterruptedException e) {
e.printStackTrace();
}
log.info("关闭浏览器!");
driver.quit();
}
});
return src;
} catch (IOException e) {
log.error("获取图片失败!");
e.printStackTrace();
}
return "获取图片失败!";
}
}
火狐浏览器
package com.gxq.model.controller;
import cn.hutool.core.thread.ThreadUtil;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeDriverService;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.File;
import java.io.IOException;
/**
* 获取网页图片 Controller
*
* @author 小强同学
* @date 2023年7月9日22:53:17
*/
@RestController
@Slf4j
@AllArgsConstructor
@RequestMapping("/test")
public class Test{
/**
* 获取图片
*
* @param index 第几张图片
* @return
*/
@GetMapping("/get-image")
public String getImage(Integer index) {
String src = null;
try {
String url = String url = "www.baidu.com";;
log.info("请求url====={}",url);
// 设置 Selenium WebDriver 的路径
System.setProperty("webdriver.gecko.driver", "C:\\firefox\\geckodriver.exe");
log.info("Selenium WebDriver 的路径==={}","C:\\firefox\\geckodriver.exe");
//生成无头浏览器
FirefoxOptions options = new FirefoxOptions();
options.addArguments("--headless");
options.addArguments("--disable-gpu");
// 创建 FirefoxDriver 实例
WebDriver driver = new FirefoxDriver(options);
// 打开目标页面
driver.get(url);
// 等待页面加载完成
try {
log.info("等待页面加载完成");
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 使用 Jsoup 解析 HTML
Document doc = Jsoup.parse(driver.getPageSource());
// 获取图片元素
Elements imgElements = doc.select("img");
log.info("解析网页中的图片元素数量{}====={}",imgElements.size(),imgElements);
// 获取图片 URL
src = imgElements.get(index).attr("src");
log.info("获取第index个图片的地址为====={}",src);
// 关闭 FirefoxDriver
ThreadUtil.execute(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(60000);
} catch (InterruptedException e) {
e.printStackTrace();
}
log.info("关闭浏览器!");
driver.close();
}
});
return src;
} catch (Exception e) {
log.error("获取图片失败!");
e.printStackTrace();
}
return "获取图片失败!";
}
}
驱动下载:https://liushilive.github.io/github_selenium_drivers/md/Firefox.html