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

Android爬取漫画站点:POST返回hash、WebView获取JS内容失败求助

爬取manga.in.ua章节数据遇到的问题:POST返回"hash",WebView获取动态内容失败

我尝试爬取manga.in.ua站点的章节列表,发起POST请求后仅返回"hash",WebView方式也无法获取到动态加载的章节内容,具体情况如下:

一、POST请求问题

请求地址(需VPN访问):
manga.in.ua/engine/ajax/controller.php?mod=load_chapters&action=show&news_id=6590&news_category=1&this_link=""&site_login_hash=trefkbo756dsvnrfh4vhgfi654

站点通过JavaScript动态加载章节,对应的前端请求逻辑:

$(document).ready(function() {
    const news_id = $("#linkstocomics").data("news_id");
    const news_category = $("#linkstocomics").data("news_category");
    const this_link = news_category === 54 ? $("#linkstocomics").data("this_link") : "";

    $.ajax({
        url: "/engine/ajax/controller.php?mod=load_chapters",
        type: "POST",
        dataType: "html",
        data: {
            action:'show',
            news_id:news_id,
            news_category:news_category,
            this_link:this_link,
            user_hash:site_login_hash
        },
        success: function(data) {
             // 处理返回数据的逻辑
            }
        }
    });
});

我已经获取到news_id、news_category、this_link和site_login_hash的正确参数值,但POST请求始终仅返回"hash"。经排查,site_login_hash对应Cookie中的PHPSESSID,这个值通常静态,但偶尔会变化。

二、WebView尝试及问题

因为开发的是Android应用,无法确定用户浏览器版本,所以没使用Selenium。尝试用WebView执行上述JS代码,但返回null:

val myJsFun = "$(document).ready(function() ......"
webView.settings.javaScriptEnabled = true

webView.webViewClient = object : WebViewClient() {
    override fun onPageFinished(view: WebView, url: String) {
        webView.evaluateJavascript(myJsFun){
            Log.i("info", it.toString())
        }
    }
}

Logcat输出:info: null

UPDATE #1 (WebView)

尝试多种WebView用法,获取HTML时出错:

val web: WebView? = WebView(requireActivity())
web?.settings?.javaScriptEnabled = true

web?.webViewClient = object : WebViewClient(){
    override fun doUpdateVisitedHistory(view: WebView?, url: String?, isReload: Boolean) {
        view?.evaluateJavascript("document.documentElement.outerHTML"){
            val html = it.replace("\\u003C", "<")
            Log.i("info", html.substring(html.indexOf("linkstocomics"), html.indexOf("linkstocomics") + 1000))
        }
    }

}
web?.loadUrl(//url);

Logcat报错:(server)' ~ Channel is unrecoverably broken and will be disposed!,返回null。

但如果把WebView实例改为从布局中获取:

val web: WebView? = view?.findViewById(R.id.webview)

WebView界面能正常显示JS加载的章节元素,但在doUpdateVisitedHistory中获取到的是未执行JS的原始HTML,不包含动态加载的章节信息。

希望能通过POST请求或WebView任一方式获取章节数据,求解决思路。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 03:46:28