2010-01-13 2 views
0

Я использую linux applicaiton, который должен открыть URL-адрес в mozilla, заполнить имя пользователя и пароль в форме (url, username и password из mysql db) и отправить его.Как открыть браузер Mozilla из приложения Java и отправить его?

Может кто-нибудь предложить, как использовать API-интерфейс mozilla для этого.

С уважением, Сунил.

ответ

1

Вам нужно сделать это через браузер? Не можете ли вы отправить форму с использованием клиентского приложения HTTP, написанного (скажем) HttpClient?

Если вам нужно сделать это через браузер, это должна быть Mozilla? Watij предоставляет тривиальный способ запуска копии IE, заполнения полей и отправки форм.

+0

Уважаемый Brain, мне нужно сделать это с помощью браузера. Я искал Watij, он решает мою проблему, но я поддерживаю его только в окнах, мое приложение работает на linux. У вас есть аналогичный инструмент для Linux? – Sunil

+0

Зачем вам нужен браузер? Из-за куки-файлов/сеансов? HttpClient может сделать это за вас. К сожалению, я не знаю об эквиваленте Watij для Linux. –

+0

Требование к приложению - войти в учетную запись клиента и сделать транскрипцию от его имени (например, paypal). Часть входа должна выполняться приложением java, и пользователь должен иметь возможность перемещаться по другим страницам. Можем ли мы достичь этого с помощью HttpClient? – Sunil

0

Вам понадобится библиотека JNI, которая позволит вам получить доступ к методам из Mozilla. Наверное, самым простым решением является использование SWT и создание браузера с SWT.MOZILLA (см. Этот пример snippet).

Обратите внимание, что вы просто получаете виджет браузера, а не полнофункциональный браузер, такой как Firefox.

+0

Уважаемый господин, Спасибо за ответ. Мое приложение должно открывать новый экземпляр mozilla каждый раз, когда URL-адрес выбирается из списка, заполняет детали входа и отправляет их. Не уверен, что использование виджета будет служить моей цели. С уважением, Сунил. – Sunil

+0

Для каждого виджета браузера вы можете создать новую оболочку (= новое окно). Поэтому я не вижу твоей проблемы. –

1

Вы можете быть в состоянии использовать JavaXPCOM пожалуйста, проверьте Mozilla Embedding for Java

Вот некоторые примеры кода

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] 

, конечно, это просто загружает Mozilla Browser в JFrame, но вы должны иметь возможность получить доступ к полям формы из кода заполнять и отправлять их.

+0

Спасибо за предложение. Я попробую это, надеюсь, он решает мою проблему :) – Sunil

+0

Затем отметьте его как принятый ответ –

0

Вы можете создать свой собственный Greasemonkey скрипт для вызова представить

+0

Как мы можем вызвать скрипт greasemonkey из java-приложения? – Sunil

0

ОК, это может прийти довольно поздно ... но вы можете использовать Selenium WebDriver, чтобы добиться того, что вы ищете.

Вы можете создать новый экземпляр окна Mozilla и манипулировать с ним формами.

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(); 
Смежные вопросы