2013-11-13 3 views
0

Я пытаюсь получить текстовое поле с u_0_1e как id, со страницы стены, но HtmlUnit ничего не находит. Последняя строка печатает null. Вот код:HtmlUnit не находит элемент

java.util.logging.Logger.getLogger("com.gargoylesoftware").setLevel(java.util.logging.Level.OFF); 

     WebClient client = new WebClient(BrowserVersion.CHROME); 
     JavaScriptEngine engine = new JavaScriptEngine(client); 

     client.setJavaScriptEngine(engine); 
     HtmlPage home = client.getPage("https://www.facebook.com/login.php"); 
     HtmlSubmitInput login = (HtmlSubmitInput) home.getElementById("u_0_1"); 
     HtmlTextInput name = (HtmlTextInput) home.getElementById("email"); 
     HtmlPasswordInput pass = (HtmlPasswordInput) home.getElementById("pass"); 

     name.setValueAttribute("myname"); 
     pass.setValueAttribute("mypass"); 

     HtmlPage page = login.click(); 
     HtmlPage wall = client.getPage("https://www.facebook.com/"); 

     System.out.println(wall.getElementById("u_0_1e")); 

ответ

0

У меня есть некоторые замечания по поводу вашего вопроса.

Прежде всего, вы отключили ведение журнала HtmlUnit. Поэтому, если у вас есть какая-либо проблема с JavaScript, вы не увидите ее. Если вы действительно получаете ошибку JavaScript, код JavaScript не будет полностью выполнен. Если элемент, который вы пытаетесь извлечь, был динамически извлечен с сервера (возможно, с использованием AJAX), то ошибки JavaScript, если таковые имеются, могут привести к тому, что этот элемент не будет извлечен.

Если вы являетесь веб-сканером, что явно имеет место, то у вас нет никакого контроля над JS, поэтому вы можете принять его только как нерабочую или отключить JS и вручную обрабатывать запросы AJAX.

Конечно, вы увидите, что страница отлично работает на реальном браузере, но учтите, что движок JavaScript, используемый HtmlUnit, отличается от реальных браузеров.

Во-вторых, две строки, содержащие слово engine, абсолютно не нужны.

В-третьих, как я уже упоминал в предыдущем вопросе, это будет более подходящим для обработки с помощью Facebook API.

Наконец, вы можете найти этот другой ответ полезным: JavaScript not being properly executed in HtmlUnit

+0

Я изменил BrowserVersion к одному по умолчанию (или Internet Explorer), и теперь он работает! Спасибо! – Amanda

Смежные вопросы