Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   TWebBrowser - Auf Tabelle Klicken (https://www.delphipraxis.net/172821-twebbrowser-auf-tabelle-klicken.html)

Metschu 24. Jan 2013 10:12

TWebBrowser - Auf Tabelle Klicken
 
Hallo zusammen!

Folgendes Problem:
Ich möchte auf einen "Button" einer Webseite klicken. Dies ist jedoch kein eigentlicher "Input Button", sondern anscheinend auf einer Tabelle hinterlegte weiterleitung (ohne Link). Trotz suche langer Suche im Forum komme ich nicht wirklich weiter :(

Hier mal ein auszug aus dem Script der Webseite:

Code:
<TR>
<TD>
<div class="bg_teaser" onmouseover="this.className='bg_teaser_md';" onmouseout="this.className='bg_teaser';" onmousedown="this.className='bg_teaser_md';" onmouseup="this.className='bg_teaser';" onclick="document.getElementById('siC').value='Inv';document.getElementById('siA').value='CSMRTSA';document.getElementById('sibA').value='';document.getElementById('siw').value='CSMRTSV';document.getElementById('sim').value='StartShift';document.MasterForm.submit();">
<table class="c_in" cellpadding="0" cellspacing="0">
<TR>
<TD class="w100XC"><img src="files/startshift.gif" alt="" class="s_img40"></TD><TD>Schichtbeginn</TD><TD class="c_rightcell_4"><img src="files/pfeil-vor.gif" alt="" width="4px" height="8px"></TD>
</TR>
</table>
</div>
</TD>
</TR>
Könnt Ihr mir mal einen Schubs in die richtige Richtung geben?
Danke schonmal!

Gruß

Torsten

mjustin 24. Jan 2013 10:16

AW: TWebBrowser - Auf Tabelle Klicken
 
Im onClick wird zuletzt das masterForm submitted, ich nehme an es gibt ein <form> Element im Code, das eine URL auf dem Server anspricht.

Code:
onclick="document.getElementById('siebC').value='Inv';...;document.MasterForm.submit();"
Ich weiss aber nicht ob man aus Delphi heraus das submit dieses Forms auslösen kann.

Metschu 24. Jan 2013 10:31

AW: TWebBrowser - Auf Tabelle Klicken
 
Es gibt ein <Form> Element, allerdings ist da keine URL drin...

Code:
<form method="GET" name="MasterForm" action="">
<input id="siC" name="C" value="" type="hidden"><input name="Rqr" value="0" type="hidden"><input name="Nct" value="true" type="hidden"><input name="R" value="1-5423" type="hidden"><input id="sim" name="M" value="" type="hidden"><input id="sivw" name="V" value="" type="hidden"><input id="siKx" name="Kx" value="" type="hidden"><input id="siA" name="A" value="" type="hidden"><input name="Cnt" value="12" type="hidden">

mjustin 24. Jan 2013 11:06

AW: TWebBrowser - Auf Tabelle Klicken
 
Zitat:

Zitat von Metschu (Beitrag 1200421)
Es gibt ein <Form> Element, allerdings ist da keine URL drin...

Code:
<form method="GET" name="MasterForm" action="">
<input id="siC" name="C" value="" type="hidden"><input name="Rqr" value="0" type="hidden"><input name="Nct" value="true" type="hidden"><input name="R" value="1-5423" type="hidden"><input id="sim" name="M" value="" type="hidden"><input id="sivw" name="V" value="" type="hidden"><input id="siKx" name="Kx" value="" type="hidden"><input id="siA" name="A" value="" type="hidden"><input name="Cnt" value="12" type="hidden">

Ohne URL ist es höchst wahrscheinlich so, dass das Formular an die Adresse gesendet wird die das Dokument selber hat. Also wenn die URL /app/index.html das Form enthält, wird ein GET auf /app/index.html ausgeführt und bei diesem GET werden die angegebenen Parameter übergeben. Über JavaScript könnten diese vor dem GET noch andere Werte erhalten haben, sonst wäre das form sinnlos - da die Felder des form nicht angezeigt werden, kann der Benutzer sie auch nicht ändern.

Um den Button zu simulieren muss das Delphi Programm also erst einmal die gewünschten Werte in die versteckten Form Felder eintragen, und dann das submit des form im TWebbrowser auslösen.

sx2008 24. Jan 2013 12:07

AW: TWebBrowser - Auf Tabelle Klicken
 
Viele HTML-Elemente (Buttons, Links,...) haben die Methode Click().
Da auf der Seite JavaScript verwendet wird, bleibt dies wohl die einzige (sinnvolle) Möglichkeit den Mausklick auszulösen.
Die Frage ist jetzt nur wie man das richtige Element findet...
Hier ist mal etwas ungetester Code:
Delphi-Quellcode:
var
  teaser : OleVariant;
begin
  teaser := document.getElementsByClassName('bg_teaser');
  if not VarIsNull(teaser) then
    // falls die Class 'bg_teaser' nicht gefunden wurde, sollte man es auch noch mit
    // 'bg_teaser_md' versuchen
    //
    // getElementsByClassName() liefert wahrscheinlich eine Collection zurück
    // man muss noch herausfinden, wie man das 1. Element daraus ansprechen kann
    teaser.Click;
end;

Metschu 25. Jan 2013 10:03

AW: TWebBrowser - Auf Tabelle Klicken
 
Danke schonmal für die Antworten.

Wenn ich die Methode von SX2008 teste, bekomme ich bei der Ausführung folgende Fehlermeldung:

"Die Methode 'getElementsByClassName' wird vom Automatisierungsobjekt nicht unterstützt."

Liegt das am TWebBrowser oder an der Homepage?

Metschu 26. Jan 2013 14:18

AW: TWebBrowser - Auf Tabelle Klicken
 
Ist das ganze denn über die Indy-Komponente Einfacher zu lösen??
Sehen muß ich das ganze Seite eigentlich nicht, sondern brauche nur eine Rückmeldung ob es ausgeführt wurde.

Im Prinzip hab soll folgendes Ablaufen:
  • Einloggen auf der Homepage (klappt schon)
  • Button "Schicht Beginnen" oder "Schicht Beenden" drücken (da hänge ich grade)
  • Ergebniss auf der danach folgenden Webseite ermitteln (Steht dann "Anwesend" oder "Nicht Anwesend", Quelltext auslesen dürfte laut Beschreibung mit der Indy-Komopente kein Problem sein)

sx2008 26. Jan 2013 15:29

AW: TWebBrowser - Auf Tabelle Klicken
 
Zitat:

Zitat von Metschu (Beitrag 1200538)
folgende Fehlermeldung:
"Die Methode 'getElementsByClassName' wird vom Automatisierungsobjekt nicht unterstützt."
Liegt das am TWebBrowser oder an der Homepage?

Das liegt wahrscheinlich an deiner Version des Internet Explorers (hast du Version 9?).
Die Methode wird nur von neueren Webbrowsern unterstützt.

Aber es gibt auch noch andere Wege das Element innerhalb des DOM-Baums zu finden und dann "anzuklicken".
Zitat:

Zitat von Metschu (Beitrag 1200538)
Ist das ganze denn über die Indy-Komponente Einfacher zu lösen??

Das Problem ist, dass Indy keine Javascript-Unterstützung hat.
Es ist möglich, die Daten auch ohne Javascript zu senden, aber dazu müsste man den Netzwerkverkehr aufzeichnen, genau analysieren und selbst nachbauen.
Im IE die Taste F12 drücken und Aufzeichnung starten.

Metschu 28. Jan 2013 20:07

AW: TWebBrowser - Auf Tabelle Klicken
 
Zitat:

Zitat von sx2008 (Beitrag 1200705)
Es ist möglich, die Daten auch ohne Javascript zu senden, aber dazu müsste man den Netzwerkverkehr aufzeichnen, genau analysieren und selbst nachbauen.
Im IE die Taste F12 drücken und Aufzeichnung starten.

Danke für den Tip!
Damit habe neue "URL´S" bekommen, die ich dann direkt aufrufen kann, somit komme ich schon weiter.
Leider ist in den URLs noch der Benutzername als Variable drin - und diese Variable sehe ich erst, wenn ich mich Manuell einlogge und ne Aktion ausführe. So muß ich erst alle Benutzervariablen manuell ermitteln und sie dann in ne Datenbank Benutzername -> Variable einbauen, aber ich komme auf jeden Fall schonmal weiter.

Gruß

Torsten


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:31 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz