javascript-Funktion aus Applikation aufrufen

weicht2

Grünschnabel
Hallo Leute,

ich(Win XP, Firefox 3.6.8, Java 1.6) habe ein Problem, zu dem mir momentan nichts einfaellt:

Ich lade ein Seite ins Programm:

URL myurl;
BufferedReader URLInput;
try{
myurl =new URL("http://testen.zulutrade.com/TradeHistoryIndividual.aspx?pid=26203");

try{
URLInput=new BufferedReader(new InputStreamReader(myurl.openStream()));
String line="";
int i=0;

//Zeile fuer Zeile einlesen
while( (line=URLInput.readLine()) !=null ){
System.out.println(line);
}//while

So weit, so gut.
Das Problem ist, die Seite enthaelt ein Tabelle, deren Inhalte per Javascript aufgefuellt werden. Ich nenne sie mal

Unterseiten. Bei ersten Laden der Seite ist die erste Unterseite bereits in der Tabelle geladen. Wenn der Betrachter jetzt zb.

die Unterseite 2 haben will, klickt er auf den entsprechenden Link.
Dieser lautet:

<a href="javascript:__doPostBack('ctl00$box1$GridViewTradeHistory','Page$2')">2</a>

Der Server laedt jetzt mit der aufgerufenen doPostBack-Funktion die Seite 2 in die Tabelle.

Die Funktion __doPostBack() ist moeglicherweise in der Datei page1prov1subpage1-Dateien/common.js enthalten.

Es gibt aber auf der Seite auch noch andere Quellangabe fuer javascript, zb.:

<script src="page1prov1subpage1-Dateien/jquery.js" type="text/javascript"></script>
<script src="page1prov1subpage1-Dateien/common.js" type="text/javascript"></script>
<script src="page1prov1subpage1-Dateien/ScriptResource_007.axd" type="text/javascript"></script>
<script src="page1prov1subpage1-Dateien/ScriptResource_002.axd" type="text/javascript"></script>
<script src="page1prov1subpage1-Dateien/ScriptResource_003.axd" type="text/javascript"></script>
<script src="page1prov1subpage1-Dateien/ScriptResource_004.axd" type="text/javascript"></script>
<script src="page1prov1subpage1-Dateien/ScriptResource_005.axd" type="text/javascript"></script>
.
.
usw.

Wenn die im Browser geladene Webseite diese Scriptfunktion aufruft, weiss die Funktin natuerlich, wo die die Daten hinschicken

muss.

Wie kann ich die Funktion aber aus einer Java-Applikation heraus aufrufen? (Bei Applets gibt es ja zb. eine Funktion Namens

getCodeBase(), dann geht das wohl. Aber meine Applikation hat natuerlich keine Codebase.

Weiss jemand, wie man das macht? Eventuell wuerfe es auch etwas bringen, wenn jemand wuesste, wie man diese Postback-funktion

aus der Adresszeile des Browsers heraus in einem Stueck mit der Seite selbst aufrufen kann (zb.

http://testen.zulutrade.com/TradeHistoryIndividual.aspx?pid=26203&javascript:__doPostBack('ctl00$box1$GridViewTradeHistory','Pa

ge$2')
oder so aehnlich. Vermutlich muesste man dabei auch noch irgendwie die Quelldatei angeben, in der die Funktion liegt.

Stehe, wie gesagt, hier voellig auf dem Schlauch. Bin fuer jede Hilfe dankbar!
 
Schau dir mit einer entsprechenden Software (z.B. wireshark) oder einem Plugin für deinen Browser (z.B. HttpFox für Firefox) an, was gesendet wird, nach dem du diesen Link geklickt hast.
Anschließend simulierst du mit Java eben diese Http-Post-Anfrage.
 
Hallo ,

vielen Dank erstmal fuer den Tip, das HttpFox ist schon ein sehr gutes Tool, und die Informationen, die es bietet sind sehr

reichhaltig! Jedoch habe ich ueber die von mir gesuchte javascript-Anfrage dort auch nichts gefunden (ich habe mir den Inhalt

aller Tabs in den Texteditor rueberkopiert).

Die Anfrage, die ich machen moechte, besteht aus 2 Teilen:

1.) http://testen.zulutrade.com/TradeHistoryIndividual.aspx?pid=11487

2.) javascript:__doPostBack('ctl00$box1%GridViewTradeHistory','Page%7')

Aber wie verbindet man die beiden Teile? etwa, indem man den zweiten Teil wie ein zusaetzliches Argument dranhaengt, also

...Individual.aspx?pid=11487&javascript:__doPostBack('ctl0...

Das hab ich schon probiert, der Server ignoriert es souveraen und bringt stattdessen Seite 1!
Ausserdem: muesste man dem Server nicht mitteilen, in welchem Script die doPostBack-Funktion, die ausgefuehrt werden soll,

liegt?

Gruesse,
weicht2
 
Du kannst das JavaScript nicht auf diese Art aufrufen. Und das kann auch nicht dein Ziel sein. Stattdessen musst du das gleiche, was das JavaScript macht, mit deinem Programm machen.
Der Name der JavaScript-Funktion lässt darauf schließen, dass diese eine HTTP-Post-Anfrage sendet. Deshalb sollst du mit HttpFox gucken, was denn gesendet wird, wenn du auf den Link klickt (nicht der aus meiner Signatur ;) sondern der Link um die Seite zu wechseln.) und das gleiche mit deinen Java Programm machen.
Der Quelltext den du direkt am Anfang angegeben hast, ließt die URL per HTTP-Get aus. Jetzt musst du noch gucken, wie man eine Post-Anfrage sendet.

HttpFox Zeigt dir genau, welche Daten du mitsenden musst. Es ist nicht damit getan, eine Url abzurufen und man bekommt dann die Daten der nächsten Seite. Du musst vermutlich das Session-Cookie mitsenden und alle Post-Daten ("__EVENTTARGET", "__EVENTARGUMENT", etc.). Wenn du irgendetwas davon vergisst oder falsch sendest, wird dir der Server nicht die gewünschte Antwort liefern.
 
@CPoly,

Danke nochmal für Deine ausführliche Antwort, und Entschuldigung, daß ich so spät antworte.

Das, was Du geschieben hast, (mit dem Nachbilden der in der JavascriptßFunktion enthaltenen POST- oder GET-Befehle) erscheint mir schon plausibel, aber in der Praxis für einen Laien auf diesem Gebiet wie mich doch sehr schwer durchführbar. Man kann es versuchen, aber bis es dann wirklich klappt, das kann dauern...

Deshalb, und da ich das Programm wahrscheinlich nur einmal und fuer mich selbst laufen lasse, habe ich mich hier vorerst zu einer programmierteschnisch wenuger aufwändigen Lösung entschlossen: Fernbedienung des Webbrowsers mittels Class Robot. Dies ist von der Performance her viel langsamer als die direkte Methode, aber, wie gesagt, ich brauche das Programm nur einmal zum Dateneinsammeln, dann nicht mehr. Aussedem hat die Robot-Methode den Vorteil, dass sie praktisch mit jedem Programm arbeitet (natürlich sorgfältig auf das jeweilige Programm angwpasst!).

Aber Danke nochmal für Deinen engagierten Einsatz!

Gruß, Alex
 

Neue Beiträge

Zurück