AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke TWebBrowser - Auf Tabelle Klicken
Thema durchsuchen
Ansicht
Themen-Optionen

TWebBrowser - Auf Tabelle Klicken

Ein Thema von Metschu · begonnen am 24. Jan 2013 · letzter Beitrag vom 28. Jan 2013
Antwort Antwort
Metschu

Registriert seit: 31. Dez 2006
151 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

TWebBrowser - Auf Tabelle Klicken

  Alt 24. Jan 2013, 11:12
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
Torsten

Geändert von Metschu (24. Jan 2013 um 11:29 Uhr)
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#2

AW: TWebBrowser - Auf Tabelle Klicken

  Alt 24. Jan 2013, 11:16
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.
Michael Justin
  Mit Zitat antworten Zitat
Metschu

Registriert seit: 31. Dez 2006
151 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

AW: TWebBrowser - Auf Tabelle Klicken

  Alt 24. Jan 2013, 11:31
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">
Torsten
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#4

AW: TWebBrowser - Auf Tabelle Klicken

  Alt 24. Jan 2013, 12:06
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.
Michael Justin
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#5

AW: TWebBrowser - Auf Tabelle Klicken

  Alt 24. Jan 2013, 13:07
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;

Geändert von sx2008 (24. Jan 2013 um 13:29 Uhr)
  Mit Zitat antworten Zitat
Metschu

Registriert seit: 31. Dez 2006
151 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#6

AW: TWebBrowser - Auf Tabelle Klicken

  Alt 25. Jan 2013, 11:03
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?
Torsten
  Mit Zitat antworten Zitat
Metschu

Registriert seit: 31. Dez 2006
151 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#7

AW: TWebBrowser - Auf Tabelle Klicken

  Alt 26. Jan 2013, 15:18
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)
Torsten
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#8

AW: TWebBrowser - Auf Tabelle Klicken

  Alt 26. Jan 2013, 16:29
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".
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.
  Mit Zitat antworten Zitat
Metschu

Registriert seit: 31. Dez 2006
151 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#9

AW: TWebBrowser - Auf Tabelle Klicken

  Alt 28. Jan 2013, 21:07
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
Torsten
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:05 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