javascript - 无法从 WebView Android 获取整个 HTML 代码

标签 javascript android html webview

这是我的第一个问题,我写下它是因为我还没有找到任何相关信息。

我正在做我的期末论文,我想做一个 Android 应用程序,基本上从大学的服务器(使用 Jsoup)进行网络抓取,从学生那里获取科目分数并显示它们。

我使用 Eclipse Kepler 作为框架并在 Android 4.2.2 模拟器中测试应用程序。

为了访问服务器,我在 FrameLayout 中使用了一个被 LinearLayout 隐藏的 WebView。 它通过使用 JavaScript 填写登录表单来登录服务器,但是当它从页面中提取 HTML 代码并将其保存在字符串中时,它并没有获得完整的 HTML。我试过 document.getElementsByTagName('html')[0].innerHTML;文件.documentElement.innerHTML;和 document.documentElement.outerHTML 具有相同的结果。

这是 WebView 代码:

private final String loginPV = "https://www.upm.es/politecnica_virtual/login.upm";
private String usuario;
private String password;
private WebView navegador;
public static boolean login;
public static String marks_html;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.gestor_pv);
    navegador = (WebView) findViewById(R.id.webView1);
    Bundle extras = getIntent().getExtras();
    usuario = extras.getString("user");
    password = extras.getString("pass");
    login = false;

    navegador.getSettings().setJavaScriptEnabled(true);
    navegador.addJavascriptInterface(new MyJavaScriptInterface(this), "GETNOTAS");

    navegador.setWebViewClient(new WebViewClient() {

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {     
            view.loadUrl(url);
            return true;
        }

        @Override
        public void onPageFinished(WebView view, String url) {          
            super.onPageFinished(view, url);
              if(!login){                                           
                view.loadUrl("javascript:{" +                   
                        "document.getElementById('user').value = '"+usuario +"';" +
                        "document.getElementById('pass').value = '"+password+"';" +         
                        "document.getElementById('form_login_enviar').click();" +
                        " };");
                login = true;
            }else if(login){
                view.loadUrl("javascript:window.GETNOTAS.processHTML('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>');");
            }
       }
    });
    navegador.loadUrl(loginPV);

这是 JavaScript 接口(interface):

class MyJavaScriptInterface {           
    Context mContext;

    MyJavaScriptInterface(Context c) {
        mContext = c;
    }

    @JavascriptInterface
    public void processHTML(String html)
    {
        marks_html = html;
    }       
}

这是获得的 HTML:

<html>
<head>
<base href="https://www.upm.es/politecnica_virtual/principal.upm">
<title>Politécnica Virtual</title>
<meta name="viewport"
content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Language" content="ES">

<link rel="shortcut icon"
href="comun_publica/grafica/comunes/favicon.ico">
<link rel="stylesheet"
href="http://code.jquery.com/mobile/1.3.2/jquery.mobile-1.3.2.min.css">
<link rel="stylesheet"
href="comun_publica/estilos/politecnica_movil.css">

 <script src="http://code.jquery.com/jquery-1.9.0.min.js"></script>
<script
src="http://code.jquery.com/mobile/1.3.2/jquery.mobile-1.3.2.min.js"></script>
</head>

