2013-07-26 3 views
1

Я пытаюсь установить значение окна поиска, нажать кнопку поиска и проанализировать результаты. Проблема в том, что результаты отображаются в другом фрейме, и я не могу получить другой фрейм. Код:HtmlUnit не удалось получить содержимое фрейма

import com.gargoylesoftware.htmlunit.BrowserVersion; 
import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException; 
import com.gargoylesoftware.htmlunit.WebClient; 
import com.gargoylesoftware.htmlunit.html.HtmlElement; 
import com.gargoylesoftware.htmlunit.html.HtmlPage; 
import com.gargoylesoftware.htmlunit.html.HtmlPasswordInput; 
import com.gargoylesoftware.htmlunit.html.HtmlTextInput; 

import java.io.IOException; 
import java.net.MalformedURLException; 

public class LoginSimulation 
{ 
    public static void main(String args[]) 
    { 
      HtmlPage page = null; 
      String url = "http://www.ravmilim.co.il/naerr.asp"; 

      WebClient webClient = new WebClient(BrowserVersion.FIREFOX_3_6); 
      webClient.setThrowExceptionOnScriptError(false); 

      try 
      { 
       page = webClient.getPage(url); 

       HtmlTextInput userInput = (HtmlTextInput) page.getElementById("txtUser"); 
       userInput.setValueAttribute("[email protected]"); 

       HtmlPasswordInput passwordInput = (HtmlPasswordInput) page.getElementById("txtPass"); 
       passwordInput.setValueAttribute("5750201"); 

       HtmlElement theElement2 = (HtmlElement) page.getElementById("submitButton"); 
       page = theElement2.click(); 

       HtmlPage framePage = (HtmlPage)    nextPage.getFrames().get(0).getEnclosedPage(); 
       HtmlTextInput searchBox = (HtmlTextInput)       framePage.getForms().get(0).getInputsByName("searchBox").get(0); 

       // 
       // so far so good... 
       // 
       searchBox.setValueAttribute("word"); 
       HtmlAnchor anchor = framePage.getHtmlElementById("sl"); 
       HtmlPage page1 = (HtmlPage) anchor.click(); 
       try { 
        HtmlPage resultsPage = (HtmlPage) page1.getFrameByName("resault1").getEnclosedPage();// this should have worked!! 
       } catch (Exception e) { 
        // 
        // I get an ElementNotFoundException 
        // 
        e.printStackTrace(); 
       } 

       // 
       // must logout - this site is sensitive to multiple logins 
       // 
       framePage.getAnchorByHref("logout.asp").click(); 

       webClient.closeAllWindows();    
      } 
      catch (Exception e) 
      { 
       e.printStackTrace(); 
      } 
     }  
    } 

ответ

1

Вы можете попытаться получить этот кадр, используя следующий код:

HtmlPage framePage = (HtmlPage)pageAfterLogin.getFrameByName("your_frame_name").getEnclosedPage(); 

После того, как источник кадра вы можете получить HTML элементы (как вы делали на странице входа) внутри этой страницы ,

0

Вы можете попробовать этот пример (взятый из http://htmlunit.sourceforge.net/frame-howto.html)

final WebClient client = new WebClient(); 
final HtmlPage mainPage = client.getPage("http://htmlunit.sourceforge.net/apidocs/index.html"); 

Чтобы получить страницу первого кадра (в левом верхнем углу) и нажмите на шестой ссылке:

final HtmlPage packageListPage = (HtmlPage) mainPage.getFrames().get(0).getEnclosedPage(); 
packageListPage.getAnchors().get(5).click(); 

Чтобы получить страницы под названием 'packageFrame' (внизу слева) и щелкните по второй ссылке:

final HtmlPage pakcagePage = (HtmlPage) mainPage.getFrameByName("packageFrame").getEnclosedPage(); 
pakcagePage.getAnchors().get(1).click(); 

К получить страницу рамы с именем «classFrame» (справа):

final HtmlPage classPage = (HtmlPage) mainPage.getFrameByName("classFrame").getEnclosedPage(); 
Смежные вопросы