2013-04-05 4 views
0

Я делаю проект в Java. В этом проекте мне нужно работать с DOM. Для этого я сначала загружаю динамическую страницу любого заданного URL, используя Selenium. Затем я разбираю их с помощью Jsoup.Селен занимает много времени, чтобы получить динамическую страницу данного URL.

Я хочу, чтобы получить динамический источник страницы код данного URL

Код снимка:

public static void main(String[] args) throws IOException { 

    // Selenium 
    WebDriver driver = new FirefoxDriver(); 
    driver.get("ANY URL HERE"); 
    String html_content = driver.getPageSource(); 
    driver.close(); 

    // Jsoup makes DOM here by parsing HTML content 
    Document doc = Jsoup.parse(html_content); 

    // OPERATIONS USING DOM TREE 
} 

Но проблема, Селен занимает около 95% всего времени обработки, что нежелательно.

Selenium сначала открывает Firefox, затем загружает данную страницу, затем получает динамический исходный код страницы.

Можете ли вы рассказать, как я могу сократить время, затраченное Selenium, заменив этот инструмент другим эффективным инструментом. Любые другие рекомендации также приветствуются.

Редактировать НЕТ. 1

На этом link приведен код.

FirefoxProfile profile = new FirefoxProfile(); 
profile.setPreference("general.useragent.override", "some UA string"); 
WebDriver driver = new FirefoxDriver(profile); 

Но что здесь вторая строка, я не понял. Поскольку документация также очень бедна селеном.

Редактировать No. 2

System.out.println ("Получение% s ..." + url1); System.out.println ("Fetching% s ..." + url2);

WebDriver driver = new FirefoxDriver(createFirefoxProfile()); 

    driver.get("url1"); 
    String hml1 = driver.getPageSource(); 

    driver.get("url2"); 
    String hml2 = driver.getPageSource(); 
    driver.close(); 

    Document doc1 = Jsoup.parse(hml1); 
    Document doc2 = Jsoup.parse(hml2); 
+0

Попробуйте создать профиль firefox и использовать его с драйвером. – KDM

+0

@ KDM Можете ли вы это уточнить, поскольку я наивна в этой области. Пожалуйста, объясните это. – devsda

+0

Когда вы создаете webdriver с помощью 'new FirefoxDriver()' - selenium создает новый профиль для firefox и создает его. Это само по себе дорогостоящая операция. Вы можете отправить объект FirefoxProfile в конструктор, что позволяет избежать создания нового профиля каждый раз. Я попытаюсь собрать код. – KDM

ответ

1

Попробуйте это:

public static void main(String[] args) throws IOException { 

    // Selenium 
    WebDriver driver = new FirefoxDriver(createFirefoxProfile()); 
    driver.get("ANY URL HERE"); 
    String html_content = driver.getPageSource(); 
    driver.close(); 

    // Jsoup makes DOM here by parsing HTML content 
    // OPERATIONS USING DOM TREE 
} 

private static FirefoxProfile createFirefoxProfile() { 
    File profileDir = new File("/tmp/firefox-profile-dir"); 
    if (profileDir.exists()) 
     return new FirefoxProfile(profileDir); 
    FirefoxProfile firefoxProfile = new FirefoxProfile(); 
    File dir = firefoxProfile.layoutOnDisk(); 
    try { 
     profileDir.mkdirs(); 
     FileUtils.copyDirectory(dir, profileDir); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return firefoxProfile; 
} 

Метод createFireFoxProfile() создает профиль, если один не существует. Он используется, если профиль уже существует. Таким образом, селену не нужно создавать структуру профиля-dir каждый раз.

+0

Чему, подождите, я поставлю этот модуль и проведу, как он повлияет на мой проект. – devsda

+0

'FileUtils.copyDirectory (dir, profileDir);'. Netbeans говорит о создании класса FileUtils. Я думаю, что есть какая-то ошибка. Пожалуйста, посмотри. – devsda

+0

Это от apache commons. Селен также использует его, поэтому добавьте банку в свой проект. – KDM

0

Если вы уверены, что уверены в своем коде, вы можете пойти с фантомами. это безгласный браузер и получит ваши результаты с быстрыми попаданиями. Для выполнения FF потребуется время.

+1

Этот поздний ответ может быть короткого использования. Одним из комментариев devnull 6 апреля 2013 года было: «Я следовал вашим указаниям и выполнял то же самое, используя GhostDriver + PhantomJs, но нет большой разницы во времени» – aberna

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