<body style="zoom: 1;" class="ui-mobile-viewport ui-overlay-c">
<div data-role="page" data-add-back-btn="true"
    data-url="/politecnica_virtual/principal.upm" tabindex="0"
    class="ui-page ui-body-c ui-page-active" style="min-height: 460px;">
    <form id="f" action="/politecnica_virtual/principal.upm?16_13_1693"
        method="post" enctype="multipart/form-data" accept="text/html"
        data-ajax="false">
        <div data-role="header" data-theme="c" class="ui-header ui-bar-c"
            role="banner">
            <h1 class="ui-title" role="heading" aria-level="1">
                <img src="comun_publica/grafica/comunes/logo_movil.png" alt="PV">
            </h1>
            <a data-theme="b" data-icon="delete"
                href="comun_publica/varios/cierresesion.upm?UPMSSID=32l0ntbeklovmqom0fmp8jkgo2"
                class="ui-btn-left ui-btn ui-btn-up-b ui-shadow ui-btn-corner-all ui-btn-icon-left"
                data-corners="true" data-shadow="true" data-iconshadow="true"
                data-wrapperels="span"><span class="ui-btn-inner"><span
                    class="ui-btn-text">Salir</span><span
                    class="ui-icon ui-icon-delete ui-icon-shadow">&nbsp;</span></span></a>
            <h2 class="ui-title" role="heading" aria-level="1">Alumno</h2>
        </div>
        <div data-role="content" class="ui-content" role="main">
            <input type="hidden" name="carpeta_activa" id="carpeta_activa"
                value="F"> <input type="hidden" name="UPMSSID" id="UPMSSID"
                value="32l0ntbeklovmqom0fmp8jkgo2"> <input type="hidden"
                name="accion" id="accion" value="16_13_1693"> <input
                type="hidden" name="accion_anterior" id="accion_anterior"
                value="16_13_1693"> <input type="hidden" name="idioma"
                id="idioma" value="">
            <!-- Menu Seccion -->
            <ul data-role="listview" data-inset="true" data-divider-theme="d"
                class="ui-listview ui-listview-inset ui-corner-all ui-shadow">
                <li data-corners="false" data-shadow="false" data-iconshadow="true"
                    data-wrapperels="div" data-icon="arrow-r" data-iconpos="right"
                    data-theme="c"
                    class="ui-btn ui-btn-up-c ui-btn-icon-right ui-li-has-arrow ui-li ui-first-child"><div
                        class="ui-btn-inner ui-li">
                        <div class="ui-btn-text">
                            <a href="#/politecnica_virtual/principal.upm&amp;ui-page=0-21"
                                class="ui-link-inherit"><span>Mis Datos</span></a>
                        </div>
                        <span class="ui-icon ui-icon-arrow-r ui-icon-shadow">&nbsp;</span>
                    </div></li>
                <li data-corners="false" data-shadow="false" data-iconshadow="true"
                    data-wrapperels="div" data-icon="arrow-r" data-iconpos="right"
                    data-theme="c"
                    class="ui-btn ui-btn-up-c ui-btn-icon-right ui-li-has-arrow ui-li"><div
                        class="ui-btn-inner ui-li">
                        <div class="ui-btn-text">
                            <a href="#/politecnica_virtual/principal.upm&amp;ui-page=0-17"
                                class="ui-link-inherit"><span>Utilidades</span></a>
                        </div>
                        <span class="ui-icon ui-icon-arrow-r ui-icon-shadow">&nbsp;</span>
                    </div></li>
                <li data-corners="false" data-shadow="false" data-iconshadow="true"
                    data-wrapperels="div" data-icon="arrow-r" data-iconpos="right"
                    data-theme="c"
                    class="ui-btn ui-btn-up-c ui-btn-icon-right ui-li-has-arrow ui-li"><div
                        class="ui-btn-inner ui-li">
                        <div class="ui-btn-text">
                            <a href="#/politecnica_virtual/principal.upm&amp;ui-page=0-6"
                                class="ui-link-inherit"><span>Formación</span></a>
                        </div>
                        <span class="ui-icon ui-icon-arrow-r ui-icon-shadow">&nbsp;</span>
                    </div></li>
                <li data-corners="false" data-shadow="false" data-iconshadow="true"
                    data-wrapperels="div" data-icon="arrow-r" data-iconpos="right"
                    data-theme="c"
                    class="ui-btn ui-btn-up-c ui-btn-icon-right ui-li-has-arrow ui-li ui-last-child"><div
                        class="ui-btn-inner ui-li">
                        <div class="ui-btn-text">
                            <a href="#/politecnica_virtual/principal.upm&amp;ui-page=0-3"
                                class="ui-link-inherit"><span>Atención al usuario</span></a>
                        </div>
                        <span class="ui-icon ui-icon-arrow-r ui-icon-shadow">&nbsp;</span>
                    </div></li>
            </ul>
            <!-- Menu Seccion Cierre -->
            <div class="ui-body ui-body-b">
                <!-- Informacion Principal -->
                <div id="informacion_principal">
                    <!--Una consulta-->
                    <!-- Cabecera de Seccion -->
                    <h2>Tablón de notas</h2>
                    <!-- Cierre Cabecera de Seccion -->

                    <!-- Contenido de la Seccion -->
                    <h3 class="destacado_flecha_naranja">Información. Tablón de
                        notas</h3>

                    <div class="separador_inferior">
                        <link rel="stylesheet"
                            href="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.1/themes/base/jquery-ui.css">
                        <link rel="stylesheet"
                            href="comun_publica/estilos/jquery_modificaciones.css">
                        <input type="hidden" name="filtro_expediente_mio"
                            id="filtro_expediente_mio" value="67100"> <input
                            type="hidden" name="filtro_plan_mio" id="filtro_plan_mio"
                            value="59SC"> <input type="hidden" name="filtro_codnum"
                            id="filtro_codnum" value=""> <input type="hidden"
                            name="confirma" id="confirma" value="N"> <input
                            type="hidden" name="tipo_revision" id="tipo_revision" value="">
                        <p>En esta pantalla se pueden consultar las calificaciones
                            provisionales de las asignaturas matriculadas en el año
                            académico en curso.</p>
                        <p class="advertencia">Para consultar calificiaciones
                            definitivas de convocatorias finalizadas puede hacerlo desde la
                            opción "Mis Datos - Expediente".</p>
                    </div>
                    <div id="contenido_seccion" class="separador_inferior">
                        <h3 class="destacado_flecha_naranja">Asignaturas en las que
                            está matriculado en 2013-14</h3>
                        <p>A continuación puede ver todas las convocatorias
                            disponibles para las asignaturas que usted tiene matriculadas. A
                            medida que vaya superándolas se irán eliminando de la lista.</p>
                        <table data-role="table" class="ui-table ui-table-reflow">
                            <caption>CONVOCATORIA DE FEBRERO</caption>
                            <thead>
                                <tr>
                                    <th>Asignatura</th>
                                    <th style="width: 10%;">Nota</th>
                                    <th style="width: 46%;">Información</th>
                                </tr>
                            </thead>
                            <tbody>
                                <tr>
                                    <td><b class="ui-table-cell-label">Asignatura</b>MICROPROCESADORES<br>Laboratorio:
                                        Superado</td>
                                    <td><b class="ui-table-cell-label">Nota</b>1.7 (S)</td>
                                    <td><b class="ui-table-cell-label">Información</b><a
                                        href="javascript:document.getElementById('fichero').value='2013142272FEB.pdf';document.getElementById('f3').submit();"
                                        class="descarga_pdf ui-link">Descargar examen</a><br> <strong>Fecha
                                            límite para solicitar revisión:</strong> 27/01/2014 00:00 <br>
                                        Ha finalizado el plazo para solicitar revisión.</td>
                                </tr>
                            </tbody>
                        </table>
                        <table data-role="table" class="ui-table ui-table-reflow">
                            <caption>CONVOCATORIA DE JULIO</caption>
                            <thead>
                                <tr>
                                    <th>Asignatura</th>
                                    <th style="width: 10%;">Nota</th>
                                    <th style="width: 46%;">Información</th>
                                </tr>
                            </thead>
                            <tbody>
                                <tr>
                                    <td><b class="ui-table-cell-label">Asignatura</b>ELECTROMAGNETISMO
                                        Y ONDAS</td>
                                    <td><b class="ui-table-cell-label">Nota</b></td>
                                    <td><b class="ui-table-cell-label">Información</b></td>
                                </tr>
                                <tr>
                                    <td><b class="ui-table-cell-label">Asignatura</b>MICROPROCESADORES</td>
                                    <td colspan="2" style="font-style: italic;"><b
                                        class="ui-table-cell-label">Nota</b>Está línea será eliminada
                                        si supera la asignatura en la convocatoria anterior.</td>
                                </tr>
                            </tbody>
                        </table>

                        <div style="display: none;">
                            <!-- placeholder for modal_solicitud_online -->
                        </div>


                        <form id="f3" name="f3"
                            action="/politecnica_virtual/comun_publica/varios/descarga.php"
                            method="post">
                            <input type="hidden" id="fichero" name="fichero" value="">
                            <input type="hidden" id="dir" name="dir" value="actas">


                            <!-- Cierre Contenido de la Seccion -->
                        </form>
                    </div>
                </div>
                <!-- Cierre Informacion Principal Cierre -->
            </div>

            <form id="form_webmail"
                action="/politecnica_virtual/comun_publica/varios/urlcorreo.upm"
                target="_blank" method="post" data-ajax="false">
                <fieldset>
                    <input type="hidden" name="UPMSSID" id="UPMSSID"
                        value="32l0ntbeklovmqom0fmp8jkgo2">
                </fieldset>
            </form>

        </div>
    </form>
    <!-- Content Cierre -->
    <!-- Pie de Pagina -->
    <div data-role="footer" style="text-align: center;"
        class="ui-footer ui-bar-a" role="contentinfo">
        <div data-role="controlgroup" data-type="horizontal" data-mini="true"
            class="ui-corner-all ui-controlgroup ui-controlgroup-horizontal ui-mini"
            aria-disabled="false" data-disabled="false" data-shadow="false"
            data-corners="true" data-exclude-invisible="true"
            data-init-selector=":jqmData(role='controlgroup')">
            <div class="ui-controlgroup-controls">
                <!-- Acceso a Webmail -->
                <a
                    href="javascript:document.getElementById('form_webmail').submit();"
                    data-role="button" data-corners="true" data-shadow="true"
                    data-iconshadow="true" data-wrapperels="span" data-theme="a"
                    class="ui-btn ui-btn-up-a ui-shadow ui-btn-corner-all ui-first-child"><span
                    class="ui-btn-inner"><span class="ui-btn-text">Webmail</span></span></a>
                <!-- Acceso a Webmail Cierre -->
                <a
                    href="javascript: document.getElementById('carpeta_activa').value='S';document.getElementById('accion').value='19_7_379'; document.getElementById('f').submit();"
                    title="Buscar en el directorio" data-role="button"
                    data-corners="true" data-shadow="true" data-iconshadow="true"
                    data-wrapperels="span" data-theme="a"
                    class="ui-btn ui-btn-up-a ui-shadow ui-btn-corner-all"><span
                    class="ui-btn-inner"><span class="ui-btn-text">Directorio</span></span></a>
                <a
                    href="javascript: document.getElementById('carpeta_activa').value='S';document.getElementById('accion').value='27_2_388'; document.getElementById('f').submit();"
                    title="Cambio de contraseña" data-role="button"
                    data-corners="true" data-shadow="true" data-iconshadow="true"
                    data-wrapperels="span" data-theme="a" class="ui-btn ui-btn...

