나는 Mozilla에서 URL을 열고, 사용자 이름과 암호를 양식 (URL, 사용자 이름 및 암호는 mysql db에서 가져옴)에 채우고 제출해야하는 리눅스 응용 프로그램에서 wokring입니다.자바 애플리케이션에서 mozilla 브라우저를 열고 제출하는 방법은 무엇입니까?
아무도 모질라 API를 사용하여 어떻게하는지 제안 할 수 있습니까?
감사합니다. Sunil.
나는 Mozilla에서 URL을 열고, 사용자 이름과 암호를 양식 (URL, 사용자 이름 및 암호는 mysql db에서 가져옴)에 채우고 제출해야하는 리눅스 응용 프로그램에서 wokring입니다.자바 애플리케이션에서 mozilla 브라우저를 열고 제출하는 방법은 무엇입니까?
아무도 모질라 API를 사용하여 어떻게하는지 제안 할 수 있습니까?
감사합니다. Sunil.
브라우저를 통해이 작업을 수행해야합니까? HttpClient으로 작성된 HTTP 클라이언트 응용 프로그램을 사용하여 양식을 제출할 수 있습니까?
브라우저를 통해이 작업을 수행해야하는 경우 Mozilla 여야합니까? Watij은 IE 사본을 시작하고 필드를 채우고 양식을 제출하는 간단한 방법을 제공합니다.
Mozilla에서이 메소드에 액세스 할 수있는 JNI 라이브러리가 필요합니다. 가장 간단한 해결책은 SWT을 사용하고 SWT.MOZILLA
으로 브라우저를 만드는 것입니다 (예 : snippet 참조).
Firefox와 같은 모든 기능을 갖춘 브라우저가 아닌 브라우저 위젯 만 사용한다는 점에 유의하십시오.
친애하는 각하, 감사합니다. 목록 상자에서 URL을 선택할 때마다 내 응용 프로그램이 로그인 세부 정보를 채우고 제출할 때마다 mozilla의 새 인스턴스를 열어야합니다. 위젯을 사용하면 내 목적을 달성 할 수 있는지 확실하지 않습니다. 감사합니다. Sunil. – Sunil
각 브라우저 위젯에 대해 새 셸 (= 새 창)을 만들 수 있습니다. 그래서 나는 너의 문제를 보지 못한다. –
대한 추가 정보를 원하시면이 단순히로드 물론 몇 가지 예제 코드
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 브라우저를 사용할 수 있지만 양식 필드에 액세스 할 수 있어야합니다. 코드를 작성하여 제출하십시오.
제안 해 주셔서 감사합니다. 나는 이것을 시도 할 것이다, 바라건대 내 문제를 해결한다. :) – Sunil
그러면 받아 들일 수있는 대답으로 표시한다 –
확인을 제출 전화를 자신의 그리스 몽키 스크립트를 만들 수 있습니다, 이것은 꽤 늦게 올 수 있습니다 ...하지만 당신은 당신이 찾고있는 것을 달성하기 위해 셀레늄 WebDriver를 사용할 수 있습니다.
모질라 창의 새로운 인스턴스를 생성하고 그것을 사용하여 양식을 조작 할 수 있습니다.
당신은 다음 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();
친애하는 뇌, 내가 브라우저를 사용하여 할 필요가 웹 사이트에 로그인 내 코드입니다. Watij가 내 문제를 해결했지만 Windows에서만 지원 되었기 때문에 내 응용 프로그램은 Linux에 있습니다. 당신은 리눅스에 대한 비슷한 도구를 hava ?? – Sunil
왜 브라우저를 사용해야합니까? 쿠키/세션 때문에? HttpClient가이 작업을 수행 할 수 있습니다. 불행히도 Linux 용 Watij에 대해서는 잘 모릅니다. –
신청서의 요구 사항은 고객 계좌에 로그인하여 대리인을 대신하여 거래를하는 것입니다 (예 : paypal). 로그인 부분은 자바 애플리케이션에 의해 수행되어야하며 사용자는 추가 페이지로 이동할 수 있어야합니다. HttpClient를 사용하여이 문제를 해결할 수 있습니까? – Sunil