¿La mejor manera de ver la fuente generada de la página web?


84

Estoy buscando una herramienta que me proporcione la fuente generada adecuada, incluidos los cambios DOM realizados por las solicitudes de entrada de AJAX en el validador de W3. Probé los siguientes métodos:

  1. Barra de herramientas del desarrollador web : genera una fuente no válida según el tipo de documento (por ejemplo, elimina la parte de cierre automático de las etiquetas). Pierde la parte de tipo de documento de la página.
  2. Firebug : corrige posibles fallas en la fuente (por ejemplo, etiquetas sin cerrar). También pierde la parte del tipo de documento de las etiquetas e inyecta la consola, que en sí misma es HTML no válido.
  3. Barra de herramientas para desarrolladores de IE: genera una fuente no válida de acuerdo con el tipo de documento (por ejemplo, hace que todas las etiquetas estén en mayúsculas, según las especificaciones XHTML).
  4. Resaltar + Ver fuente de selección: con frecuencia es difícil obtener toda la página, también excluye el tipo de documento.

¿Existe algún programa o complemento que me proporcione la versión actual exacta de la fuente, sin corregirla o cambiarla de alguna manera? Hasta ahora, Firebug parece el mejor, pero me preocupa que pueda corregir algunos de mis errores.

Solución

Resulta que no hay una solución exacta para lo que quería, como explicó Justin. La mejor solución parece ser validar la fuente dentro de la consola de Firebug, aunque contendrá algunos errores causados ​​por Firebug. También me gustaría agradecer a Forgotten Semicolon por explicar por qué "Ver fuente generada" no coincide con la fuente real. Si pudiera marcar 2 mejores respuestas, lo haría.


Hmmm, pensé que estaba pidiendo lo contrario: el HTML exacto emitido por el servidor. Jeremy?
Justin Grant

no importa, acabo de ver el nuevo comentario. Ahora tiene más sentido lo que intentas hacer, gracias por aclararlo. Actualizaré mi respuesta en consecuencia.
Justin Grant

Es notable que muchos espectadores de esta publicación no entendieron el punto principal, que es que la fuente estática no se puede usar para analizar páginas que han sido modificadas por JavaScript. Firebug es genial para esto, pero sería bueno si hubiera una herramienta de IE para hacer lo mismo, ya que la compatibilidad del navegador es un gran problema con IE.
Paul Keister

1
Firebug no corrige ningún error en HTML. Simplemente renderiza etiquetas fuera del DOM de Firefox. Firebug 1.6 evita agregar elementos; para todas las versiones de Firebug, puede evitar cambiar el DOM desactivando el panel de la Consola.
johnjbarton

1
¡Acabo de aprender mucho de esta pregunta!
Sergey Orshanskiy

Respuestas:


32

[actualización en respuesta a más detalles en la pregunta editada]

El problema con el que se está encontrando es que, una vez que una página es modificada por solicitudes ajax, el HTML actual existe solo dentro del DOM del navegador; ya no hay ningún código fuente HTML independiente que pueda validar más que lo que puede extraer DOM.

Como ha observado, el DOM de IE almacena las etiquetas en mayúsculas, corrige las etiquetas no cerradas y hace muchas otras alteraciones en el HTML que obtuvo originalmente. Esto se debe a que los navegadores son generalmente muy buenos para tomar HTML con problemas (por ejemplo, etiquetas no cerradas) y solucionar esos problemas para mostrar algo útil al usuario. Una vez que el HTML ha sido canonicalizado por IE, el HTML fuente original se pierde esencialmente desde la perspectiva del DOM, hasta donde yo sé.

Lo más probable es que Firefox haga menos de estos cambios, por lo que Firebug probablemente sea tu mejor opción.

Una opción final (y más laboriosa) puede funcionar para páginas con alteraciones simples de Ajax, por ejemplo, obtener algo de HTML del servidor e importarlo a la página dentro de un elemento en particular. En ese caso, puede usar Fiddler o una herramienta similar para unir manualmente el HTML original con el HTML Ajax. Esto probablemente sea más problemático de lo que vale y es propenso a errores, pero es una posibilidad más.

[Respuesta original aquí a la pregunta original]

