2010-01-13 2 views

답변

1

브라우저를 통해이 작업을 수행해야합니까? HttpClient으로 작성된 HTTP 클라이언트 응용 프로그램을 사용하여 양식을 제출할 수 있습니까?

브라우저를 통해이 작업을 수행해야하는 경우 Mozilla 여야합니까? Watij은 IE 사본을 시작하고 필드를 채우고 양식을 제출하는 간단한 방법을 제공합니다.

+0

친애하는 뇌, 내가 브라우저를 사용하여 할 필요가 웹 사이트에 로그인 내 코드입니다. Watij가 내 문제를 해결했지만 Windows에서만 지원 되었기 때문에 내 응용 프로그램은 Linux에 있습니다. 당신은 리눅스에 대한 비슷한 도구를 hava ?? – Sunil

+0

왜 브라우저를 사용해야합니까? 쿠키/세션 때문에? HttpClient가이 작업을 수행 할 수 있습니다. 불행히도 Linux 용 Watij에 대해서는 잘 모릅니다. –

+0

신청서의 요구 사항은 고객 계좌에 로그인하여 대리인을 대신하여 거래를하는 것입니다 (예 : paypal). 로그인 부분은 자바 애플리케이션에 의해 수행되어야하며 사용자는 추가 페이지로 이동할 수 있어야합니다. HttpClient를 사용하여이 문제를 해결할 수 있습니까? – Sunil

0

Mozilla에서이 메소드에 액세스 할 수있는 JNI 라이브러리가 필요합니다. 가장 간단한 해결책은 SWT을 사용하고 SWT.MOZILLA으로 브라우저를 만드는 것입니다 (예 : snippet 참조).

Firefox와 같은 모든 기능을 갖춘 브라우저가 아닌 브라우저 위젯 만 사용한다는 점에 유의하십시오.

+0

친애하는 각하, 감사합니다. 목록 상자에서 URL을 선택할 때마다 내 응용 프로그램이 로그인 세부 정보를 채우고 제출할 때마다 mozilla의 새 인스턴스를 열어야합니다. 위젯을 사용하면 내 목적을 달성 할 수 있는지 확실하지 않습니다. 감사합니다. Sunil. – Sunil

+0

각 브라우저 위젯에 대해 새 셸 (= 새 창)을 만들 수 있습니다. 그래서 나는 너의 문제를 보지 못한다. –

1

대한 추가 정보를 원하시면이 단순히로드 물론 몇 가지 예제 코드

import java.awt.Color; 
import java.awt.Component; 
import java.awt.Container; 
import java.awt.FlowLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.io.FileNotFoundException; 
import java.io.File; 

import javax.swing.*; 

import org.mozilla.xpcom.*; 
import org.mozilla.interfaces.*; 

/* 
Websites ref 
http://groups.google.com/group/mozilla.dev.tech.java/browse_thread/thread/898ba6751d0c57f7 
http://skrul.com/blog/code/ 
http://wirestorm.net/blog/?cat=9 

*/ 


public class BrowserTest implements nsIWebProgressListener,nsIWeakReference, nsIInterfaceRequestor, nsIWebBrowserChrome, nsISHistoryListener{ 
    static { 
     try { 
      System.loadLibrary("NativeWindow"); 
     } catch (UnsatisfiedLinkError e) { 
      System.err.println("can't find your library"); 
     } 
    } 
    private static final String frameTitle="GRE Embedded"; 
    public static void main(String[] args) { 
     BrowserConroller controler=new BrowserConroller(); 
     controler.run(); 
     new BrowserTest().start(); 
    } 

