Najlepszy sposób na wyświetlenie wygenerowanego Źródła strony internetowej?

Szukam narzÄ ™ dzia, ktĂłre da mi odpowiednie wygenerowane ĹşrĂłdĹ ' o zawierajÄ ... ce zmiany domĂłw wykonane przez Ajax wymagajÄ ... ce wprowadzenia do walidatora W3. Wypróbowałem następujące metody:

  1. Web Developer Toolbar - generuje nieprawidłowe źródło zgodnie z typem dokumentu (np. usuwa samozamykającą się część znaczników). Traci część doctype strony.
  2. Firebug - naprawia potencjalne wady w źródle (np. nieujawnione tagi). Traci również część doctype tagów i wstrzykuje konsolę, która sama w sobie jest nieprawidłowym HTML.
  3. IE Developer Toolbar-generuje niepoprawne źródło zgodnie z typem dokumentu (np. sprawia, że wszystkie znaczniki są pisane wielkimi literami w stosunku do specyfikacji XHTML).
  4. Podświetl + Wyświetl źródło wyboru-często trudno uzyskać całą stronę, wyklucza również typ dokumentu.

Czy Jest jakiś program lub dodatek, który da mi dokładną aktualną wersję źródła, Bez naprawiania lub zmieniania go w jakiś sposób? Jak na razie Firebug wydaje się najlepszy, ale obawiam się, że może naprawić niektóre z moich błędów.

Rozwiązanie

Okazuje się, że nie ma dokładnego rozwiązania tego, czego chciałem, jak wyjaśnił Justin. Najlepszym rozwiązaniem wydaje się sprawdzenie źródła wewnątrz konsoli Firebug, mimo że będzie ono zawierać błędy spowodowane przez Firebug. Chciałbym również podziękować Forgotten średnik za wyjaśnienie, dlaczego "View Generated Source"nie pasuje do rzeczywistego źródła. Gdybym mógł zaznaczyć 2 najlepsze odpowiedzi, zrobiłbym to.

Author: Brock Adams, 2009-11-17

16 answers

[Aktualizacja w odpowiedzi na więcej szczegółów w edytowanym pytaniu]

Problem, który napotkasz, polega na tym, że gdy strona jest modyfikowana przez żądania ajax, bieżący HTML istnieje tylko wewnątrz DOM przeglądarki - nie ma już żadnego niezależnego kodu źródłowego HTML, który możesz zweryfikować inaczej niż to, co możesz wyciągnąć z DOM.

Jak już zauważyłeś, Dom IE przechowuje znaczniki wielkimi literami, naprawia nierozdzielone znaczniki i wprowadza wiele innych zmian w HTML, który otrzymał oryginalnie. Dzieje się tak dlatego, że przeglądarki są na ogół bardzo dobre w przyjmowaniu kodu HTML z problemami (np. nierozdzielone znaczniki) i naprawianiu tych problemów, aby wyświetlić coś użytecznego dla użytkownika. Gdy HTML został kanoniczny przez IE, oryginalny źródłowy HTML jest zasadniczo utracony z perspektywy DOM, o ile wiem.

Firefox najbardziej lubi te zmiany, więc Firebug jest chyba lepszym rozwiązaniem.

Ostatnia (i bardziej pracochłonna) opcja może działać dla stron z proste modyfikacje ajax, np. pobranie kodu HTML z serwera i zaimportowanie go do strony wewnątrz danego elementu. W takim przypadku możesz użyć fiddler lub podobnego narzędzia, aby ręcznie połączyć oryginalny HTML z AJAX HTML. Jest to prawdopodobnie więcej kłopotów niż jest warte, i jest podatny na błędy, ale to jeszcze jedna możliwość.

[oryginalna odpowiedź tutaj na oryginalne pytanie]

