Как сократить время получения URL-адресов страниц из Интернета с помощью GhostDriver и PhantomJS

Я делаю проект в Maven. Я пытаюсь получить страницы из URL. До сих пор мне удается получать страницы из Интернета. Но у меня есть два вопроса,

Вопросы,

  1. Приведенный ниже код занимает около 14 секунд, чтобы получить любые две страницы URL, как я могу сократить это время, помогите мне оптимизировать это.
  2. После завершения выполнения он не выходит из кода. Почему ? Я закончил код на driver.close(). Тогда, почему, он не выходит успешно. Я добавил снимки перед началом и после завершения процесса. Пожалуйста, смотрите это.

Помогите мне в моей проблеме. Пожалуйста.

Мой код:-

package XXX.YYY.ZZZ.Template_Matching;

import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import java.io.IOException;
import org.junit.Assert;
import org.junit.Test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.phantomjs.PhantomJSDriver;
import org.openqa.selenium.phantomjs.PhantomJSDriverService;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.w3c.dom.Document;

public class HtmlUnit {
   
    public static void main(String[] args) throws Exception {
        String url1 = "http://www.jabong.com/men/shoes/men-loafers/?source=home-leftnav";
        String url2 = "http://www.jabong.com/fastrack-9915Pp36J-Black-Pink-Analog-Watch-198499.html";
        DesiredCapabilities caps = new DesiredCapabilities();
        caps.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY, "C://Users//jhamb//Desktop//phantomjs-1.9.0-windows//phantomjs.exe");
        WebDriver driver = new PhantomJSDriver(caps);
        driver.get(url1);
        String hml1 = driver.getPageSource();
        driver.get(url2);
        String hml2 = driver.getPageSource();
        driver.close();
        //System.out.println(hml1);
        //System.out.println(hml2);
           Document doc1 = Jsoup.parse(hml1);
           Document doc2 = Jsoup.parse(hml2);
           // Some operations using these DOM tree, just like , comparing Templates of two URLS
    }
}

Снимок перед запуском процесса

введите здесь описание изображения

Снимок после завершения процесса, когда он без причины ожидает

введите здесь описание изображения


person devsda    schedule 06.04.2013    source источник


Ответы (2)


Я подозреваю, что драйвер создает поток, и он не вышел. Попробуйте добавить System.exit в конце main и посмотрите, решит ли это вашу проблему.

person Dakshinamurthy Karra    schedule 08.04.2013
comment
Он закрывает программу, добавляя System.exit(0);. Но можете ли вы сказать мне, почему он не закрывается неявно? - person devsda; 08.04.2013
comment
Я подозреваю, что драйвер создает поток, и он не вышел. - person Dakshinamurthy Karra; 08.04.2013
comment
Когда я увидел свой диспетчер задач, в нем было много активных файлов PhantomJS.exe. Передо мной стоит очень большая проблема. Как мне правильно избавиться от этой проблемы? - person devsda; 08.04.2013
comment
Попробуйте использовать driver.quit() вместо driver.close() - person Dakshinamurthy Karra; 08.04.2013
comment
Можете ли вы дать мне несколько советов, как я могу оптимизировать это, поскольку вы сказали, что это лучший инструмент для динамического получения страницы. Но разница во времени слишком хороша. Итак, пожалуйста, скажите мне, как я могу оптимизировать это, увеличив ЦП или объем памяти. - person devsda; 08.04.2013
comment
Засекали ли вы, сколько времени на самом деле требуется для загрузки URL-адреса? С драйверами FF и Ghost? Просто с помощью wget/curl? - person Dakshinamurthy Karra; 08.04.2013
comment
FF занимает около 14–19 секунд, а GhostDriver — около 13–16 секунд. Я протестировал несколько случаев, чтобы динамически получить два URL-адреса и поместить их в строку. wget и завиток? Я на Яве. Как я могу использовать это в нем, это команда Linux. - person devsda; 08.04.2013
comment
Прежде всего, спасибо за вашу очень хорошую поддержку, теперь все работает нормально. Но у меня есть одно последнее сомнение, иногда GhostDriver зависает. Чтобы начать это, ему нужно снова перезапустить код. Но это мне не подходит. Можете ли вы сказать мне, почему это странное поведение показывает GhostDriver. Если эта проблема решит, то GhostDriver лучше всего подходит для моего случая. Я думаю, вы обязательно дадите решение этого. Спасибо еще раз. - person devsda; 09.04.2013

Вам нужно использовать

driver.quit();

вместо

driver.close();
person Gus    schedule 12.11.2013