Fiddler ( http://www.fiddlertool.com/ ) es una herramienta gratuita e independiente del navegador que funciona muy bien para obtener el código HTML exacto recibido por un navegador. Le muestra los bytes exactos en el cable, así como el contenido descodificado / descomprimido / etc.que puede introducir en cualquier herramienta de análisis HTML. También muestra encabezados, tiempos, estado HTTP y muchas otras cosas buenas.

También puede usar Fiddler para copiar y reconstruir solicitudes si desea probar cómo responde un servidor a encabezados ligeramente diferentes.

Fiddler funciona como un servidor proxy, ubicado entre su navegador y el sitio web, y registra el tráfico en ambos sentidos.


Familiarizado con Fiddler, no es una manera fácil de hacer lo que quiero (ver la fuente generada de una página después de que el usuario la haya cambiado).
Jeremy Kauffman

1
quiere la fuente de la página después de que javascript haya modificado el dominio.
Byron Whitlock

No soy el votante negativo, pero su respuesta no tiene nada que ver con la pregunta en sí. Es posible que la pregunta se haya editado desde que comentaste.
bradlis7

sí, lo sé ahora ... aunque la pregunta original no mencionó ese detalle importante. :-) Una vez que obtuve la nueva información del OP, acabo de actualizar mi respuesta. Pero creo que mi respuesta original fue una respuesta razonable a la pregunta original. Aunque no es la mejor respuesta (¡me gusta mucho más Forgotten Semicolon!), Me pregunto qué hizo que mi respuesta mereciera un voto negativo. No es gran cosa, solo me pregunto.
Justin Grant

Gracias por esta explicación sobre el HTML actual que existe solo dentro del DOM del navegador. Este es el meollo de mi problema y no lo entendí cuando pregunté. Me hace creer que lo que estoy pidiendo es esencialmente imposible.
Jeremy Kauffman

34

Justin está muerto. El punto clave aquí es que HTML es solo un lenguaje para describir un documento. Una vez que el navegador lo lee, desaparece . El analizador se encarga de las etiquetas abiertas, las etiquetas de cierre y el formateo y luego desaparecen . Cualquier herramienta que te muestre HTML lo está generando en base al contenido del documento, por lo que siempre será válido.

Tuve que explicarle esto a otro desarrollador web una vez, y él tardó un poco en aceptarlo.

Puede probarlo usted mismo en cualquier consola de JavaScript:

el = document.createElement('div');
el.innerHTML = "<p>Some text<P>More text";
el.innerHTML; // <p>Some text</p><p>More text</p>

Las etiquetas no cerradas y los nombres de las etiquetas en mayúsculas desaparecieron porque ese HTML se analizó y se descartó después de la segunda línea.

La forma correcta de modificar el documento de JavaScript está con documentmétodos ( createElement, appendChild, setAttribute, etc.) y vas a observar que no hay ninguna referencia a las etiquetas HTML o de sintaxis en cualquiera de esas funciones. Si está utilizando document.write, innerHTMLu otras llamadas que hablan HTML para modificar sus páginas, la única forma de validarlo es captar lo que está poniendo en ellas y validar ese HTML por separado.

Dicho esto, la forma más sencilla de obtener la representación HTML del documento es la siguiente:

document.documentElement.innerHTML

1
Entonces, para reformular esta respuesta, esto es como compilar un programa, optimizar o modificar el código con alguna herramienta o incluso infectar el programa con un virus, y luego pedir el código fuente del resultado. La transformación HTML-> DOM es una función unidireccional.
Sergey Orshanskiy

+1, santo infierno, que funciona para ver el código antes y después de cada modificación. pensamiento muy inteligente! Gracias
jimjim

Esto puede ser cierto, pero no responde del todo a la pregunta. Es perfectamente posible convertir el DOM manipulado actual de nuevo a HTML, lo que le permite "ver la fuente generada". En ocasiones, esto es bastante útil, por ejemplo, si necesita comparar una sola pieza de JavaScript con un arnés de prueba realista.
superluminario

21

Sé que esta es una publicación antigua, pero acabo de encontrar esta pieza de oro . Esto es antiguo (2006), pero todavía funciona con IE9. Personalmente agregué un marcador con esto.

Simplemente copie y pegue esto en la barra de direcciones de su navegador:

javascript:void(window.open("javascript:document.open(\"text/plain\");document.write(opener.document.body.parentNode.outerHTML)"))

En cuanto a Firefox, la barra de herramientas del desarrollador web hace el trabajo. Normalmente uso esto, pero a veces, algunos controles asp.net sucios de terceros generan diferentes marcas basadas en el agente de usuario ...

EDITAR

Como Bryan señaló en el comentario, algunos navegadores eliminan la javascript:parte al copiar / pegar en la barra de URL. Acabo de probar y ese es el caso con IE10.


¡Vaya, esto es ORO PURO! Funciona muy bien con un solo clic en el marcador. Al menos, lo hizo en Firefox hace un momento. Con Chrome, la ventana emergente se renderizó, ¿tal vez ignora el "texto / sin formato"?
Jon Coombs

Copio, pego esto en la barra de direcciones de mi navegador y ENTRAR, no pasa nada
eMi

1
@eMi Tengo IE10 aquí, y no me deja pegar la javascript:parte, tengo que escribirlo manualmente. Quizás eso es lo que pasa. Verifique lo que está pegado.
Johnny5

