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

使用Jsoup登录GitHub时旧CSS选择器报错如何解决?

问题根因

你的判断正确,报错是代码中使用的层级CSS选择器已经不匹配当前GitHub登录页的DOM结构导致的,旧选择器依赖的页面布局已被调整,select()方法无法找到对应元素,后续调用first()时会抛出空指针异常。

修复方案

不要使用强依赖页面层级的nth-child选择器,改用按隐藏表单字段name属性选择的写法,GitHub登录表单中存储校验token的隐藏字段name固定为authenticity_token,该选择器稳定性更高,不会随页面布局微调失效。

修改后的代码

try {
    // 本示例用到的常量
    final String USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36";
    final String LOGIN_FORM_URL = "https://github.com/login";
    final String LOGIN_ACTION_URL = "https://github.com/session";
    final String USERNAME = "你的GitHub账号";
    final String PASSWORD = "你的GitHub密码";

    // 访问登录页获取服务器下发的cookies
    Connection.Response loginForm = Jsoup.connect(LOGIN_FORM_URL)
            .method(Connection.Method.GET)
            .userAgent(USER_AGENT)
            .execute();
    Document loginDoc = loginForm.parse(); // 存储响应html的文档对象
    HashMap<String, String> cookies = new HashMap<>(loginForm.cookies()); // 保存cookies用于后续请求

    // 准备登录凭证
    // 已修复选择器,增加空判断避免空指针
    Element tokenElement = loginDoc.selectFirst("input[name=authenticity_token]");
    if (tokenElement == null) {
        throw new RuntimeException("未找到登录校验token,可能页面结构已更新或触发反爬验证");
    }
    String authToken = tokenElement.attr("value");

    HashMap<String, String> formData = new HashMap<>();
    formData.put("commit", "Sign in");
    formData.put("utf8", "✓");
    formData.put("login", USERNAME);
    formData.put("password", PASSWORD);
    formData.put("authenticity_token", authToken);

    // 提交登录表单
    Connection.Response homePage = Jsoup.connect(LOGIN_ACTION_URL)
            .cookies(cookies)
            .data(formData)
            .method(Connection.Method.POST)
            .userAgent(USER_AGENT)
            .execute();

    System.out.println(homePage.parse().html());

} catch (IOException e) {
    e.printStackTrace();
}

注意事项

  • 代码仅用于学习测试,GitHub有反爬机制,频繁发起登录请求会触发人机验证或IP限流,导致无法正常获取登录页内容。
  • 实际生产环境如需调用GitHub能力,建议使用GitHub官方提供的OAuth接口完成登录授权,稳定性和安全性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 16:06:00