我使用webview来获取我想从中提取信息的网站的HTML,但无法访问网站(服务器端,只有客户端)。
我可以通过javascript拉取html。但是当我运行我的代码时,我的数据字段没有更新,因为它在我的Javascript完成之前加载。我想通过JSOUP处理数据。使用HTTPCLient很困难,因为它是一个带有LOGIN的网站,并且它是SSL安全的。我可以通过WebView(手动登录)进入,然后再提取数据。
有没有办法获取或超过登录,或者在第二个线程中等待,直到它加载了所有的html数据?
public class MainActivity extends Activity implements OnClickListener {
TextView data;
Button getRost;
WebView webview;
String code;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
data = (TextView) findViewById(R.id.tvData);
getRost = (Button) findViewById(R.id.btGet);
getRost.setOnClickListener(this);
webview = (WebView) findViewById(R.id.wvWeb);
}
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
switch(arg0.getId())
{
case R.id.btGet:
webview.getSettings().setJavaScriptEnabled(true);
webview.addJavascriptInterface(new MyJavaScriptInterface(this), "HtmlViewer");
webview.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
webview.loadUrl("javascript:window.HtmlViewer.showHTML" +
"('<head>'+document.getElementsByTagName('html')[0].innerHTML+'</head>');");
}
});
webview.loadUrl("URLTHATCONTAINTSINFO");
data.setText(code);
}
}
class MyJavaScriptInterface {
private Context ctx;
MyJavaScriptInterface(Context ctx) {
this.ctx = ctx;
}
public void showHTML(String html) {
new AlertDialog.Builder(ctx).setTitle("HTML").setMessage(html)
.setPositiveButton(android.R.string.ok, null).setCancelable(false).create().show();
code = html;
}
}
}
答案 0 :(得分:0)
如果网站使用的是自签名证书,您应该能够创建自己的SSL客户端,并且只要您可以看到发送到站点以处理登录的内容,请通过POST发送。
如果它使用完整的SSL证书,那么只需POST数据......
无论哪种方式,让webview处理结果。
示例:
private void launchWeb() {
webview = new WebView(this);
// Where myWebview is the WebView object
webview.setWebChromeClient(new WebChromeClient());
webview.setWebViewClient(new MyWebViewClient());
webview.clearCache(true);
webview.clearHistory();
webview.getSettings().setJavaScriptEnabled(true);
webview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
webview.requestFocus(View.FOCUS_DOWN);
String postData = "username=" + _username + "&password=" + _password;
webview.postUrl("https://blahblah.com/somepath",
EncodingUtils.getBytes(postData, "BASE64"));
}