pc3121278 2023-02-09 12:27 采纳率: 0%
浏览 145
已结题

java htmlunit 处理需要微信扫码登录的网页抓取

我使用java htmlunit 最新版本获取网页类容,但是网站需要微信扫码登录,
我抓取返回的页面提示有
“>您的浏览器未开启 JavaScript
网页无法正常加载!请开启后重试</noscript

并没有显示扫码的图片,我该如何htmlunit 处理?
我已经设置为

webClient.getOptions().setCssEnabled(true);
    webClient.getOptions().setJavaScriptEnabled(true);
    webClient.getOptions().setThrowExceptionOnScriptError(true);
    webClient.getOptions().setRedirectEnabled(true);
    webClient.getOptions().setThrowExceptionOnFailingStatusCode(true);
    webClient.getOptions().setThrowExceptionOnScriptError(true);
     webClient.getCookieManager().setCookiesEnabled(true);
    webClient.setAjaxController(new NicelyResynchronizingAjaxController());// 很重要,设置支持AJAX
    webClient.getOptions().setTimeout(100000);
     webClient.waitForBackgroundJavaScript(600*1000);
    webClient.getOptions().setUseInsecureSSL(true);

只要能获取后续登陆态都行,可以加载图片出来扫码

  • 写回答

12条回答 默认 最新

  • CodeBytes 2023-02-09 13:13
    关注

    该回答引用ChatGPT

    如果您需要使用 HtmlUnit 抓取需要微信扫码登录的网站,您需要模拟整个登录过程,以获取登录后的页面。您需要执行以下步骤:

    1、访问登录页面。
    2、获取微信登录二维码。
    3、检测是否已完成扫码。
    4、获取登录后的页面。
    以下是实现以上步骤的代码示例:

    import com.gargoylesoftware.htmlunit.WebClient;
    import com.gargoylesoftware.htmlunit.html.HtmlImage;
    import com.gargoylesoftware.htmlunit.html.HtmlPage;
    
    public class WeChatLogin {
        public static void main(String[] args) throws Exception {
            WebClient webClient = new WebClient();
            webClient.getOptions().setJavaScriptEnabled(false);
            webClient.getOptions().setCssEnabled(false);
    
            // 访问登录页面
            HtmlPage page = webClient.getPage("https://www.example.com/login");
    
            // 获取微信登录二维码
            HtmlImage qrcodeImage = (HtmlImage) page.getElementById("qrcode");
            qrcodeImage.saveAs(new File("qrcode.png"));
    
            // 检测是否已完成扫码
            boolean isScanned = false;
            while (!isScanned) {
                Thread.sleep(3000);
                page = webClient.getPage("https://www.example.com/check-login");
                isScanned = page.getWebResponse().getContentAsString().contains("success");
            }
    
            // 获取登录后的页面
            page = webClient.getPage("https://www.example.com/profile");
            System.out.println(page.asText());
    
            webClient.close();
        }
    }
    
    
    评论

报告相同问题?

问题事件

  • 系统已结题 2月17日
  • 赞助了问题酬金50元 2月9日
  • 修改了问题 2月9日
  • 创建了问题 2月9日

悬赏问题

  • ¥30 关于用python写支付宝扫码付异步通知收不到的问题
  • ¥50 vue组件中无法正确接收并处理axios请求
  • ¥15 隐藏系统界面pdf的打印、下载按钮
  • ¥15 MATLAB联合adams仿真卡死如何解决(代码模型无问题)
  • ¥15 基于pso参数优化的LightGBM分类模型
  • ¥15 安装Paddleocr时报错无法解决
  • ¥15 python中transformers可以正常下载,但是没有办法使用pipeline
  • ¥50 分布式追踪trace异常问题
  • ¥15 人在外地出差,速帮一点点
  • ¥15 如何使用canvas在图片上进行如下的标注,以下代码不起作用,如何修改