记一种新的爬取方式

在做竞对调研的时候,发现了一种新的爬取方式,印象深刻。

具体就是通过SDK的方式集成到用户的手机APP里面,然后通过控制webview来打开想要爬取的相关网站的登录页面,在用户完成登录页面之后,获取登录完成的cookie,传给后台,进行后续爬取。

这种方式最大的好处就是目前应该没有方式可以防止这种爬取方式,相当于是用户自己在手机上做了一次登录,获取到的设备指纹与平常的都是一致的,比较适合那种登录方式校验比较严格且经常改版的网站。并且给用户的感觉会比较安全一点,虽然通过SDK也是可以拦截到用户输入的用户名和密码。劣势在于需要集成SDK。

这种爬取核心的点在于webview跟javascript之间的交互,好在本身android/ios就提供这种能力

首先在页面上面通过JS操作webview loadUrl 打开相应的登录页

用户操作时,可以通过监听事件或者判断URL来进行相关的调用给原生,用于留存数据或者获取cookie,具体是在页面加载完成之后执行某一段javascript完成的。
android代码如下:

setOnWebViewClientListener(new BaseWebViewFragment.OnWebViewClientListener() {
                @Override
                public void onPageFinish(String str) {
                    this.fragment.handler.post(new Runnable() {
                        @Override
                        public void run() {
                            WebViewOfficialH5Fragment.loadJs(js);
                        }
                    });
                }
            });

QQ邮箱示例javascript如下:

(function() {

    var go = document.getElementById("go");

    if(go){

        go.addEventListener("click", function() {

            var u = document.getElementById("u");

            var p = document.getElementById("p");
            //调用原生保存用户输入数据
            alert(u.value + "" + p.value);

        });

    }

    var submitBtn = document.getElementById("submitBtn");

    if(submitBtn){

        go.addEventListener("click", function() {

            var pwd = document.getElementById("pwd");

            alert(pwd.value);

        });

    }

    alert(location.href);

    var reg = /w\.mail\.qq\.com\/cgi-bin\/today/i;

    if(reg.test(location.href)){

        //调用原生保存cookie
        
    }

})()

在客户端接受到cookie之后,通过异步的方式,把Cookie传递给后台,后台进行登录,完成之后进行爬取,客户端通过轮训接口获取爬取状态。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容