Могу ли я получить окончательную страницу HTML (после выполнения сценариев) с помощью JSoup, HtmlUnit или чего-либо еще? - PullRequest
0 голосов
/ 31 мая 2018

Итак, я пытаюсь смоделировать нажатие на эту кнопку:

<input class="btn" value="Say thanks!" onclick="say_thanks(546810)" id="thanks_button" type="button">

И я пытаюсь сделать это, пока программа находится в фоновом режиме.В противном случае я мог бы просто использовать селен, но я не хочу, чтобы программа на переднем плане использовала мою мышь и фокусировала браузер, который она использует.Я пытался найти обходной путь, но пока не повезло.Попытка симуляции с HtmlUnit выглядит так:

DomElement button = page.getFirstByXPath("//input[@value='Say thanks!']");
HtmlPage newPage = button.click();

Но я продолжаю получать эту ошибку, независимо от типа используемого селектора (пробовал с якорями, byId, byClass и т. Д.):

SEVERE: runtimeError: message=[An invalid or illegal selector was specified (selector: '*,:x' error: Invalid selector: *:x).] sourceName=[https://code.jquery.com/jquery-2.2.4.min.js] line=[2] lineSource=[null] lineOffset=[0]

Я открыт для любых предложений, независимо от того, какие инструменты нужны (если они у меня уже есть).

БОЛЬШОЕ РЕДАКТИРОВАНИЕ: поэтому я дважды проверил, как выглядит страница в виде обычного текста послеЯ анализирую его с помощью JSoup, и настоящей кнопки нигде не найти.Есть некоторый сценарий JQuery, который, я думаю, заставит кнопку появиться (она появится, только если я не нажимал ее раньше) в окончательном HTML-документе.Теперь мне нужно оценить этот скрипт, чтобы получить окончательный HTML-код, и, как я видел в Интернете, HtmlUnit должен это делать, но это не так.

Я пробовал JSoup, HtmlUnit, HttpClient иПрогулка, но пока не повезло.

1 Ответ

0 голосов
/ 31 мая 2018

С вашей стороны есть недоразумение:

Если

DomElement button = page.getFirstByXPath("//input[@value='Say thanks!']");

не получится, вы получите обычное исключение Java, а не запись в журнале (кстати, вы используете селектор xpathно запись в журнале о селекторах css).

Чтобы вам было удобнее, вы можете добавить строку

System.out.println(button.asXml())

после выбора, и вы увидите, что HtmlUnit нашел ваш элемент ввода.

Запись в журнале является результатом некоторого выполнения javascript, запущенного после того, как вы нажали кнопку (и потому что вы нажали кнопку).

Этот тип сообщения действительно распространен при использовании HtmlUnit со страницамиСборка с использованием jQuery или других фреймворков.Эти платформы используют недействительные селекторы CSS для проверки функций вашего браузера.HtmlUnit сообщит об этом, но JavaScript продолжит работать.Обычно это предупреждающее сообщение в контексте HtmlUnit, содержащее сообщение о серьезной ошибке в качестве причины / детали.

Вне этого вызова метод click () является правильным способом имитации нажатия кнопки.

...