Page 4 of 8 FirstFirst ... 2 3 4 5 6 ... LastLast
Results 46 to 60 of 108

Thread: Login to webform (how to)

  1. #46
    Quote Originally Posted by jkuiper View Post
    Is dat niet TWebbrowser, die gekoppeld is aan IE?
    ja, je kan via twebbrowser maar ook tinternetexplorer of CreateOleObject('InternetExplorer.Application') etc

  2. #47
    Member Richard63's Avatar
    Join Date
    Jan 2014
    Location
    Heerenveen
    Posts
    75
    Quote Originally Posted by Miep View Post
    De reis is altijd leuker dan de aankomst

    Hier een link naar het eerste vertrek punt http://delphi.about.com/od/twebbrows...web_form_2.htm
    en iets meer over het webbrowser component http://delphi.about.com/od/twebbrowser/

    overigens kan je dat ook weer overslaan en direct een com object genereren maar via twebbrowser is het leven iets makkelijker.
    Ik krijg met bovenstaand voorbeeld een de hele webpagina te zien ingelogd en wel, omdat ik nog ingelogd ben op een webpagina in de browser denk ik.
    maar:
    A) hoe kan ik rechtstreeks een pagina laden ipv via een hyperlink
    B) hoe en waar kan ik de html data er uit filteren (waar word de pagina opgeslagen)

    verder wel lollig om zo een eigen mini browser voor vaste pagina's te maken.

  3. #48
    Member Richard63's Avatar
    Join Date
    Jan 2014
    Location
    Heerenveen
    Posts
    75
    Ok dan nu het resultat:
    in twebbrowser zie ik de teller op bv 3 staan en save dit naar een webpagina.html
    die laad ik vervolgens in een editor en onderzoek de code, nou mooi niet de berichten er in te zien dus. is niet leuk meer zo :-)

    ik moet op een of andere manier de RAW data hebben.
    ik zie in de opgeslagen webpagina de volgende code staan die ik eerder nooit kreeg.

    <script type="text/javascript">
    function iframeMessage(event) {
    if (event.origin != 'http://xh@mster.com' && event.origin != 'http://www.xh@mster.com') return;
    data = event.data.split('|');
    if (data[0] == 'url') window.location.href = data['1'];
    }
    if('addEventListener' in window) {
    window.addEventListener('message', iframeMessage, false);
    } else if ('attachEvent' in window) {
    window.attachEvent('onmessage', iframeMessage);
    };
    $(document).ready(function() {
    $('select#sortby').change(function(){window.locati on.href = 'http://xh@mster.com'+$(this).val();});;
    });
    </script>


    Url beetje aangepast lol.
    Last edited by Richard63; 30-Jan-14 at 21:47. Reason: code toegevoegd

  4. #49
    ik snap de vraag niet echt maar als je wilt inloggen via de twebbrowser dan
    - doe je een navigate naar de website.
    - Op de webpagina die dan in je browser object staat staat ook de login form
    - In de webbrowser vul je form fields die gevuld moeten worden
    en
    - vervolgens vertel je de webbrowser dat er op de login knop geklikt moet worden.

    klaar, je bent ingelogd.

    De pagina die vervolgens door de webbrowser gerenderd is daarvan kan je de html source ophalen via outerhtml

    de belangrijkste delen van de code
    Code:
    -- ga naar een url
    ie.Navigate(edturl.Text);
    --- vul een field
    Document := ie.Document;
    TableItems := Document.Body.GetElementsByTagName(Tag);
    tableItem.value := Value;
    --- click
    field := Document.all.item(i,'') as IHTMLElement;
    field.click;
    --- ophalen html
    iall := (ie.Document AS IHTMLDocument2).body;
    memo2.Text := iall.outerHTML;

  5. #50
    Member Richard63's Avatar
    Join Date
    Jan 2014
    Location
    Heerenveen
    Posts
    75
    Verdikkie, heb nu iets heel simpels gemaakt zonder indy, en die laat wel de bron zien waar het zo nodige cijfer in te zien is.
    Delphi Code:
    1. unit Unit1;
    2.  
    3. interface
    4.  
    5. uses
    6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    7.   Dialogs, mshtml, StdCtrls, OleCtrls, SHDocVw;
    8.  
    9. type
    10.   TForm1 = class(TForm)
    11.     WebBrowser1: TWebBrowser;
    12.     Button1: TButton;
    13.     Memo1: TMemo;
    14.     procedure Button1Click(Sender: TObject);
    15.     procedure FormCreate(Sender: TObject);
    16.   private
    17.     { Private declarations }
    18.   public
    19.     { Public declarations }
    20.   end;
    21.  
    22. var
    23.   Form1: TForm1;
    24.  
    25. implementation
    26.  
    27. {$R *.dfm}
    28.  
    29. procedure TForm1.Button1Click(Sender: TObject);
    30. var
    31.     iall : IHTMLElement;
    32. begin
    33.    if Assigned(WebBrowser1.Document) then
    34.    begin
    35.      iall := (WebBrowser1.Document AS IHTMLDocument2).body;
    36.      while iall.parentElement <> nil do
    37.      begin
    38.        iall := iall.parentElement;
    39.      end;
    40.      memo1.Text := iall.outerHTML;
    41.    end;
    42. end;
    43.  
    44. procedure TForm1.FormCreate(Sender: TObject);
    45. begin
    46.   webBrowser1.Navigate('http://xh@mster.com/messages-1');
    47. end;
    48.  
    49. end.

    zal nu het zoek deel er aan toevoegen en het inlog deel en dan nog een geluidje af spelen als het getal groter is als nul.

    ik heb alle projectjes opgeslagen voor latere bewerking en zal er zeker veel van leren (ps in bovenstaand voorbeeld zet ik tmemo en twebbrowser op non visible.

  6. #51
    Member Richard63's Avatar
    Join Date
    Jan 2014
    Location
    Heerenveen
    Posts
    75
    Quote Originally Posted by Miep View Post
    ik snap de vraag niet echt maar als je wilt inloggen via de twebbrowser dan
    - doe je een navigate naar de website.
    - Op de webpagina die dan in je browser object staat staat ook de login form
    - In de webbrowser vul je form fields die gevuld moeten worden
    en
    - vervolgens vertel je de webbrowser dat er op de login knop geklikt moet worden.

    klaar, je bent ingelogd.

    De pagina die vervolgens door de webbrowser gerenderd is daarvan kan je de html source ophalen via outerhtml

    de belangrijkste delen van de code
    Code:
    -- ga naar een url
    ie.Navigate(edturl.Text);
    --- vul een field
    Document := ie.Document;
    TableItems := Document.Body.GetElementsByTagName(Tag);
    tableItem.value := Value;
    --- click
    field := Document.all.item(i,'') as IHTMLElement;
    field.click;
    --- ophalen html
    iall := (ie.Document AS IHTMLDocument2).body;
    memo2.Text := iall.outerHTML;
    onze post hebben elkaar net gekruist zie ik.
    ik ga jou code nog even mee nemen in mijn opzet.
    laat het weten zodra ik e ruit ben, weer veel geleerd !

    dank U

  7. #52
    Het werkt nu omdat je dus al ingelogd was via je browser, dit omdat je met een afgeleide IE werkt in je software neemt je twebbrowser dus ook de inlog cookies al mee bij het ophalen van de pagina. En zoals ik al zei de webbrowser haalt de pagina in zijn volledigheid inclusief alle objecten op. Vervolgens wordt deze volledig gerenderd en is via outerhtml beschikbaar.

    Dus blijft over het invullen van de correcte login velden en de click op de button maar de volledige voorbeeld code vindt je in de eerste link.

  8. #53
    Member Richard63's Avatar
    Join Date
    Jan 2014
    Location
    Heerenveen
    Posts
    75
    Misschien een domme vraag maar krijg bovenstaande code niet verwerkt tot een werkzaam programma.
    ik heb het in een button3click procedure geplaatst maar moet er nog iets toegevoegd worden aan uses ??

  9. #54
    de code was maar een klein kort voorbeeld, die kan je niet zo overnemen! De meest essentiële regels staan erin. echt uitgebreid staat het in eerste link

  10. #55
    Member Richard63's Avatar
    Join Date
    Jan 2014
    Location
    Heerenveen
    Posts
    75
    had het wat laat door maar heb het werkend alleen kom ik er net achter dat pos() niet meer doet wat het zou moeten doen dus dat deel ga ik opnieuw maken.

  11. #56
    Member Richard63's Avatar
    Join Date
    Jan 2014
    Location
    Heerenveen
    Posts
    75
    Heb nu een uitlees gemaakt maar na het om de 5 seconden triggeren van de webBrowser1.Navigate(url'');
    is er steeds een toontje te horen (windows) soort thud geluidje (ligt aan welk thema je gebruikt in windows) is dit te voorkomen (zonder windows thema geluiden uit te zetten uiteraard) ?

  12. #57

  13. #58
    Member Richard63's Avatar
    Join Date
    Jan 2014
    Location
    Heerenveen
    Posts
    75
    heb een werkend programma nu, het inloggen sla ik nog even over
    het is nu gelinkt aan 1malig inloggen in explorer (die daarna weer gesloten mag en gewoon chrome of zo verder gebruiken)
    na het weekend ga ik weer verder (nu ff genoeg er van :-))
    Bedankt tot zo ver

    ps lach niet om mijn manier van timer loop, ik leer nog en dit was de enige snelle manier.


    zijn nog wat eigenaardigheidjes die ik uit moet zoeken maar de functionaliteit die ik zocht is er nu.

    Delphi Code:
    1. unit Unit1;
    2.  
    3. interface
    4.  
    5. uses
    6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    7.   Dialogs, mshtml, StdCtrls, OleCtrls, SHDocVw, ExtCtrls, Registry, mmsystem, StrUtils;
    8.  
    9. type
    10.   TForm1 = class(TForm)
    11.     WebBrowser1: TWebBrowser;
    12.     Button1: TButton;
    13.     Memo1: TMemo;
    14.     Timer1: TTimer;
    15.     Button2: TButton;
    16.     Label1: TLabel;
    17.     Label2: TLabel;
    18.     Label3: TLabel;
    19.     procedure Button1Click(Sender: TObject);
    20.     procedure FormCreate(Sender: TObject);
    21.     procedure Button2Click(Sender: TObject);
    22.     procedure Timer1Timer(Sender: TObject);
    23.     procedure LogInButtonClick(Sender: TObject);
    24.        
    25.   private
    26.     { Private declarations }
    27.   public
    28.     { Public declarations }
    29.   end;
    30.  
    31. var
    32.   Form1: TForm1;
    33.   S: TStringList;
    34.   M: TStream;
    35.  
    36. implementation
    37.  
    38. {$R *.dfm}
    39.  
    40.  
    41. procedure TForm1.FormCreate(Sender: TObject);
    42. begin
    43.  webBrowser1.Navigate('http://xh@mster.com/messages-1');    // haal om de 30 seconden de pagina op
    44.  Button1.Click;
    45.  Button2.Click;
    46.  //Form1.WindowState := wsMinimized;
    47. end;
    48.  
    49.  
    50. procedure TForm1.Button1Click(Sender: TObject);
    51. var
    52.     iall : IHTMLElement;
    53. begin
    54.    if Assigned(WebBrowser1.Document) then
    55.    begin
    56.      iall := (WebBrowser1.Document AS IHTMLDocument2).body;
    57.      while iall.parentElement <> nil do
    58.      begin
    59.        iall := iall.parentElement;
    60.      end;
    61.      memo1.Text := iall.outerHTML;
    62.    end;
    63. end;
    64.  
    65. procedure TForm1.Button2Click(Sender: TObject);
    66. var
    67.    Resultaat      : string;
    68.    Nummer         : integer;
    69.    BeginPositie   : integer;
    70.    EndPositie     : integer;
    71.    kenwoord       : integer;
    72.    Result         : boolean;
    73.  
    74. begin
    75.      kenwoord := Pos('messages-1',Memo1.Text);  // het cijfer dat gezocht word zit op 19 tekens van hier
    76.      Result := (kenwoord > 0);
    77.      if Result then
    78.      begin
    79.         Memo1.SelStart := kenwoord-1;
    80.         Memo1.SelLength := Length('messages-1');  //  10
    81.         //Memo1.SetFocus;
    82.         Label1.Caption :=  IntToStr(kenwoord);
    83.         Resultaat := copy(Memo1.Text,kenwoord+29,1);
    84.         Label1.Caption := 'er zijn '+Resultaat+' berichten voor u';
    85.  
    86.         if Resultaat = '<' then
    87.         Label1.Caption := 'er zijn 0 berichten voor u'
    88.         else
    89.         if Resultaat <> '<' then
    90.     //  Form1.WindowState := wsNormal;
    91.         Playsound(PChar('C:\Windows\Media\Windows Logon Sound.wav'),0,SND_NOWAIT);
    92.      end;
    93.  
    94.  
    95.      BeginPositie := Pos('<span>',Memo1.Text);  // het cijfer dat gezocht word zit hier net voor
    96.      Result := (BeginPositie > 0);
    97.      if Result then
    98.      begin
    99.         Memo1.SelStart := BeginPositie-1;
    100.         Memo1.SelLength := Length('<span>');  // 6
    101.         //Memo1.SetFocus;
    102.         Label2.Caption :=  IntToStr(BeginPositie);
    103.         Resultaat := copy(Memo1.Text,BeginPositie-1,1);
    104.        // Label2.Caption := Resultaat;
    105.      end;
    106.  
    107.  
    108.      EndPositie := Pos('</span>',Memo1.Text);  // het cijfer dat gezocht word zit hier net voor
    109.      Result := (EndPositie > 0);
    110.      if Result then
    111.      begin
    112.         Memo1.SelStart := EndPositie-1;
    113.         Memo1.SelLength := Length('</span>');  // 7
    114.         //Memo1.SetFocus;
    115.         //Label3.Caption :=  IntToStr(EndPositie);   // 1557
    116.         Resultaat := copy(Memo1.Text,EndPositie-1,1);
    117.         //Label3.Caption := Resultaat;
    118.      end;
    119.  
    120.      nummer := EndPositie-BeginPositie-6; //  min de lengte van het woord <span> = 6
    121. Label3.Caption := IntToStr(nummer);
    122. // als  nummer > 0
    123.  
    124.  
    125. end;
    126.  
    127.  
    128. procedure TForm1.Timer1Timer(Sender: TObject);
    129. begin
    130.     webBrowser1.Navigate('http://xh@mster.com/messages-1');    // haal om de 30 seconden de pagina op
    131.     Button1.Click;
    132.     Button2.Click;
    133.  
    134. end;
    135.  
    136. // HKEY_CURRENT_USER\AppEvents\Schemes\Apps\Explorer\Navigating\.current
    137.  
    138. procedure TForm1.LogInButtonClick(Sender: TObject);
    139. begin
    140.       webBrowser1.Navigate('http://xhamster.com/cross.php?name=naam en wachtwoord'); // werkt dus niet op deze manier nog
    141. end;
    142.  
    143. end.

  14. #59
    Ik lach niet, goed dat je hier al bent aangekomen.

    Wel de volgende opmerking : Een navigate kan tijd kosten aangezien het ophalen afhankelijk is van de website etc, maar de navigate komt al eerder terug (async call). Daardoor weet je nooit zeker of de pagina die je staat te parsen al in zijn geheel is aangekomen. Een test op readystate en busy is noodzakelijk voordat je gaat parsen.

  15. #60
    Toch nog 1 opmerking : Is een refresh niet voldoende om een nieuwe status van de berichten binnen te krijgen?

    Een website die nog kan helpen met meer info over de refresh: http://www.cryer.co.uk/brian/delphi/...er_methods.htm

Page 4 of 8 FirstFirst ... 2 3 4 5 6 ... LastLast

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •