更多>>关于我们
西安鲲之鹏网络信息技术有限公司从2010年开始专注于Web(网站)数据抓取领域。致力于为广大中国客户提供准确、快捷的数据采集相关服务。我们采用分布式系统架构,日采集网页数千万。我们拥有海量稳定高匿HTTP代理IP地址池,可以有效获取互联网任何公开可见信息。
您只需告诉我们您想抓取的网站是什么,您感兴趣的字段有哪些,你需要的数据是哪种格式,我们将为您做所有的工作,最后把数据(或程序)交付给你。
数据的格式可以是CSV、JSON、XML、ACCESS、SQLITE、MSSQL、MYSQL等等。
更多>>技术文章
发布时间:2024-05-31 来源:西安鲲之鹏官微
【经验分享】使用Frida获取安卓APP Webview中的HTML内容
示例代码如下:
function getWebviewHtml(refresh){
var html = "";
var webview = null;
var sleep = new NativeFunction(Module.getExportByName('libc.so', 'sleep'), 'uint', ['uint']);
// 从内存中寻找
Java.perform(function(){
Java.choose("android.webkit.webview", {
"onMatch": function(o) {
Java.scheduleOnMainThread(function(){
if(o.getTitle()!=null){
webview = Java.retain(o);
console.log(webview.getTitle());
console.log('Found WebView:', webview);
};
});
},
"onComplete": function() {
console.log("Looking up WebView completed.")
}
})
});
if(webview!=null){
Java.perform(function(){
Java.scheduleOnMainThread(function(){
var ValueCallback = Java.use('android.webkit.ValueCallback');
var MyValueCallback = Java.registerClass({
name: 'com.example.MyValueCallback',
implements: [ValueCallback],
methods: {
'onReceiveValue': function(s) {
console.log('[F]Got javascript result:' + s);
html = "" + s;
}
}
});
if(refresh==true){
console.log('Refresh webpage.');
webview.reload();
}
webview.evaluateJavascript("(function() { return document.body.outerHTML; })();", MyValueCallback.$new());
});
// 循环检测直到html数据获取到, 最多等待5秒
for(var i=0; i<5; i++){
sleep(1);
if(html!=""){
console.log('Got html.');
break
}
}
});
}
return html;
}
另外,注意WebViewClient.OnPageFinished(WebView, String)时,WebView的内容还没有渲染完成,如果在这里获取WebView的HTML,获取的将是未渲染之前的。
示例代码如下:
function getWebviewHtml(refresh){
var html = "";
var webview = null;
var sleep = new NativeFunction(Module.getExportByName('libc.so', 'sleep'), 'uint', ['uint']);
// 从内存中寻找
Java.perform(function(){
Java.choose("android.webkit.webview", {
"onMatch": function(o) {
Java.scheduleOnMainThread(function(){
if(o.getTitle()!=null){
webview = Java.retain(o);
console.log(webview.getTitle());
console.log('Found WebView:', webview);
};
});
},
"onComplete": function() {
console.log("Looking up WebView completed.")
}
})
});
if(webview!=null){
Java.perform(function(){
Java.scheduleOnMainThread(function(){
var ValueCallback = Java.use('android.webkit.ValueCallback');
var MyValueCallback = Java.registerClass({
name: 'com.example.MyValueCallback',
implements: [ValueCallback],
methods: {
'onReceiveValue': function(s) {
console.log('[F]Got javascript result:' + s);
html = "" + s;
}
}
});
if(refresh==true){
console.log('Refresh webpage.');
webview.reload();
}
webview.evaluateJavascript("(function() { return document.body.outerHTML; })();", MyValueCallback.$new());
});
// 循环检测直到html数据获取到, 最多等待5秒
for(var i=0; i<5; i++){
sleep(1);
if(html!=""){
console.log('Got html.');
break
}
}
});
}
return html;
}
另外,注意WebViewClient.OnPageFinished(WebView, String)时,WebView的内容还没有渲染完成,如果在这里获取WebView的HTML,获取的将是未渲染之前的。
特别说明:该文章为鲲鹏数据原创内容 ,您除了可以发表评论外,还可以转载到别的网站,但是请保留源地址,谢谢!!(尊重他人劳动,我们共同努力)
☹ Disqus被Qiang了,之前的评论内容都没了。如果您有爬虫相关技术方面的问题,欢迎发到我们的问答平台:http://spider.site-digger.com/