0

我使用 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;
    }

}

}
4

1 回答 1

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"));

}
于 2013-03-21T03:11:32.390 回答