1
En Google Chrome (al menos a partir de v44.0.2403.155) en Mac OSX, el marcador de @ Johnny5 no da como resultado una página de texto sin formato que contenga la fuente del abridor, pero Chrome intenta representar el HTML, pero sin CSS, por su apariencia.
Dave Land

@ Johnny5 podría valer la pena mencionar como una nota en la respuesta que javascript:se corta al copiar / pegar en algunos navegadores. Acabo de tener ese problema en Chrome.
Bryan

12

Si carga el documento en Chrome, la Developer|Elementsvista le mostrará el HTML manipulado por su código JS. No es directamente texto HTML y debe abrir (desplegar) cualquier elemento de interés, pero efectivamente puede inspeccionar el HTML generado.


11
En Google Chrome, en Inspeccionar elemento, puede hacer clic derecho en cualquier elemento y "Copiar como HTML"
JasonPlutext

3
@Jason Muchas gracias por esto. Hacer clic derecho en el elemento <html> y elegir "Copiar como HTML" me dio exactamente lo que necesitaba en Chrome hoy.
DaveGauer

11

En la barra de herramientas para desarrolladores web, ¿ha probado las opciones Tools -> Validate HTMLo Tools -> Validate Local HTML?

La Validate HTMLopción envía la URL al validador, que funciona bien con sitios públicos. La Validate Local HTMLopción envía el HTML de la página actual al validador, que funciona bien con páginas detrás de un inicio de sesión o aquellas que no son de acceso público.

También puede probar Ver gráfico fuente (también como complemento de FireFox ). Una nota interesante ahí:

P. ¿Por qué Ver gráfico fuente cambia mis etiquetas XHTML a etiquetas HTML?

R. No es así. El navegador está realizando estos cambios, VSC simplemente muestra lo que el navegador ha hecho con su código. Más común: las etiquetas de cierre automático pierden su barra de cierre (/). Consulte este artículo sobre Rendered Source para obtener más información (archive.org) .


No hice el voto negativo, pero "validar HTML" no enviará el HTML generado, sino la fuente original. (Vea la pregunta editada)
Pekka

Acabo de probar esto, no parece enviar la fuente generada (es decir, la fuente con cambios DOM), sino la fuente que se vería con la opción "ver fuente" de Firefox.
Jeremy Kauffman

¡Cambiándome los postes!
Punto y coma olvidado

1
Pensé que "ver fuente generada" aclararía esa parte de la pregunta, pero a juzgar por las 4 respuestas hasta ahora, estaba claramente equivocado :)
Jeremy Kauffman

El enlace a Ver gráfico fuente está roto
Casebash

6