    public void start(){ 


     JFrame f = new JFrame(frameTitle); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.setSize(400, 150); 
     Container content = f.getContentPane(); 
     content.setBackground(Color.white); 
     content.setLayout(new FlowLayout()); 
     content.add(new JLabel("Initializing ... ")); 
     f.setVisible(true); 

     File grePath = null; 
     LocationProvider locProvider; 
     Mozilla mozilla = Mozilla.getInstance(); 

     GREVersionRange[] range = new GREVersionRange[1]; 
     range[0] = new GREVersionRange("1.8.0", true, "1.9", false); 

     try { 
      grePath = Mozilla.getGREPathWithProperties(range, null); 
      mozilla.initialize(grePath); 
      locProvider = new LocationProvider(grePath); 
      mozilla.initEmbedding(grePath, grePath, locProvider); 
     } 

     catch (FileNotFoundException e) { 
      System.out.println("Error: FileNotFoundException"); 
     } 
     catch (XPCOMException e) { 
      System.out.println("Error: XPCOMException"); 
     } 


     //---------- END GRE INITIALIZATION------------ 


     nsIServiceManager serviceManager = mozilla.getServiceManager(); 

     nsIAppStartup appStartup = (nsIAppStartup)serviceManager.getServiceByContractID("@mozilla.org/toolkit/app-startup;1", nsIAppStartup.NS_IAPPSTARTUP_IID); 
     nsIWindowCreator windowCreator = (nsIWindowCreator)appStartup.queryInterface(nsIWindowCreator.NS_IWINDOWCREATOR_IID); 

     nsIWindowWatcher windowWatcher =(nsIWindowWatcher)serviceManager.getServiceByContractID("@mozilla.org/embedcomp/window-watcher;1",nsIWindowWatcher.NS_IWINDOWWATCHER_IID); 

     windowWatcher.setWindowCreator(windowCreator); 

     nsIDOMWindow win = windowWatcher.openWindow(null, "http://google.com", "MAIN_WIN","chrome,resizable,centerscreen", null); 
     windowWatcher.setActiveWindow(win); 

     nsIComponentManager componentManager = mozilla.getComponentManager(); 
     String NS_IWEBBROWSER_CID = "F1EAC761-87E9-11d3-AF80-00A024FFC08C"; //$NON-NLS-1$ 
     nsIWebBrowser webBrowser = (nsIWebBrowser) componentManager.createInstance(NS_IWEBBROWSER_CID, null, nsIWebBrowser.NS_IWEBBROWSER_IID); 
     webBrowser.setContainerWindow(this); 
     webBrowser.addWebBrowserListener(this, nsIWebProgressListener.NS_IWEBPROGRESSLISTENER_IID); 


//  nsIWebNavigation webNavigation=(nsIWebNavigation)webBrowser.queryInterface(nsIWebNavigation.NS_IWEBNAVIGATION_IID); 
//  webNavigation.loadURI("http://www.zdnet.com", nsIWebNavigation.LOAD_FLAGS_NONE, null, null, null); 
//  

     nsIBaseWindow baseWindow = (nsIBaseWindow) webBrowser.queryInterface(nsIBaseWindow.NS_IBASEWINDOW_IID);    
     long handle=FindWindow.getHWND(frameTitle); 

     baseWindow.initWindow(handle, 0, 0, 0,350,350); 
     baseWindow.create(); 
     baseWindow.setVisibility(true); 




//  
//  nsIDOMWindow domWin=webBrowser.getContentDOMWindow(); 
//  nsIDOMEventTarget domEventTarget= (nsIDOMEventTarget)domWin.queryInterface(nsIDOMEventTarget.NS_IDOMEVENTTARGET_IID); 
//  domEventTarget.addEventListener("click", new EventListener(), false); 
//  
     //Hide JFrame after it have been initialized 
     f.setVisible(true); 
//  
//  nsIWebNavigation webNavigation=(nsIWebNavigation)webBrowser.queryInterface(nsIWebNavigation.NS_IWEBNAVIGATION_IID); 
//  webNavigation.loadURI("http://www.zdnet.com", nsIWebNavigation.LOAD_FLAGS_NONE, null, null, null); 
//  
     appStartup.run(); 
     System.out.println("try termEmbedding"); 
     try { 
      System.out.println("mozilla.termEmbedding(); START"); 
      mozilla.termEmbedding(); 
      System.out.println("mozilla.termEmbedding(); FINISHED"); 
     } 
     catch (XPCOMException e) { 
      System.out.println("Fehler: XPCOMException"); 
     } 
     System.out.println("finished termEmbedding"); 
     System.out.println("All done"); 
    } 



    public void onLocationChange(nsIWebProgress webProgress, nsIRequest request, nsIURI location) { 
     c("onLocationChange"); 

    } 

    public void onProgressChange(nsIWebProgress webProgress, nsIRequest request, int curSelfProgress, int maxSelfProgress, int curTotalProgress, int maxTotalProgress) { 
     c("onProgressChange"); 

    } 

