2015-04-25 42 views
0

所以這可能看起來像一個非常簡單的問題,但我沒有找到任何運氣,因爲它也是特定的。試圖從android中獲取html源代碼(動態更改)從URL(不會更改)?

我有一個網站,我用WebView,我叫西弗吉尼亞州,通過wv.load(URL)

加載它在網站上,有PHP的形式,當用戶與它交互系統將生成HTML表格(點擊提交)。

由於生成的HTML表格,也爲其生成HTML表的源代碼,但該網址保持不變。新生成的具有html表格的源代碼是我想要抓取的那個。

請參閱下面我的代碼:

private final String URL = "http://google.com"; 

private WebView wv; 

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    wv = (WebView) findViewById(R.id.wvPage); 
    wv.getSettings().setJavaScriptEnabled(true); 
    wv.loadUrl(URL); 

    wv.setWebViewClient(new WebViewClient() 
    { 
     @Override 
     public void onPageFinished(WebView view, String url) 
     { 
      //view.loadUrl(URL); 
      new AsyncClass().execute(url); 
      Log.i("ASDF", "pagefinished"); 

     } 
    }); 

} 

我所謂的執行功能,每次的形式完成加載。即使生成表,我仍然沒有得到新生成的表的源代碼。下面是我的AsynTask實現:我只是從另一篇文章中複製它。

@Override 
protected Void doInBackground(String... URL) 
{ 
    try 
    { 
     HttpClient httpclient = new DefaultHttpClient(); // Create HTTP Client 
     HttpGet httpget = new HttpGet(URL[0]); // Set the action you want to do 
     HttpResponse response = httpclient.execute(httpget); // Execute it 
     HttpEntity entity = response.getEntity(); 
     InputStream is = entity.getContent(); // Create an InputStream with the response 
     BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8); 
     StringBuilder sb = new StringBuilder(); 
     String line = null; 
     while ((line = reader.readLine()) != null) 
     { 
      sb.append(line + "\n"); 
      Log.i("Source Code:", line); 
     } 
     String resString = sb.toString(); // Result is here 
     is.close(); 
    } 
    catch (Exception ex){ 
     ex.printStackTrace(); 
     Log.i("ERROR", ex.toString()); 
    } 
    return null; 
} 

我想要做的就是獲取html表的新源代碼,所以我可以繼續解析它。任何幫助表示讚賞。

+0

生成html表是因爲參數是通過POST或GET操作發送到該URL。你正在執行一個沒有參數的URL。 – greenapps

+0

感謝您的回覆,但我的問題似乎爲時過早。幾分鐘前我剛剛找到了解決方案。 – Vibol

+0

是的。好。但是,該解決方案不會再根據您的主題狀態從網址中獲取源代碼。但從webview。 – greenapps

回答

1

所以我做了一點點的挖掘,發現在另一個線程的解決方案。我甚至不必使用httprequest。只需要來自javascript的一點幫助。

這裏有一個link到線程,幫助我。

這是我的新代碼。

protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    wv = (WebView) findViewById(R.id.wvPage); 
    wv.getSettings().setJavaScriptEnabled(true); 
    wv.addJavascriptInterface(new MyJavaScriptInterface(), "HTMLOUT"); 
    wv.loadUrl(URL); 

    wv.setWebViewClient(new WebViewClient() 
    { 
     @Override 
     public void onPageFinished(WebView view, String url) 
     { 
      wv.loadUrl("javascript:window.HTMLOUT.processHTML('<head>'+document.getElementsByTagName('html')[0].innerHTML+'</head>');"); 
     } 
    }); 

} 

class MyJavaScriptInterface 
{ 
    @JavascriptInterface 
    @SuppressWarnings("unused") 
    public void processHTML(String html) 
    { 
     // process the html as needed by the app 
     String[] lines = html.split("\\n"); 
     for (String line : lines) 
     { 
      Log.i("Source Code: ", line); 
     } 
    } 
}