You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需Selenium的Java浏览器交互机器人:实现谷歌搜索操作

解决方案:无需Selenium的Java浏览器交互实现

1. 使用JavaFX WebView组件

JavaFX自带的WebView是基于WebKit的嵌入式浏览器组件,支持完整的DOM操作、JavaScript执行和交互模拟,完全满足打开浏览器、输入搜索、跳转结果的需求。

示例代码:

import javafx.application.Application;
import javafx.concurrent.Worker;
import javafx.scene.Scene;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class BrowserAuto extends Application {
    @Override
    public void start(Stage stage) {
        WebView webView = new WebView();
        WebEngine webEngine = webView.getEngine();

        // 加载谷歌搜索页
        webEngine.load("https://www.google.com");

        // 监听页面加载完成事件
        webEngine.getLoadWorker().stateProperty().addListener((obs, oldState, newState) -> {
            if (newState == Worker.State.SUCCEEDED) {
                Document doc = webEngine.getDocument();
                if (doc != null) {
                    // 定位搜索输入框
                    Element searchBox = doc.getElementById("APjFqb");
                    if (searchBox != null) {
                        // 输入搜索内容
                        searchBox.setAttribute("value", "Java无Selenium自动化");
                        // 执行JS模拟提交表单
                        webEngine.executeScript("document.querySelector('form').submit();");
                    }
                }
            }
        });

        Scene scene = new Scene(webView, 800, 600);
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

注意:JDK 11及以上版本需单独配置JavaFX SDK依赖。

2. 直接构造HTTP请求(无浏览器界面)

如果不需要可视化浏览器,仅需模拟搜索并获取结果,可以跳过渲染环节,直接用HTTP请求模拟搜索行为:

示例代码:

import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;

import java.io.IOException;
import java.net.URLEncoder;

public class HttpSearchAuto {
    public static void main(String[] args) throws IOException {
        String query = "Java无Selenium自动化";
        String encodedQuery = URLEncoder.encode(query, "UTF-8");
        String searchUrl = "https://www.google.com/search?q=" + encodedQuery;

        try (CloseableHttpClient client = HttpClients.createDefault()) {
            HttpGet request = new HttpGet(searchUrl);
            // 模拟浏览器UA,避免被拦截
            request.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36");

            String response = EntityUtils.toString(client.execute(request).getEntity());
            // 用Jsoup解析搜索结果
            Document doc = Jsoup.parse(response);
            Elements results = doc.select("div.g");
            for (var result : results) {
                String title = result.select("h3").text();
                String link = result.select("a").attr("href");
                System.out.println("标题: " + title);
                System.out.println("链接: " + link + "\n");
            }
        }
    }
}

注意:该方法无法处理需要JavaScript渲染的动态页面,部分网站会检测请求头,需按需调整UA等参数。

3. 调用浏览器DevTools协议

Chrome、Edge等现代浏览器支持DevTools协议,可通过HTTP/WebSocket与浏览器通信,实现真实浏览器的自动化控制,无需依赖Selenium。

示例步骤:

  1. 启动Chrome并开启远程调试:chrome.exe --remote-debugging-port=9222
  2. 引入Maven依赖:
<dependency>
    <groupId>com.github.kklisura.cdt</groupId>
    <artifactId>cdt-java-client</artifactId>
    <version>1.3.0</version>
</dependency>
  1. 示例代码:
import com.github.kklisura.cdt.services.ChromeDevToolsService;
import com.github.kklisura.cdt.services.ChromeService;
import com.github.kklisura.cdt.services.types.ChromeTab;
import com.github.kklisura.cdt.protocol.commands.Page;
import com.github.kklisura.cdt.protocol.commands.Runtime;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class DevToolsAuto {
    public static void main(String[] args) {
        ChromeService chromeService = new ChromeService("localhost", 9222);
        ChromeTab tab = chromeService.getTabs().get(0);

        try (ChromeDevToolsService devTools = chromeService.createDevToolsService(tab)) {
            Page page = devTools.getPage();
            Runtime runtime = devTools.getRuntime();

            // 加载搜索页
            page.navigate("https://www.google.com");
            page.waitForLoadEventFired();

            // 执行JS输入搜索内容并提交
            runtime.evaluate("document.getElementById('APjFqb').value = 'Java DevTools自动化';");
            runtime.evaluate("document.querySelector('form').submit();");

            // 等待结果页加载
            page.waitForLoadEventFired();

            // 获取页面内容并解析
            String pageHtml = runtime.evaluate("document.documentElement.outerHTML").getResult().getValue().toString();
            Document doc = Jsoup.parse(pageHtml);
            // 后续解析逻辑同Jsoup示例
        } finally {
            chromeService.close();
        }
    }
}

该方法可控制真实浏览器实例,支持所有交互场景,功能接近Selenium但无额外依赖。


内容的提问来源于stack exchange,提问作者Jyoti kintali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 03:42:40