    public void onSecurityChange(nsIWebProgress webProgress, nsIRequest request, long state) { 
     c("onSecurityChange"); 

    } 

    public void onStateChange(nsIWebProgress webProgress, nsIRequest request, long stateFlags, long status) { 
     c("onStateChange"); 

    } 

    public void onStatusChange(nsIWebProgress webProgress, nsIRequest request, long status, String message) { 
     c("onStatusChange"); 

    } 

    public nsISupports queryInterface(String uuid) { 
     c("queryInterface"); 
     return null; 
    } 



    public nsISupports queryReferent(String uuid) { 
     c("queryReferent"); 
     return null; 
    } 

    public nsISupports getInterface(String uuid) { 
     c("getInterface"); 
     return null; 
    } 
    private void c(Object o){ 
     System.out.println(o); 
    } 

    public void destroyBrowserWindow() { 
     c("destroyBrowserWindow"); 

    } 

    public void exitModalEventLoop(long status) { 
     c("exitModalEventLoop"); 

    } 

    public long getChromeFlags() { 
     c("getChromeFlags"); 
     return 0; 
    } 

    public nsIWebBrowser getWebBrowser() { 
     c("getWebBrowser");  
     return null; 
    } 

    public boolean isWindowModal() { 
     c("isWindowModal");  
     return false; 
    } 

    public void setChromeFlags(long chromeFlags) { 
     c("setChromeFlags");  

    } 

    public void setStatus(long statusType, String status) { 
     c("setStatus"); 

    } 

    public void setWebBrowser(nsIWebBrowser webBrowser) { 
     c("setWebBrowser");   
    } 

    public void showAsModal() { 
     c("showAsModal"); 

    } 

    public void sizeBrowserTo(int acx, int acy) { 
     c("sizeBrowserTo"); 

    } 

    public boolean onHistoryGoBack(nsIURI backURI) { 
     c("onHistoryGoBack"); 
     return false; 
    } 

    public boolean onHistoryGoForward(nsIURI forwardURI) { 
     c("onHistoryGoForward"); 
     return false; 
    } 

    public boolean onHistoryGotoIndex(int index, nsIURI gotoURI) { 
     c(" onHistoryGotoIndex"); 
     return false; 
    } 

    public void onHistoryNewEntry(nsIURI newURI) { 
     c(" onHistoryNewEntry"); 
    } 

    public boolean onHistoryPurge(int numEntries) { 
     c(" onHistoryPurge"); 
     return false; 
    } 

    public boolean onHistoryReload(nsIURI reloadURI, long reloadFlags) { 
     c(" onHistoryReload"); 
     return false; 
    } 


} //public class JavaXPCOM_test1[/code] 

입니다 JFrame의 Mozilla 브라우저를 사용할 수 있지만 양식 필드에 액세스 할 수 있어야합니다. 코드를 작성하여 제출하십시오.

+0

제안 해 주셔서 감사합니다. 나는 이것을 시도 할 것이다, 바라건대 내 문제를 해결한다. :) – Sunil

+0

그러면 받아 들일 수있는 대답으로 표시한다 –

0

당신은

+0

어떻게 자바 applicaton에서 greasemonkey 스크립트를 호출 할 수 있는가 ?? – Sunil

0

확인을 제출 전화를 자신의 그리스 몽키 스크립트를 만들 수 있습니다, 이것은 꽤 늦게 올 수 있습니다 ...하지만 당신은 당신이 찾고있는 것을 달성하기 위해 셀레늄 WebDriver를 사용할 수 있습니다.

모질라 창의 새로운 인스턴스를 생성하고 그것을 사용하여 양식을 조작 할 수 있습니다.

0

당신은 다음 webdriver

의 도움으로 거의 모든 일을 할 수있는 것은

WebDriver driver = new FireFoxDriver(); 
    driver.get("http://172.16.16.219:9081/LOSWebApp/security/login.htm"); 
     WebDriverWait wait = new WebDriverWait(driver, 3000); 
    wait.until(ExpectedConditions.visibilityOfElementLocated((By.name("ssoId")))); 

    WebElement userid = driver.findElement(By.name("ssoId")); 
    WebElement password = driver.findElement(By.name("password")); 
    WebElement loginButton = driver.findElement(By.name("button")); 
    userid.sendKeys("userID"); 
    password.sendKeys("pwd"); 

    loginButton.click(); 
관련 문제