Używam cURL, aby uzyskać dostęp do wielu różnych stron. Chcę elegancki sposób sprawdzania, czy strona ma przekierowanie javascript. Mogłem sprawdzić obecność w ciele window.location
, ale ponieważ może to być wewnątrz pliku .js lub przy użyciu biblioteki takiej jak jQuery, wydaje się, że żadne rozwiązanie nie byłoby idealne. Ktoś ma jakieś pomysły?Wykryj, czy strona ma przekierowanie javascript
Odpowiedz
Dzięki Ikstar dla wskazując phantomjs wypracowałem następujący przykład:
test.js
var page = require('webpage').create();
var testUrls = [
"http://www.google.nl",
"http://www.example.com"
];
function testNextUrl()
{
var testUrl = testUrls.shift();
page.open(testUrl, function() {
var hasRedirect = page.url.indexOf(testUrl) !== 0;
console.log(testUrl + ": " + hasRedirect.toString());
if (testUrls.length) {
testNextUrl();
} else {
phantom.exit();
}
});
}
testNextUrl();
Wynik:
D:\Tools\phantomjs-1.7.0-windows>phantomjs test.js
http://www.google.nl: false
http://www.example.com: true
Jak działa Twój kod z przekierowaniami po stronie klienta JS? Czy zakończono by page.open przed uruchomieniem jakichkolwiek przekierowań JS? – CMCDragonkai
Nie można tego zrobić, parsując skrypt tylko. Tylko wykonanie pokaże ci prawdziwy przepływ strony JS strony.
Jednym ze sposobów naśladowania wykonania jest posiadanie różnych poziomów poziomu kodu z przekierowaniem. Górna część będzie pod tagiem <script>
, a wszelkie przekierowania będą tutaj prostym przekierowaniem. Jeśli jakieś przekierowania znajdują się wewnątrz funkcji, musisz śledzić strukturę programu i zgadywać.
To zależy od tego, co @madphp oznacza przez "ma przekierowanie javascript" ... Jeśli chce tylko wykryć obecność przekierowania, prosty parser, taki jak ten, który opisałem w komentarzach tego pytania, działałby dobrze. Jeśli chce wiedzieć, czy istnieje, i zostanie stracony, będzie musiał dokonać tych przypuszczeń. – renab
Tak, to jest problem. Zastanawiałem się, czy nie byłoby niewinnego powodu dla window.location w funkcji. Podobnie jak przekierowanie do wersji mobilnej lub strony niebędącej stroną flash. – madphp
@renab. Tak i dlatego przedstawiłem obie opinie. – footy
W zależności od celu użycia Curl i potrzebującego przekierowania na stronie. Możliwe jest włączenie bezgłowego frameworka, takiego jak PhantomJS (http://phantomjs.org/), aby wykonać niezbędne przeglądanie. Będziesz mógł zobaczyć, czy nastąpi przekierowanie, a także śledzić każdy inny javascript wykonywany na stronie.
- 1. Wykryj przekierowanie w iFrame
- 2. Wykryj, czy użytkownik ma możliwości drukowania?
- 3. Wykryj przekierowanie przy pomocy ruby mechanize
- 4. Przekierowanie JavaScript - nowe okno
- 5. Przekierowanie oparte na JavaScript: czy będzie bolało SEO?
- 6. Przekierowanie JavaScript oparte na Referrer?
- 7. testu strona przekierowanie z Kapibara + RSpec
- 8. JavaScript: Sprawdź, czy strona zawiera szczególne div
- 9. Strona serwera JavaScript: Dlaczego?
- 10. Czy JavaScript ma egzotyczne obiekty?
- 11. Czy JavaScript ma ocenę "Zwarcia"?
- 12. No-Script + Detection JavaScript Przekierowanie
- 13. Przekierowanie przycisku Javascript
- 14. URL Przekierowanie JavaScript
- 15. Wykryj, czy użytkownik użył przycisku Wstecz.
- 16. Wykryj znaki niedrukowalne w JavaScript
- 17. Angular2 Wykryj, czy element w widoku szablonu ma klasę
- 18. Wykryj, czy strona internetowa jest ładowana w natywnej aplikacji Facebook na iOS/Android
- 19. Javascript: Wykryj węzeł rodzica opiekuna
- 20. Wykryj rzeczywistą dostępną moc obliczeniową javascript
- 21. Wykryj, czy mysz znajduje się nad elementem, gdy strona ładuje się z Javascriptem
- 22. Opóźnienie strona zamknąć z JavaScript?
- 23. Zapobieganie ponownemu ładowaniu Javascript Strona
- 24. Wykryj język i przekierowanie do poddomeny w Symfony
- 25. Przekierowanie JavaScript z nagłówkiem autoryzacji
- 26. Testowanie kapibara, jeśli strona ma wyrażenie regularne
- 27. Wykryj, czy kolekcja zawiera dane
- 28. Wykryj pozycję końcową wyboru przy użyciu javascript
- 29. Wykryj, czy element przestał przewijać momentum?
- 30. Strona "Przekierowanie" bez odświeżania (styl zdjęć na Facebooku)
Nie (łatwo) możliwe proste polecenia curl, ponieważ curl nie obsługuje javascript. – PeeHaa
Tak, myślałem raczej o uruchamianiu znaczników za pomocą analizatora składni, zamiast go wykonywać. – madphp
Będziesz musiał wyszukać window.location w funkcji kodu zewnętrznego i wewnątrz funkcji, które są wywoływane przy ładowaniu strony. Obraźliwie, we wszystkich plikach również. – Ranty