Как можно получить и вывести код страницы с помощью Java?

Здравствуйте! Я хочу сохранить текстовое содержимое более 2000 страниц с одного сайта. Я использую следующий код: 

<pre><code class="java">Document doc = Jsoup.connect(url)
                .userAgent("Chrome/4.0.249.0 Safari/532.5")
                .referrer("http://www.google.com")
                .get();</code></pre>

Однако в консоли у меня появляется вывод следующего содержания:

<pre><code class="html">&lt;html&gt;
 &lt;head&gt;&lt;/head&gt;
 &lt;body&gt;
  &lt;script type="text/javascript" src="/aes.js"&gt;&lt;/script&gt;
  &lt;script&gt;function toNumbers(d){var e=[];d.replace(/(..)/g,function(d){e.push(parseInt(d,16))});return e}function toHex(){for(var d=[],d=1==arguments.length&amp;&amp;arguments[0].constructor==Array?arguments[0]:arguments,e="",f=0;f&lt;d.length;f++)e+=(16&gt;d[f]?"0":"")+d[f].toString(16);return e.toLowerCase()}var a=toNumbers("f655ba9d09a112d4968c63579db590b4"),b=toNumbers("98344c2eee86c3994890592585b49f80"),c=toNumbers("35d494c9c55d6ba8cb9663293117cf00");document.cookie="__test="+toHex(slowAES.decrypt(c,2,a,b))+"; expires=Thu, 31-Dec-37 23:55:55 GMT; path=/"; location.href="http://wepesstats.rf.gd/pes3.php?i=1";&lt;/script&gt;
  &lt;noscript&gt;
   This site requires Javascript to work, please enable Javascript in your browser or use a browser with Javascript support
  &lt;/noscript&gt;
 &lt;/body&gt;
&lt;/html&gt;</code></pre>

Можете подсказать, как можно решить эту задачу, возможно, используя JavaScript или другой подход?
  • 4 сентября 2024 г. 18:23
Ответы на вопрос 3
Судя по предоставленному коду и сообщению об ошибке, сайт, с которого вы пытаетесь получить данные, использует JavaScript для динамической загрузки содержимого страницы. Это означает, что при простом HTTP-запросе с помощью `Jsoup` или другой библиотеки вы загружаете только первоначальный HTML, который не содержит нужного контента. 

### Возможные решения:

1. **Использование Selenium**:
   Selenium — это инструмент для автоматизации браузеров. Он может эмулировать действия пользователя и поддерживает JavaScript. Пример кода на Java для использования Selenium:

   ```java
   import org.openqa.selenium.WebDriver;
   import org.openqa.selenium.chrome.ChromeDriver;

   public class WebScraper {
       public static void main(String[] args) {
           // Укажите путь к chromedriver
           System.setProperty("webdriver.chrome.driver", "path/to/chromedriver");
           WebDriver driver = new ChromeDriver();
           try {
               driver.get("http://example.com");

               // Получаем HTML-код страницы
               String pageSource = driver.getPageSource();

               // Выводим HTML-код в консоль или сохраняем его
               System.out.println(pageSource);
           } finally {
               driver.quit();
           }
       }
   }
   ```

   Не забудьте [скачать ChromeDriver](https://chromedriver.chromium.org/downloads) соответствующей версии вашего браузера и указать правильный путь к нему.

2. **Использование библиотеки `HtmlUnit`**:
   HtmlUnit — это библиотека Java, которая позволяет обрабатывать JavaScript. Вот простой пример:

   ```java
   import com.gargoylesoftware.htmlunit.WebClient;
   import com.gargoylesoftware.htmlunit.html.HtmlPage;

   public class WebScraper {
       public static void main(String[] args) {
           try (final WebClient webClient = new WebClient()) {
               webClient.getOptions().setJavaScriptEnabled(true);
               webClient.getOptions().setCssEnabled(false); // Отключаем обработку CSS для ускорения
               
               // Загружаем страницу
               HtmlPage page = webClient.getPage("http://example.com");
               
               // Ждем завершения выполнения JavaScript
               webClient.waitForBackgroundJavaScript(10000);
               
               // Получаем HTML-код страницы
               String pageXml = page.asXml();

               // Выводим HTML-код в консоль
               System.out.println(pageXml);
           } catch (Exception e) {
               e.printStackTrace();
           }
       }
   }
   ```
   
3. **API запросы**:
   Если сайт предоставляет API для получения данных, это будет лучшим вариантом, так как данные будут получены в структурированном виде (например, в формате JSON). 

4. **Обработка HTTP запросов**:
   Если JavaScript генерирует данные через API запросы, вы можете использовать такие инструменты как `Fiddler` или `Chrome DevTools` для отслеживания сетевых запросов и анализа, какое API используется. Затем можно использовать `Jsoup` или `HttpClient` для выполнения аналогичных запросов к этому API.

Попробуйте эти подходы и выберите тот, который лучше всего подходит для вашего сценария.
Простой путь - через селениум. 
Сложный - курить их защиту от автоматических запросов.
Вот посмотри как тут пишут https://www.geeksforgeeks.org/selenium-with-java-t...
Похожие вопросы