它以...结尾,不知道为什么。 有什么解决办法吗?

抱歉,如果这是一个愚蠢的问题:)

最佳答案

您可以使用 Java 中可用的 SAX 库将其解析为 XML,也可以将其作为文件读取。

URL fileloc = new URL("url");
File html = new File(fileloc);

或者,如果您想在网页加载时预取数据并从 URL(EditText)获取文件

//From onclick listener
EditText url = (EditText) findViewById(R.id.url);
String hfile = url.getText().toString();
MyWebView.loadUrl(hfile);
URL html = new URL(hfile);
File file = new File(html);

然后将 html 作为字符串输出。

关于javascript - 无法从 WebView Android 获取整个 HTML 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21462901/

相关文章:

javascript - Ajax url 包含数据

javascript - 固定定位的 div 应该在用户滚动到页面下方的表单后在顶部标题位置可见

javascript - 从服务 AngularJs 中修改 $scope

javascript - 基于复选框类的单击功能不起作用

Javascript 在 php 项目中不起作用,用户仍然被路由到 php 页面而不是保留在当前页面

java - 单击时 CardView 展开/折叠不正确

java - 计算 SHA-256 哈希时前导零

android - 如何以随机方向对 android Imageview 进行动画处理?

html - 我可以控制 IE 10 选择框的定位吗?

javascript - 如何防止 CSS 伪元素在动画期间消失?