Używam HtmlUnit w moim projekcie Java w celu przetestowania strony internetowej, która ma Javascript w środku. Mój kod klika przycisk wywołujący funkcję JavaScript, która przekieruje użytkownika na inną stronę (np. Usługi skracania linków). Jest to kod:HTMLUnit: zmiana ciągu agenta użytkownika
public void click()
{
WebClient webClient = new WebClient();
HtmlPage page = webClient.getPage("http://mywebsite.com");
HtmlImage a = page.getHtmlElementById("my_button");
page = (HtmlPage) a.click();
}
Problemem jest to, że HtmlUnit używa domyślnego agenta użytkownika (Internet Explorer 8) i istnieje tylko kilka ustawić (Firefox 17 i chrom). Zachowanie witryny mywebsite.com nie ulega zmianie, jeśli wykryje inną przeglądarkę/program użytkownika. Nawiasem mówiąc, ciąg agenta użytkownika jest przechowywany przez witrynę w celach statystycznych i muszę go zmienić za każdym razem, gdy go odwiedzę.
Próbowałem zmienić agenta użytkownika, tworząc nowy BrowserVersion
obiekt w ten sposób:
BrowserVersion bv = new BrowserVersion("Chrome", "Mozilla/5.0", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1468.0 Safari/537.36", 28);
przy okazji, kiedy instancję obiektu webclient przekazując moją bv
obiekt, mój kod nie działa pracować już. Z tego, co zrozumiałem, dokumentacja HtmlUnit mówi, że muszę sprawdzić, czy agent użytkownika określony w mojej wersji BrowserVersion ma odpowiednie funkcje do uruchomienia Javascript.
Należy jednak pamiętać, że stałe nie są wystarczające, aby w pełni dostosować przeglądarkę , trzeba także spojrzeć w BrowserVersionFeatures i klas wewnątrz pakietu „Javascript”.
Co to znaczy? Dlaczego HtmlUnit już nie działa? Moim celem jest tylko zmiana ciągu znaków User Agenta. Jak mogę to osiągnąć? Zauważ, że próbowałem również Selenium, bez powodzenia. Dziękuję za pomoc.
EDIT 1:
Znaleziony ten trick. Jeśli zainicjuję BrowserVersion w następujący sposób:
BrowserVersion bv = new BrowserVersion("Netscape", "blablabla", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1468.0 Safari/537.36", 0);
działa, ale nie rozumiem DLACZEGO. Muszę ustawić pierwszy ciąg jako Netscape (wypróbowałem Chrome i Mozillę, ale to nie działa). Drugi ciąg jest losowy, mogę umieścić wszystko, jeśli Netscape jest ustawiony jako pierwszy parametr. Trzeci łańcuch to dobrze sformatowany Agent użytkownika, a czwarty parametr to liczba całkowita wskazująca wersję. Czy możesz mi wyjaśnić, dlaczego działa tylko wtedy, gdy Netscape
jest przekazywany jako pierwszy parametr i losowy dla innych (z wyjątkiem drugiego)?
aktualizacje:
Czasami to nie działa (jak opisano powyżej). W przypadku niektórych łańcuchów agenta użytkownika strona nie ładuje się prawidłowo. Nie mogę zrozumieć, dlaczego użytkownik powinien zmodyfikować zachowanie HtmlUnit, ponieważ jestem pewien, że JavaScript jest dość łatwy i powinien być uruchamiany przez wszystkie wersje przeglądarek. Moje ostatnie pytanie to: Ostatnie pytanie:: jak mogę zmienić ciąg znaków agenta użytkownika w HtmlUnit bez zmiany jego zachowania podczas wykonywania Javascript?
Czy nie jest to związane z selen? Mówię o HTMLUnit [tutaj] (http://htmlunit.sourceforge.net) – Angelo