Usando la barra de herramientas para desarrolladores web de Firefox ( https://addons.mozilla.org/en-US/firefox/addon/60 )

Simplemente vaya a Ver fuente -> Ver fuente generada

Lo uso todo el tiempo para exactamente lo mismo.


Y ahora veo su edición donde cita el problema Doctype con la barra de herramientas. Esa es una crítica justa y no tengo nada más que sugerir.
lewsid

3
Funciona muy bien y ahora está integrado en Vanilla Firefox. Ctrl + A, clic derecho, E. Además, vea el excelente bookmarklet que encontró Johnny5.
Jon Coombs

En Firefox: haga clic con el botón derecho en la página con el contenido generado que desea ver, luego Desarrollador web> Ver código fuente> Ver código fuente generado
Mark Gavagan

5

Tuve el mismo problema y aquí encontré una solución:

http://ubuntuincident.wordpress.com/2011/04/15/scraping-ajax-web-pages/

Entonces, para usar Crowbar, la herramienta de aquí:

http://simile.mit.edu/wiki/Crowbar (ahora (2015-12) 404s)
enlace de la máquina de retorno:
http://web.archive.org/web/20140421160451/http://simile.mit.edu/ wiki / palanca

Me dio el HTML defectuoso e inválido.


Consulte también las otras partes de esta serie: Parte 2 , Parte 3 .
Jabba

la palanca ya no parece estar allí
Mousey

No es demasiado fácil de usar, pero aún se puede descargar a través de SVN: devres.zoomquiet.io/data/20110810165553/index.html
adamvagyok

5

Esta es una pregunta antigua, y aquí hay una respuesta antigua que una vez me ha funcionado perfectamente durante muchos años , pero que ya no funciona, al menos no en enero de 2016:

El marcador "Fuente generada" de SquareFree hace exactamente lo que usted desea y, a diferencia del "oro viejo" de @ Johnny5, que por lo demás es bueno, se muestra como código fuente (en lugar de ser procesado normalmente por el navegador, al menos en el caso de Google Chrome en Mac):

https://www.squarefree.com/bookmarklets/webdevel.html#generated_source

Desafortunadamente, se comporta como el "oro viejo" de @ Johnny5: ya no aparece como código fuente. Lo siento.


4

En Firefox, simplemente presione Ctrl-A (seleccione todo en la pantalla) y luego haga clic derecho en "Ver fuente de selección". Esto captura cualquier cambio realizado por JavaScript al DOM.


No funciona si la página se ha enganchado al clic derecho.
Kevin Whitefoot


3

¿Por qué no escribir esta es la barra de direcciones?

javascript:alert(document.body.innerHTML)

1
+1: No me funcionó en la barra de direcciones en IE 10, pero funcionó a la perfección en la consola de las herramientas de desarrollo de IE.
SausageFingers

3

En la pestaña de elementos, haga clic con el botón derecho en el nodo html> copiar> copiar elemento, luego pegue en un editor.

Como se mencionó anteriormente, una vez que la fuente se ha convertido en un árbol DOM, la fuente original ya no existe en el navegador. Cualquier cambio que realice será en el DOM, no en la fuente.

Sin embargo, puede volver a analizar el DOM modificado en HTML, lo que le permite ver la "fuente generada".

  1. En Chrome, abra las herramientas para desarrolladores y haga clic en la pestaña de elementos.
  2. Haz clic derecho en el elemento HTML.
  3. Elija copiar> copiar elemento.
  4. Pegar en un editor.

Ahora puede ver el DOM actual como una página HTML.

Este no es el DOM completo

Tenga en cuenta que el DOM no se puede representar completamente mediante un documento HTML. Esto se debe a que DOM tiene muchas más propiedades que atributos HTML. Sin embargo, esto hará un trabajo razonable.


2

Creo que las herramientas de desarrollo de IE (F12) tienen; Ver> Fuente> DOM (página)

Debería copiar y pegar el DOM y guardarlo para enviarlo al validador.


Es posible que también desee; Archivo> Personalizar fuente de vista de Exploradores de Internet> Bloc de notas para guardar fácilmente cuando haga lo anterior.
Will Hancock

1

Lo único que encontré es la extensión BetterSource para Safari, esto le mostrará la fuente manipulada del documento, el único inconveniente es que no se parece en nada a Firefox.


1

El siguiente fragmento de código javascript le proporcionará la fuente completa generada en HTML renderizado ajax. Navegador independiente. Disfruta :)

function outerHTML(node){
    // if IE, Chrome take the internal method otherwise build one as lower versions of firefox
        //does not support element.outerHTML property
  return node.outerHTML || (
      function(n){
          var div = document.createElement('div'), h;
          div.appendChild( n.cloneNode(true) );
          h = div.innerHTML;
          div = null;
          return h;
      })(node);
  }


 var outerhtml = outerHTML(document.getElementsByTagName('html')[0]);
var node = document.doctype;
var doctypestring="";
if(node)
{
     // IE8 and below does not have document.doctype and you will get null if you access it.

 doctypestring = "<!DOCTYPE "
         + node.name
         + (node.publicId ? ' PUBLIC "' + node.publicId + '"' : '')
         + (!node.publicId && node.systemId ? ' SYSTEM' : '') 
         + (node.systemId ? ' "' + node.systemId + '"' : '')
         + '>';
         }
         else

         {

             // for IE8 and below you can access doctype like this

         doctypestring = document.all[0].text;
         }
doctypestring +outerhtml ;

Creo que esto necesitaría instrucciones específicas sobre cómo usarlo. Supongo que pegaría el código en la página existente, pero ¿a dónde iría la salida?
Jon Coombs


0

Pude resolver un problema similar al registrar los resultados de la llamada ajax en la consola. Este fue el html devuelto y pude ver fácilmente cualquier problema que tuviera.

en mi función .done () de mi llamada ajax agregué console.log (resultados) para poder ver el html en la consola del depurador.

function GetReversals() {
    $("#getReversalsLoadingButton").removeClass("d-none");
    $("#getReversalsButton").addClass("d-none");

    $.ajax({
        url: '/Home/LookupReversals',
        data: $("#LookupReversals").serialize(),
        type: 'Post',
        cache: false
    }).done(function (result) {
        $('#reversalResults').html(result);
        console.log(result);
    }).fail(function (jqXHR, textStatus, errorThrown) {
        //alert("There was a problem getting results.  Please try again. " + jqXHR.responseText + " | " + jqXHR.statusText);
        $("#reversalResults").html("<div class='text-danger'>" + jqXHR.responseText + "</div>");
    }).always(function () {
        $("#getReversalsLoadingButton").addClass("d-none");
        $("#getReversalsButton").removeClass("d-none");
    });
}


@erbarke, ¿podría desarrollar más su respuesta, explicar con más detalles (código, flujo de acción detallado)?
Artem
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.