Fiddler ( http://www.fiddlertool.com / ) jest wolnym, niezależne od przeglądarki narzędzie, które działa bardzo dobrze, aby pobrać dokładny HTML otrzymany przez przeglądarkę. Pokazuje dokładne bajty na przewodzie, a także dekodowaną/rozpakowaną zawartość / etc, którą można wprowadzić do dowolnego narzędzia analizy HTML. Pokazuje również nagłówki, timingi, status HTTP i wiele innych dobrych rzeczy.

Możesz również użyć programu fiddler do kopiowania i odbudowywania żądań, jeśli chcesz sprawdzić, jak serwer reaguje na nieco inne nagłówki.

Fiddler pracuje jako serwer proxy, siedząc pomiędzy twoja przeglądarka i witryna oraz rejestruje ruch w obie strony.

 32
Author: Justin Grant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-17 19:10:08

Justin jest martwy. Kluczowym punktem jest tutaj to, że HTML jest tylko językiem opisującym dokument. Gdy przeglądarka go przeczyta, zniknie . Open tags, close tags i formatowanie są obsługiwane przez parser , a następnie go away. Każde narzędzie, które wyświetla HTML jest generuje go na podstawie zawartości dokumentu, więc zawsze będzie poprawny.

Musiałem kiedyś wyjaśnić to innemu programiście i trochę zajęło mu zaakceptowanie tego to.

Możesz spróbować samodzielnie w dowolnej konsoli JavaScript:

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

Znaczniki zamknięte i nazwy znaczników pisane wielkimi literami zniknęły, ponieważ HTML został przetworzony i odrzucony po drugiej linii.

Właściwym sposobem modyfikacji dokumentu z JavaScript są metody document(createElement, appendChild, setAttribute, itd.) i zauważysz, że w żadnej z tych funkcji nie ma odniesienia do znaczników ani składni HTML. Jeśli używasz document.write, innerHTML, lub inne wywołania mówiące w języku HTML, aby zmodyfikować swoje strony, jedynym sposobem, aby to zweryfikować, jest złapanie tego, co wkładasz do nich i zweryfikowanie tego HTML oddzielnie.

To powiedziawszy, najprostszym sposobem na uzyskanie reprezentacji HTML dokumentu jest:

document.documentElement.innerHTML
 34
Author: s4y,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-17 20:38:19

Wiem, że to stary post, ale właśnie znalazłem ten kawałek złota . To jest stare (2006), ale nadal działa z IE9. Dodałem do tego zakładkę.

Po prostu skopiuj wklej to w pasku adresu przeglądarki:

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

Jeśli chodzi o Firefoksa, pasek narzędzi Web developper robi to zadanie. Zazwyczaj używam tego, ale czasami, jakaś brudna 3rd party asp.net kontrolki generują różne znaczniki na podstawie agenta użytkownika...

EDIT

Jak wskazał Bryan w komentarz, jakaś przeglądarka usuwa javascript: część podczas kopiowania/wklejania w pasku adresu url. Właśnie testowałem i tak jest w przypadku IE10.

 21
Author: Johnny5,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-13 22:10:39

Jeśli załadujesz dokument w Chrome, widok Developer|Elements pokaże Ci kod HTML w postaci kodu JS. Nie jest to bezpośrednio tekst HTML i musisz otworzyć (rozwinąć) wszelkie interesujące Cię elementy, ale skutecznie możesz sprawdzić wygenerowany HTML.

 12
Author: Carl Smotricz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-17 19:16:46

Na pasku narzędzi Web Developer próbowałeś już opcji Tools -> Validate HTML LUB Tools -> Validate Local HTML?

Opcja Validate HTML wysyła adres url do walidatora, który działa dobrze z publicznie dostępnymi witrynami. Opcja Validate Local HTML wysyła kod HTML bieżącej strony do walidatora, który działa dobrze ze stronami za loginem lub tymi, które nie są publicznie dostępne.

Możesz również spróbować wyświetlić wykres źródłowy (również jako dodatek do Firefoksa). Ciekawa notka:

Q. Dlaczego czy Widok wykresu Źródła zmienia moje znaczniki XHTML na znaczniki HTML?

A. Nie. przeglądarka wprowadza te zmiany, VSC wyświetla jedynie to, co przeglądarka zrobiła z Twoim kodem. Najczęściej: tagi samozamykające tracą ukośnik zamykający (/). zobacz ten artykuł na Rendered Source aby uzyskać więcej informacji (archive.org).

 11
Author: Forgotten Semicolon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-27 07:59:07

Używanie paska narzędzi Firefox Web Developer ( https://addons.mozilla.org/en-US/firefox/addon/60 )

Po prostu przejdź do View Source - > View Generated Source

Używam go cały czas do dokładnie tego samego.

 5
Author: lewsid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-17 18:58:10

Miałem ten sam problem i znalazłem tu rozwiązanie:

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

Więc, aby użyć Łom, narzędzie stąd:

Http://simile.mit.edu/wiki/Crowbar (Teraz (2015-12) 404s)
wayback machine link:
http://web.archive.org/web/20140421160451/http://simile.mit.edu/wiki/Crowbar

Dał mi wadliwy, nieprawidłowy HTML.

 5
Author: adamvagyok,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-08 18:34:16

To stare pytanie, a oto stara odpowiedź, która kiedyś działała dla mnie bez zarzutu przez wiele lat, ale już nie, przynajmniej nie od stycznia 2016 roku: {]}

Bookmarklet "Generated Source" Z SquareFree robi dokładnie to, co chcesz-i, w przeciwieństwie do "starego złota" z @ Johnny5, wyświetla się jako kod źródłowy (zamiast być renderowane normalnie przez przeglądarkę, przynajmniej w przypadku Google Chrome na Mac):

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

Niestety, zachowuje się jak "stare złoto" z @ Johnny5: nie pojawia się już jako kod źródłowy. Przepraszam.

 5
Author: Dave Land,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-11 20:33:56

W Firefoksie po prostu ctrl-a (Zaznacz wszystko na ekranie), a następnie kliknij prawym przyciskiem myszy "Wyświetl źródło wyboru". To rejestruje wszelkie zmiany wprowadzone przez JavaScript do DOM.

 4
Author: Mike_K,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-26 15:09:33

Alert(document.documentElement.outerHTML);

 4
Author: JohnnyFaldo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-10 12:01:58

Dlaczego nie wpisać this is the urlbar?

javascript:alert(document.body.innerHTML)
 3
Author: Mike,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-27 16:19:45

Na karcie Elementy kliknij prawym przyciskiem myszy węzeł html > Kopiuj > Kopiuj element , a następnie wklej do edytora.

Jak wspomniano powyżej, po przekonwertowaniu źródła do drzewa DOM, oryginalne źródło nie istnieje już w przeglądarce. Wszelkie zmiany, których dokonasz, będą dotyczyć DOM, a nie Źródła.

Możesz jednak przetworzyć zmodyfikowany DOM z powrotem do HTML, pozwalając zobaczyć "wygenerowane źródło".

  1. w Chrome otwórz Narzędzia programistyczne i kliknij elementy tab.
  2. Kliknij prawym przyciskiem myszy element HTML.
  3. wybierz Kopiuj > Kopiuj element.
  4. wklej do edytora.

Możesz teraz zobaczyć bieżący DOM jako stronę HTML.

To nie jest pełny DOM

Zauważ, że DOM nie może być w pełni reprezentowany przez dokument HTML. Dzieje się tak dlatego, że DOM ma o wiele więcej właściwości niż HTML ma atrybuty. Jednak to będzie rozsądne zadanie.

 3
Author: superluminary,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-01 19:08:31

Myślę, że IE dev tools (F12) ma; View > Source > DOM (Page)

Musisz skopiować i wkleić DOM i zapisać go, aby wysłać do walidatora.

 2
Author: Will Hancock,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-26 15:20:48

Jedyne co znalazłem to BetterSource rozszerzenie dla Safari to pokaże Ci zmanipulowane źródło dokumentu tylko minusem jest nic zdalnie takiego jak dla Firefoksa

 1
Author: ellisgeek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-10 03:20:22

Poniższy urywek kodu javascript zapewni Ci pełne źródło generowane przez ajax renderowane HTML. Niezależny od przeglądarki. Enjoy :)

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 ;
 1
Author: Sathish,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-24 14:41:54

Udało mi się rozwiązać podobny problem, rejestrując wyniki wywołania ajax do konsoli. To był html zwrócony i mogłem łatwo zobaczyć wszelkie problemy, które miał.

W moim .funkcja done () mojego wywołania ajax dodałem konsolę.log(results), żebym mógł zobaczyć html w konsoli debuggera.

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");
    });
}
 0
Author: ebarke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-02 12:24:57