Javascript가 내부에있는 웹 페이지를 테스트하기 위해 Java 프로젝트에서 HtmlUnit을 사용하고 있습니다. 내 코드는 Javascript 함수를 호출하는 버튼을 클릭하여 링크 단축키 서비스와 같은 다른 페이지로 사용자를 리디렉션합니다.HTMLUnit : 사용자 에이전트 문자열 변경
public void click()
{
WebClient webClient = new WebClient();
HtmlPage page = webClient.getPage("http://mywebsite.com");
HtmlImage a = page.getHtmlElementById("my_button");
page = (HtmlPage) a.click();
}
문제는 HtmlUnit과 기본 사용자 에이전트 (인터넷 익스플로러 8)을 사용하고 (파이어 폭스 (17)와 크롬)을 설정하는 몇 만이있다 :이 코드입니다. 다른 브라우저/사용자 에이전트를 발견하면 mywebsite.com의 동작은 변경되지 않습니다. 그건 그렇고, 사용자 에이전트 문자열 통계 목적을 위해 웹 사이트에 저장됩니다 그리고 나는 그것을 방문 할 때마다 그것을 변경해야합니다.
내가 이런 식으로 새로운BrowserVersion
객체를 생성하여 사용자 에이전트를 변경하려고했습니다
: 그런데
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);
, 내 bv
오브젝트를 통과하는에서는 WebClient 개체를 인스턴스화, 내 코드는 그렇지 않습니다 더 이상 일하지 않아. 내가 이해 한 바에 따르면, HtmlUnit 문서는 내 BrowserVersion에 지정된 사용자 에이전트가 Javascript를 실행하는 데 적합한 기능을 가지고 있는지 확인해야한다고 말합니다.
그러나, 당신은 또한 "자바 스크립트"패키지 내부의 BrowserVersionFeatures과 클래스로 볼 필요, 상수 완전히 브라우저를 사용자 정의하는 것만으로는 충분하지 참고.
이게 무슨 의미입니까? HtmlUnit이 더 이상 작동하지 않는 이유는 무엇입니까? 내 목표는 사용자 에이전트 문자열을 변경하는 것입니다. 이것을 어떻게 할 수 있습니까? 내가 성공하지 못한 채 셀레늄도 시도했음을 주목하라. 도움 주셔서 감사합니다.
편집 1 :
이 트릭을 발견. 다음과 같이 BrowserVersion을 인스턴스화하면 다음과 같이됩니다.
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);
작동하지만, 나는 왜 이해하지 못합니다. 넷스케이프 (Chrome과 Mozilla를 시도했지만 작동하지 않음)로 첫 번째 문자열을 설정해야합니다. 두 번째 문자열은 무작위로, Netscape가 첫 번째 매개 변수로 설정된 경우 아무 것도 넣을 수 있습니다. 세 번째 문자열은 잘 형식화 된 사용자 에이전트이고 네 번째 매개 변수는 버전을 나타내는 정수입니다. Netscape
이 첫 번째 매개 변수로 전달되고 두 번째 매개 변수를 제외한 다른 사람에게 전달되는 경우에만 작동하는 이유를 설명 할 수 있습니까?
업데이트합니다 (전술 한 바와 같이)
가 가끔 작동하지 않습니다. 일부 사용자 에이전트 문자열의 경우 페이지가 제대로로드되지 않습니다. 나는 사용자 에이전트가 HtmlUnit의 동작을 수정해야하는 이유를 이해할 수 없다. Javascript는 매우 쉽고 모든 브라우저 버전에서 실행되어야한다. 그래서, 내 최종 질문입니다 : 어떻게하면 자바 스크립트를 실행하면 그 행동을 변경하지 않고 HtmlUnit에서 사용자 에이전트 문자열을 변경할 수 있습니까?
아래의 예처럼 설정할 수 있습니다 HtmlUnit과 2.28를 사용하고 계십니까? HTMLUnit [여기] (http://htmlunit.sourceforge.net)에 대해 이야기하고 있습니다. – Angelo