Как получить полный исходный код html веб-страницы, сгенерированной Javascript с использованием Java / Webdriver? - PullRequest
2 голосов
/ 18 апреля 2020

Я новичок ie в программировании, и у меня есть задача, которую мне нужно решить. Я пытаюсь получить исходный код html веб-страницы, используя метод Java / Webdriver getPageSource(). Проблема в том, что эта страница каким-то образом генерируется, вероятно, с помощью javascript, поэтому в результате я получаю html код, содержащий только скелет страницы - таблицу, которая пуста и не заполнена данными. Но в самом низу этого кода html есть тег типа <script type="text/javascript" src="/x/js/main.c0e805a3.js"></script>. Вопрос в том, как заставить Webdriver запустить этот Javascript и дать мне результат - весь источник html с данными. Я уже пытался использовать это (js.executeScript("window.location = '/x/js/main.c0e805a3.js'");) до вызова getPageSource(), но безуспешно.

Любая помощь будет оценена, спасибо!

1 Ответ

0 голосов
/ 18 апреля 2020

В настоящее время существует довольно много установок, которые могут запускать Java -Script на веб-странице. Я думаю, что наиболее известным является, вероятно, Selenium, так как я думаю, что это было какое-то время назад. Другие включают karate, Puppeteer и даже старый инструмент под названием Rhino. Кукловод это гугл, в c. проект, который использует Java -Script (серверный Java -Script, называемый Node.js. Они не любят, когда мы сравниваем контрастирующие библиотеки здесь.

У меня не было времени заниматься Selenium, пока, но я пишу HTML парсер, постоянно ищу и обновляю код. Если ваша единственная цель - загрузить страницу, содержимое которой динамически «заполняется AJAX вызовами» - и что я имею в виду, вам нужно только содержимое HTML, которое обычно отображается при посещении веб-страницы сайта, , и вас не интересуют нажатия кнопок , тогда как тот, который я использовал это называется Splash Этот инструмент может позволить вам вызвать Java -Script, но если все, что вы хотите сделать, это увидеть JS на страница динамически загружает таблицу, затем, буквально, все, что вам нужно сделать, это запустить инструмент и добавить одну строку в вашу программу.

На Google Cloud Platform эти 2 строки начнут Spla sh Прокси-сервер . Если вы пишете Ваш код на AWS (Amazon) или Azure (Microsoft), скорее всего, будет похожим. Если вы выполняете свой код в офисе на локальном компьютере, вам придется изучить, как его запустить.

Установить Docker. Убедитесь, что установлена ​​Docker версия> = 17.

Вытащите образ:

 $ sudo docker pull scrapinghub/splash

Запустите контейнер:

$ sudo docker run -it -p 8050:8050 --rm scrapinghub/splash

Затем в Ваш код, все, что вам нужно сделать, это следующее:

// If your original code looked like this:
URL url = new URL("https://en.wikipedia.org/wiki/Christopher_Columbus");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty("User-Agent", USER_AGENT);
return new BufferedReader(new InputStreamReader(con.getInputStream()));

Измените первую строку кода в этом примере на эту, и (теоретически), и динамически загруженные таблицы HTML, которые заполняются с помощью События страницы onload будут автоматически загружены перед возвратом страницы HTML.

// Add this line to your methods
String splashProxy = "http://localhost:8050/render.html?url=";
URL url = new URL(splashProxy + "https://en.wikipedia.org/wiki/Christopher_Columbus");

Для большинства веб-сайтов любые начальные таблицы, заполненные JS / jQuery / AJAX, будут заполнены. Если вы хотите изучить Lua Programming Language, вы также можете начать вызывать там методы. Это было довольно удобно для моих целей, так как я не пишу код тестирования веб-страницы (код, имитирующий нажатия пользовательских кнопок). Если это то, что вы делаете, Selenium, вероятно, стоит потратить время на изучение / изучение API

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...