2015-10-06 92 views
1

让我们解释发生了什么,我解析一个html页面以显示其android应用程序中的内容。首先,我加载HTML与Android webview,然后我通过代码获取HTML代码如下:无法使用Jquery和Jsoup访问动态生成的元素

// load a webview 
     wb.postUrl(url, EncodingUtils.getBytes(postData, "BASE64")); 

    // on page finish i will call a @JavascriptInterface 
     public void onPageFinished(WebView view, String url) { 

    view.loadUrl("javascript:window.HTMLOUT.processMain(
document.getElementsByTagName('html')[0].innerHTML);"); 

     } 




      @JavascriptInterface 
     class LoadListener{ 
       @JavascriptInterface 
       public void processMain(String html) 
       { 

        doc= Jsoup.parse(html); 
        getActivity().runOnUiThread(new Runnable() { 
         @Override 
         public void run() { 

        //here i can parse doc that is a jsoup document and select elements 
     doc.select("#login > tbody > tr > td.error").text(); 
        }); 

我的问题:那里是我的HTML页面table动态添加到HTML(我不知道怎么样,追加?addchild?php?或...因为我没有访问php代码)。我用这行代码选择那张表! 但它返回null。

doc.select("#login > tbody > tr > td.error").text() 

那么我该如何选择该表?

回答

0

Jsoup不是浏览器。它是一个解析器。它不理解JavaScript并且无法运行它。因此,如果您的页面通过Javascript动态地构建DOM元素,那么您无法通过Jsoup访问它。看看selenium webdriver如果你需要这个

+0

你是对的jsoup不能!但我解析的结果选择整个页面的JavaScript'view.loadUrl(“javascript:window.HTMLOUT.processMain( document.getElementsByTagName('html')[0] .innerHTML);”); '然后用jsoup解析它!我的问题是JavaScript不能选择动态生成的元素呢? – Oli

+0

哦,那么JSoup应该能够解析这个。你能分享一下你试图解析的生成的HTML吗? – luksch