2012-07-15 1 views
0

Possible en double:
Is it possible to get the HTML code from WebViewObtenir HTML d'une page dans Android

Je suis en train de faire une application qui a besoin d'obtenir le code html à partir d'un site web, et passer par le code pour chercher des images. Là où je suis maintenant me donne un code HTML dans l'émulateur, mais c'est un code différent que j'obtiens quand j'ouvre le code source du site sur mon ordinateur.

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(); 
      } 
     } 
    } 
} 

Le code que j'obtiens dans l'émulateur se termine par quelque chose sur l'activation de JavaScript et des cookies requis. Si c'est mon problème, comment puis-je y remédier?

Toute aide serait grandement appréciée!

Répondre

0

voir sur cette SO thread Réponse de Aymon Fournier,

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. problème est parfois dans UserAgent (un serveur peut envoyer la version simplifiée/mobile d'une page à regarder votre chaîne de useragent). Essayez d'utiliser le même useragent dans votre code que votre navigateur
  2. Essayez le framework "headless browser" HtmlUnit pour exécuter javascript.
Questions connexes