2012-07-15 11 views
0

可能重複:
Is it possible to get the HTML code from WebView獲取一個網頁的HTML中的Android

我試圖使這需要得到來自網站的HTML代碼的應用程序,並經過代碼來尋找圖像。我現在在哪裏給了我一個模擬器中的html代碼,但是當我在我的計算機上打開網站的源代碼時,它是一個不同的代碼。

public String getInternetData(String adresse) throws Exception{ 
    BufferedReader in = null; 
    String data = null; 
    try{ 
     HttpClient client = new DefaultHttpClient(); 
     URI website = new URI(adresse); 
     HttpGet request = new HttpGet(); 
     request.setURI(website); 
     HttpResponse response = client.execute(request); 
     in = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); 
     StringBuffer sb = new StringBuffer(""); 
     String l = ""; 
     String nl = System.getProperty("line.separator"); 
     while ((l = in.readLine()) !=null){ 
      sb.append(l + nl); 
     } 
     in.close(); 
     data = sb.toString(); 
     return data; 
    }finally{ 
     if (in != null){ 
      try{ 
       in.close(); 
       return data; 
      }catch (Exception e){ 
       e.printStackTrace(); 
      } 
     } 
    } 
} 

我在模擬器中得到的代碼以一些關於啓用JavaScript和Cookie的事情結束。如果這是我的問題,我該如何解決它?

任何幫助將不勝感激!

回答

0

看到Aymon Fournier的回答這個SO thread

private String getDownloadButtonOnly(String url){ 
    HttpGet pageGet = new HttpGet(url); 

    ResponseHandler<String> handler = new ResponseHandler<String>() { 
     public String handleResponse(HttpResponse response) throws ClientProtocolException, IOException { 
      HttpEntity entity = response.getEntity(); 
      String html; 

      if (entity != null) { 
       html = EntityUtils.toString(entity); 
       return html; 
      } else { 
       return null; 
      } 
     } 
    }; 

    pageHTML = null; 
    try { 
     while (pageHTML==null){ 
      pageHTML = client.execute(pageGet, handler); 
     } 
    } catch (ClientProtocolException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

     Pattern pattern = Pattern.compile("<h2>Direct Down.+?</h2>(</div>)*(.+?)<.+?>", Pattern.DOTALL); 
     Matcher matcher = pattern.matcher(pageHTML); 
     String displayHTML = null; 
     while(matcher.find()){ 
      displayHTML = matcher.group(); 
     } 

    return displayHTML; 
} 

    @Override 
    public void customizeWebView(final ServiceCommunicableActivity activity, final WebView webview, final SearchResult mRom) { 
     mRom.setFileSize(getFileSize(mRom.getURLSuffix())); 
     webview.getSettings().setJavaScriptEnabled(true); 
     WebViewClient anchorWebViewClient = new WebViewClient() 
     { 

      @Override 
      public void onPageStarted(WebView view, String url, Bitmap favicon) { 
       super.onPageStarted(view, url, favicon); 
       String downloadButtonHTML = getDownloadButtonOnly(url); 
       if(downloadButtonHTML!=null && !url.equals(lastLoadedURL)){ 
        lastLoadedURL = url; 
        webview.loadDataWithBaseURL(url, downloadButtonHTML, null, "utf-8", url); 
       } 
      } 
1
  1. 有時候問題是用戶代理(一個服務器可以發送看着你的UserAgent字符串頁面的簡化/移動版)。嘗試在您的代碼中使用與您的瀏覽器相同的useragent
  2. 嘗試使用HtmlUnit「無頭瀏覽器」框架來執行javascript。