Как получить правильную страницу? - PullRequest
1 голос
/ 29 сентября 2011

Я использую библиотеку htmlunit для удаления Yellowpages.com сайта.Я хочу ввести поисковый запрос и нажать кнопку «Найти».Но после этого я получаю 2 страницы: http://www.yellowpages.com/ny/sport?g=NY&q=Sport и https://dealoftheday.yellowpages.com/join?ic=deal_pop-under_signup-v- Первая - это то, что я хочу, вторая - всплывающее окно.У меня есть этот код:

public void getPage() throws FailingHttpStatusCodeException, MalformedURLException, IOException {
        WebClient webClient = new WebClient();
        page = webClient.getPage("http://www.yellowpages.com");
        HtmlTextInput searchInput = (HtmlTextInput) page.getElementById("search-terms");
        searchInput.setText("Law");

        HtmlSubmitInput button = (HtmlSubmitInput) page.getElementById("search-submit");
        page = button.click();
        System.out.println(page.getTitleText());

    }

Этот код печатает:

Сделка дня на YP.com - Регистрация

Но я хочунапечатать название первой страницы:

NY Sport |Спорт в Нью-Йорке - YP.com

Как получить первую страницу?

РЕДАКТИРОВАТЬ: После добавления строки webClient.setPopupBlockerEnabled (true), я получил много предупреждений, и после этого яесть исключения.Вот часть вывода консоли:

Исключение в потоке "main" ======= ИСКЛЮЧЕНИЕ СТАРТ ======= EcmaError: lineNumber = [56] column = [0] lineSource = [null] name = [TypeError] sourceName = [http://i2.ypcdn.com/webyp/javascripts/home_packaged.js?13455] message = [TypeError: Невозможно вызвать метод "blur" из null (http://i2.ypcdn.com/webyp/javascripts/home_packaged.js?13455#56)] com.gargoylesoftware.htmlunit.ScriptException: TypeError: Невозможно вызвать метод "blur"of null (http://i2.ypcdn.com/webyp/javascripts/home_packaged.js?13455#56) at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine $ HtmlUnitContextAction.run (JavaScriptEngine.java:601) в net.sourceforge.htmlunit.corejs.javascript.Context.call (Context) javanet.sourceforge.htmlunit.corejs.javascript.ContextFactory.call (ContextFactory.java:538) в com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction (JavaScriptEngine.java:531) в com.gargoytun.html.hp.executeJavaScriptFunctionIfPossible (HtmlPage.java:906) в com.gargoylesoftware.htmlunit.javascript.host.EventListenersContainer.executeEventListeners (EventListenersContainer.java:164) в com.gargoylesoftware.htmlunit.javascript.host.EventListenersContainer.executeBubblingListeners (EventListenersContainer.java:223) в com.gargoylesoftware.htmlunit.javascript.host.Node.fireEvent (Node.java:686) в com.gargoleit.run (HtmlElement.java:885) в net.sourceforge.htmlunit.corejs.javascript.Context.call (Context.java:537) в net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call (ContextFactory.java:5) на com.gargoylesoftware.htmlunit.html.HtmlElement.fireEvent (HtmlElement.java:890) на com.gargoylesoftware.htmlunit.html.HtmlElement.fireEvent (HtmlElement.java:865) на com.garth.html.ht.отправить (HtmlForm.java:108) по адресу com.gargoylesoftware.htmlunit.html.HtmlSubmitInput.doClickAction (HtmlSubmitInput.java:77) по адресу com.gargoylesoftware.htmlunit.html.HtmlElement.clicklej.jpg63) .tj.htmlunit.html.HtmlElement.click (HtmlElement.java:1214) в com.gargoylesoftware.htmlunit.html.HtmlElement.click (HtmlElement.java:1177) в YellowPages.getPage (YellowPages.java:39) в YellowPages.main (YellowPages.java:22) Вызывается: net.sourceforge.htmlunit.corejs.javascript.EcmaError: TypeError: Невозможно вызвать метод «размытия» из null (http://i2.ypcdn.com/webyp/javascripts/home_packaged.js?13455#56) в net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.constructError (ScriptRuntime.java:3772) в net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.constructError (ScriptRuntime.java:forge в сети).htmlunit.corejs.javascript.ScriptRuntime.typeError (ScriptRuntime.java:3778)

Ответы [ 3 ]

2 голосов
/ 30 сентября 2011

Похоже на ошибку JS.Отключить JS:

webClient.setJavaScriptEnabled(false);

А что?

webClient.setThrowExceptionOnScriptError(false);

Добавить webClient.getOptions() при использовании HtmlUnit 2.11 +

1 голос
/ 29 сентября 2011

Не проверено, но я думаю, что вы можете перебирать окна верхнего уровня WebClient (используя WebClient.getTopLevelWindows()), вызывать getEnclosedPage() и проверять, является ли текст заголовка страницы тем, который вы ищете.

1 голос
/ 29 сентября 2011

Вы пробовали

webClient.setPopupBlockerEnabled(true)

Тогда вы должны получить только одну страницу

...