Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Webbrowser OleObject - Felder füllen (https://www.delphipraxis.net/174215-webbrowser-oleobject-felder-fuellen.html)

gee21 9. Apr 2013 20:59

Webbrowser OleObject - Felder füllen
 
Hallo
Weiss jemand von euch warum ich diese 2 Felder nicht ausfüllen kann? Ist das nicht HTML? Oder mache ich mal wieder etwas falsch?

Feld1
Code:
<textarea id="message" name="message" style="width: 100%; overflow=auto;" tabindex="2" onkeypress="sms_message_change(this.form)"
Feld2:
Code:
        <textarea id="recipient" name="recipient" class="wickEnabled" style="width: 100%;" tabindex="1" onclick="hideErrorBlock();" onblur="countRecipients()" rows="2">
ich versuche es so auszufüllen:
Delphi-Quellcode:
webbrowser1.oleobject.document.forms.item(1).elements.item('message').value := memo1.text;
(Item0-5 hab ich mal durchprobiert da ich nicht genau wusste wo die Felder genau liegen)

(Ganzer Homepage Code)
Delphi-Quellcode:
<html>
<head>
<meta http-equiv="Content-Script-Type" content="text/javascript" />



<script type="text/javascript">
<!--

function convertRecipient(recipient) {

   //remove all non digit numbers but not +
   recipient = recipient.replace(/[^\d|^\+]+/g, "");
   
   if (recipient.length >= 3) {
      //IF first char=0 and 2nd not 0 THEN replace 0 by +41
      if (recipient.match("^0[^0]\d+")) {
         recipient = recipient.replace("^0", "+41");
      }
      
      //IF first and 2nd char=0 THEN replace 00 by +
      if (recipient.match("^00\d+")) {
         recipient = recipient.replace("^00", "+");
      }
   }

   return recipient;
}

function countRecipients(){

   var tmprecipients = document.getElementById('recipient').value
   var arraySpitter = tmprecipients.split(",");
   contactCounter= arraySpitter.length;
   if(contactCounter>10){
      document.getElementById('recipientsWarningTR').style.display = '';
   }
   else{
      document.getElementById('recipientsWarningTR').style.display = 'none';
   }
}

function addRecipient(recipientMsisdn, recipientName) {


   formatedRecipient= recipientName+" <"+convertRecipient(recipientMsisdn)+">";
   
   if(document.getElementById('recipient').value.length==0){
      document.getElementById('recipient').value=formatedRecipient;
   }
   else{
      document.getElementById('recipient').value=document.getElementById('recipient').value+", "+formatedRecipient;
   }

   countRecipients();
}

//-->
</script>

<link rel="stylesheet" href="/mip/ext/css/content.css" type="text/css" media="screen,projection" charset="utf-8" />
<link rel="stylesheet" href="/mip/ext/css/general.css" type="text/css" media="all" title="no title" charset="utf-8" />
<link rel="stylesheet" href="/mip/ext/css/screen.css" type="text/css" media="screen,projection" charset="utf-8" />
<link rel="stylesheet" href="/mip/ext/css/header.css" type="text/css" media="screen,projection" charset="utf-8" />
<link rel="stylesheet" href="/mip/ext/css/images.css" type="text/css" media="all" charset="utf-8" />
<link rel="shortcut icon" href="/mip/ext/img/favicon.ico" type="image/gif" media="all" />
<link rel="icon" href="/mip/ext/img/favicon.ico" type="image/gif" media="all" />
<!--[if IE]>
  <link rel="stylesheet" href="/mip/ext/css/screen_ie.css" type="text/css" media="screen" charset="utf-8" />
<![endif]-->
<!--[if lt IE 7]>
    <link rel="stylesheet" href="/mip/ext/css/screen_ie6.css" type="text/css" media="screen" charset="utf-8" />
<![endif]-->
<!--[if lt IE 6]>
    <link rel="stylesheet" href="/mip/ext/css/screen_ltie6.css" type="text/css" media="screen" charset="utf-8" />
<![endif]-->

<STYLE TYPE="text/css">
<!--
BODY {margin: 0;}
INPUT {border: 1px solid #C1B2B4;}
TEXTAREA {border: 1px solid #C1B2B4;}
textarea.error {
  background-color:#FCE5F1;
  color:black;
}
.radio_b {
  border: none !important;
  vertical-align: middle !important;
  padding-left: 10px;
  padding-right: 2px 2px 2px 0px;
}
.attachment_b {border: 1px solid #C1B2B4 !important;}
.attachment_b_opera {border: none !important;}

.accordion h2 {
   background-color:#E0CED0;
   padding:0pt;
   margin:0pt;
   cursor: pointer;
}
.accordion h2 span {
   padding:0px;
   margin:0pt;
}
.accordion h2 span img {
   float:right;
   margin:0.4em 0.4em 0pt 0pt;
   padding-right:0.4em;
}
.contacts div {
   line-height:2.0em;
   padding-left:0.4em;
}
.header {
   padding-bottom:0.5em;
   padding-top:0.5em;
}
.contact_item div {
   display: inline;
   cursor: pointer;
}
.button div {
   display:table-cell;
}
 
* html .button {
   display:inline-block;
}

.pg-normal {
    font-weight: normal;
}
 
.pg-selected {
    font-weight: bold;
}
-->
</STYLE>

<title>SMS-/MMS-Sender</title>

   
   <script type="text/javascript" language="JavaScript" src="/mip/ext/js/paging.js"></script>
   
   
   <script type="text/javascript" language="JavaScript" src="/mip/ext/js/motionpack.js"></script>
   
   
   
   <link rel="stylesheet" href="/mip/ext/css/wick.css" type="text/css" media="all" title="no title" charset="utf-8" />
   
   
   
   
   
   
   
   
   
      <script type="text/javascript" language="JavaScript">
         collection = ['""'];
      </script>
   
   
   
   <script type="text/javascript" language="JavaScript">
      contactCounter=0;
   </script>
   
   <script type="text/javascript" language="JavaScript" src="/mip/ext/js/wick.js"></script>
   
   
   
      <script type="text/javascript" language="JavaScript">
      //<!--
       function checkForm() {
          answer = true;

           if ( document.getElementById('mmsRB').checked) {
            document.getElementById('mmsAttachmentFileName').value = document.getElementById('mmsAttachment').value;
         }
      
          if (siw && siw.selectingSomething)
               answer = false;
          return answer;
       }
      //-->
   </script>
   

   
   
   
   
   <script type="text/javascript" language="JavaScript" src="/mip/ext/js/cookieTools.js"></script>


</head>

<body onload="onBodyLoadFn()" marginheight="0" marginwidth="0" topmargin="0" leftmargin="0">

   
   

 
  <p>
   
      <span id="errorBlock" class="error">
       
          <!-- SMS limit reached warning -->
       <div id="smsWarningTR" style="display:none;">
           Die maximale Nachrichtenlänge wurde erreicht.
       </div>
       </span>
     
  </p>

    <div id="recipientsWarningTR" class="error" style="display:none;">
        Es können maximal 10 Empfänger pro Nachricht ausgewählt werden.
    </div>

 

 

  <table border="0" width="100%" style="margin: 0pt">
    <!-- set up proportions -->
    <tr>
      <td width="30%"></td>
      <td width="50%"></td>
      <td></td>
    </tr>

    <!-- Here begins the form -->
    <form id="smsMmsSenderForm" method="post" action="/mip/dyn/login/smsMeinKonto?lang=de" enctype="multipart/form-data" onsubmit="return checkForm()">

    <!-- Sender -->
    <tr>
      <td>
        Absender
      </td>
      <td colspan="2">
         000000000
      </td>
    </tr>

    <!-- Recipient input text + message length counter -->
    <tr>
      <td>
        Empfänger
      </td>
      <td>
        <textarea id="recipient" name="recipient" class="wickEnabled" style="width: 100%;" tabindex="1" onclick="hideErrorBlock();" onblur="countRecipients()" rows="2"></textarea>
      </td>
      <td style="text-align: right">
        <div style="float:right;"><input style="width: 45px;" type="text" name="charsLeft" readonly="readonly" maxlength="10" tabindex="-1" value="160" /></div>
      </td>
    </tr>

    <!-- SMS / MMS Switch -->
    <tr>
      <td>
      &nbsp;
      </td>
      <td style="padding-left: 0px;" colspan="2">
      <div style="vertical-align: middle; padding: 4px 2px 0px 0px;">
           <input id="smsRB" name="type" class="radio_b" tabindex="-1" onclick="hideErrorBlock(); switchToSmsView(this.form);" type="radio" value="sms" checked="checked"/>SMS
           <input id="mmsRB" name="type" class="radio_b" tabindex="-1" onclick="hideErrorBlock(); switchToMmsView(this.form);" type="radio" value="mms"/>MMS
      </div>
      </td>
    </tr>

    <!-- Message textarea -->
      <tr>
        <td>
          Nachricht
        </td>
        <td colspan="2">
          <textarea id="message" name="message" style="width: 100%; overflow=auto;" tabindex="2" onkeypress="sms_message_change(this.form)" onkeyup="sms_message_change(this.form)" rows="4" cols="40"></textarea>
        </td>
      </tr>

    <!-- MMS Attachment -->
    <tr id="mmsAttachmentTR" style="display:none;">
      <td>
        Bild hinzufügen:
      </td>
      <td colspan="2">
        <input type="file" class="attachment_b" id="mmsAttachment" name="mmsAttachment" size="10" accept="image/*" tabindex="3">
        <input id="mmsAttachmentFileName" name="mmsAttachmentFileName" type="hidden" value=""/>
      </td>
    </tr>

    <!-- SMS counters -->
      <tr>
        <td>

        </td>

        <!-- Show [Send] button if it is possible -->
        <td colspan="2">
           
              <div class="submit">
                <button type="submit" value="send" name="send" tabindex="4">Senden</button>
                <input type="hidden" name="task" value="send"/>
                <input type="hidden" name="currentMsisdn" value="000000000000"/>
              </div>
           
        </td>
      </tr>
    </form>

    <!-- Show [Buy] button if it is possible -->
    <tr>
       <td>
          Guthaben
       </td>
      <td>
        <form method="post" action="">
           
        </form>
      </td>
      <td>
          Gratis 49 
          Bezahlt 0
      </td>
    </tr>
    <tr>
       <td>
          Postausgang
       </td>
       <td>
          <div class="submit">
               <button type="submit" name="outbox" onclick="openOutboxWindow('/mip/dyn/login/outboxMeinKonto')">Gesendete Nachrichten</button>
          </div>
       </td>
    </tr>
  </table>

  <div class="accordion">
    <h2 class="header first-child" onClick="toggle('contacts','slide_toggle','/mip/ext/img/bus_plus_n.gif','/mip/ext/img/bus_minus_n.gif');">
      <span><img src="/mip/ext/img/bus_plus_n.gif" id="slide_toggle"/></span>
      <span style="padding-left:0.4em;">Adressbuch</span>
    </h2>

    <div class="contacts" id="contacts" style="overflow:hidden;">
        <div class="header">
          <form id="SMSCommand" method="post" action="/mip/dyn/login/smsMeinKonto?lang=de">
         
       
          <div style="float:left;width:70%;padding-left:0.3em;">
            <input id="contactName" name="contactName" class="normal" style="width:49%" tabindex="5" onfocus="if(this.value=='Hans Muster') {this.value='';this.style.color='#000000';}" onblur="if(this.value=='') {this.value='Hans Muster';this.style.color='#afafaf';}" type="text" value="" maxlength="50"/>
            <input id="contactMsisdn" name="contactMsisdn" class="normal" style="width:49%" tabindex="6" onfocus="if(this.value=='+41 76 123 45 67') {this.value='';this.style.color='#000000';}" onblur="if(this.value=='') {this.value='+41 76 123 45 67';this.style.color='#afafaf';}" type="text" value="" maxlength="50"/>
         <input id="editID" name="editID" type="hidden" value=""/>
            <script type="text/javascript">
            //<!--
            if(document.getElementById('contactName').className!="error") {
                document.getElementById('contactName').value = 'Hans Muster';
                document.getElementById('contactName').style.color = '#afafaf';
                document.getElementById('editID').value='';
            }
            if(document.getElementById('contactMsisdn').className!="error") {
                document.getElementById('contactMsisdn').value = '+41 76 123 45 67';
                document.getElementById('contactMsisdn').style.color = '#afafaf';
                document.getElementById('editID').value='';
            }
            //-->
            </script>
          </div>
          <div class="button">
            <div class="submit">
              <button type="submit" onclick="if(document.getElementById('contactName').value=='Hans Muster'){document.getElementById('contactName').value=''};if(document.getElementById('contactMsisdn').value=='+41 76 123 45 67'){document.getElementById('contactMsisdn').value=''};this.style.color='#000000';"
                value="addContact" name="add">hinzufügen</button>
              <input type="hidden" name="task" value="addContact"/>
              <input type="hidden" name="currentMsisdn" value="0765790054"/>
            </div>
          </div>
          </form>
        </div>
       
        <div id="pageNavPosition" class="pagenavigation" style="padding-left:1.2em;display:none;"></div>
       
       
    </div>
  </div>

 
  <script type="text/javascript">
  //<!--
    function editContact(id,msisdn,name){
       document.getElementById('contactName').value=name;
       document.getElementById('editID').value=id;  
       document.getElementById('contactName').style.color='#000000';
       document.getElementById('contactMsisdn').value=msisdn;
       document.getElementById('contactMsisdn').style.color='#000000';

     }
 
 
   var cookieName = 'mip_msg_dispContacts';
   
   var x = readCookie(cookieName)
   if (x == "1") {
      document.getElementById('contacts').style.display = "block";
      document.getElementById('slide_toggle').src = "/mip/ext/img/bus_minus_n.gif";
   } else if (x == "0") {
      document.getElementById('contacts').style.display = "none";
      document.getElementById('slide_toggle').src = "/mip/ext/img/bus_plus_n.gif";
   } else if (x == null) {
      //default setting
      document.getElementById('contacts').style.display = "none";
      document.getElementById('slide_toggle').src = "/mip/ext/img/bus_plus_n.gif";
      //create cookie
      createCookie(cookieName,'0',1000);
   }
   
   function toggle(objname,controller,img_open,img_close){
   
      if(document.getElementById(objname).style.display == "none") {
        //open
        document.getElementById(controller).src = img_close;
        slidedown(objname);
        createCookie(cookieName,'1',1000);
      } else if (document.getElementById(objname).style.display == "block") {
        //close
        document.getElementById(controller).src = img_open;
        slideup(objname);
        createCookie(cookieName,'0',1000);
      } else {
        return;
      }
      
      _IG_AdjustIFrameHeight();
   }
   
   function onBodyLoadFn() {
      if (window.opera) {
         var box = document.getElementById('mmsAttachment');
         box.className = 'attachment_b_opera';
      }
      
      switchToProperSmsMmsView();
   }
    
   function switchToProperSmsMmsView() {
      var thisform = document.getElementById('smsMmsSenderForm');
      if ( document.getElementById('mmsRB').checked) {
         switchToMmsView(thisform);
      } else {
         switchToSmsView(thisform);
      }
   }
      
   function switchToSmsView(thisform) {
      document.getElementById('mmsAttachmentTR').style.display = 'none';
      
      sms_message_change(thisform);
      
      _IG_AdjustIFrameHeight();
   }
   
   function switchToMmsView(thisform){
      document.getElementById('mmsAttachmentTR').style.display = '';

      sms_message_change(thisform);
   
      _IG_AdjustIFrameHeight();
   }
    
   function hideErrorBlock() {
      document.getElementById('errorBlock').style.display = 'none';
   }

    //get contact setting
   contactsPerPage = parseInt(queryString('up_contactsPerPage'));
   
   if (isNaN(contactsPerPage)) {
      contactsPerPage = 10;
   }
   
   var pager = new Pager('contact', contactsPerPage);
   pager.init('pageNavPosition');
   pager.showPageNav('pager', 'pageNavPosition');
   pager.showPage(1);
   
   function queryString(parameter) {
      var loc = location.search.substring(1, location.search.length);
      var param_value = false;
      
      var params = loc.split("&");
      for (i=0; i<params.length;i++) {
          param_name = params[i].substring(0,params[i].indexOf('='));
          if (param_name == parameter) {
              param_value = params[i].substring(params[i].indexOf('=')+1)
          }
      }
      if (param_value) {
          return param_value;
      } else {
          return false; //Here determine return if no parameter is found
      }
    }

      function openOutboxWindow (outboxUrl) {
          window.open(outboxUrl, "outbox", "menubar=no,status=no,titlebar=no,width=800,resizable=yes,scrollbars=yes");
      }
   
     function sms_message_change(thisform) {
       
        var maxLength;
        var msg = thisform.message.value;

      var newlineCount = msg.split("\n").length - 1;

      if (navigator.userAgent.indexOf("MSIE") > 0) {
         newlineCount = msg.split("\r\n|\r|\n").length - 1;
      }

      var charcount   = msg.length + newlineCount;   
      
        if (document.getElementById('mmsAttachmentTR').style.display == '') {
            maxLength = 3000;
         thisform.charsLeft.value = maxLength - charcount;
         if(charcount > maxLength) {
               thisform.message.value = msg.slice(0, maxLength - newlineCount);
               return;
         }
        } else {
          maxLength = 160;
         var maxSms = 3;
         
         if (charcount > maxLength * maxSms) {
            thisform.message.value = msg.slice(0, (maxLength * maxSms) - newlineCount);   
            document.getElementById('smsWarningTR').style.display = '';
            _IG_AdjustIFrameHeight();
         } else {
            document.getElementById('smsWarningTR').style.display = 'none';
         }
         
         numberOfSms = Math.floor((charcount-1) / maxLength) + 1;
         
         if (numberOfSms == 0) {
            thisform.charsLeft.value = maxLength + " / 1";
         } else {
            thisform.charsLeft.value = (maxLength * numberOfSms - charcount) + " / " + numberOfSms;
         }
      }
       
        if((navigator.userAgent.indexOf("MSIE") == -1) && (navigator.userAgent.indexOf("Mozilla/4") != -1)) {
            thisform.message.blur();
            thisform.message.focus();
        }
    }
   //-->

      </script>

 
 
</body>
</html>

Bummi 9. Apr 2013 21:14

AW: Webbrowser OleObject - Felder füllen
 
Delphi-Quellcode:
webbrowser1.oleobject.document.forms.item(0).elements.item('message').value := .....

gee21 9. Apr 2013 21:18

AW: Webbrowser OleObject - Felder füllen
 
Zitat:

Zitat von Bummi (Beitrag 1210885)
Delphi-Quellcode:
webbrowser1.oleobject.document.forms.item(0).elements.item('message').value := .....

Du meinst wegen der (0)?
Habe ich schon probiert. (0-5) bringt alles nichts.

Bummi 9. Apr 2013 21:22

AW: Webbrowser OleObject - Felder füllen
 
Bei mir geht es damit es ist ja auch das erste Form
Code:
   <!-- Here begins the form -->
    <form id="smsMmsSenderForm" method="post" action="/mip/dyn/login/smsMeinKonto?lang=de" enctype="multipart/form-data" onsubmit="return checkForm()">

Bummi 9. Apr 2013 21:24

AW: Webbrowser OleObject - Felder füllen
 
Ansonsten nimm einfach
Delphi-Quellcode:
WebBrowser1.OleObject.Document.getElementById('message').value := Memo1.text;

gee21 9. Apr 2013 21:31

AW: Webbrowser OleObject - Felder füllen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Sehr merkwürdig. Bei mir geht beides nicht.

Erhalte immer folgende Meldung: (Bild im Anhang)

Ich warte auch extra schön bis die Homepage geladen ist und führe diesen Code extra Manuell per Button aus um ganz sicher zu gehen. :?

Bummi 9. Apr 2013 21:52

AW: Webbrowser OleObject - Felder füllen
 
Assigned(WebBrowser1) ist schon true ?

gee21 9. Apr 2013 22:01

AW: Webbrowser OleObject - Felder füllen
 
Zitat:

Zitat von Bummi (Beitrag 1210891)
Assigned(WebBrowser1) ist schon true ?

Meinst du sowas?

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin

if Assigned(WebBrowser1)=true then showmessage('Vor');

WebBrowser1.OleObject.Document.getElementById('recipient').value := combobox1.Items[combobox1.ItemIndex]+edit3.Text;
WebBrowser1.OleObject.Document.getElementById('message').value := memo1.Text;

end;
Ich erhalte die Meldung "Vor" also Assigned =true

nahpets 9. Apr 2013 22:04

AW: Webbrowser OleObject - Felder füllen
 
Hallo,

die Fehlermeldung muss nicht zwingend in der Zeile auftreten, die Du uns gezeigt hast. Zeig doch bitte mal etwas mehr Quellcode.

Oder hilft Dir diese Funktion?
Delphi-Quellcode:
// ...HTML Formulare mit TWebBrowser automatisch ausfüllen lassen?
function WBFillForm(wb: TWebBrowser; sFieldName: string; sValue: string): Boolean;
var
  i, j: Integer;
  FormItem: Variant;
begin
  Result := False;
  //no form on document
  if wb.OleObject.Document.all.tags('FORM').Length = 0 then begin
    Exit;
  end;
  //count forms on document
  for I := 0 to wb.OleObject.Document.forms.Length - 1 do begin
    FormItem := wb.OleObject.Document.forms.Item(I);
    for j := 0 to FormItem.Length - 1 do begin
      try
        // when the fieldname is found, try to fill out
        if AnsiUpperCase(FormItem.Item(j).Name) = AnsiUpperCase(sFieldName) then begin
          FormItem.Item(j).Value := sValue;
          Result := True;
        end;
      except
        Exit;
      end;
    end;
  end;
end;
Der Aufruf müsste dann in etwa so aussehen:
Delphi-Quellcode:
  Application.ProcessMessages;
  while WebBrowser1.Busy do Application.ProcessMessages;
  while WebBrowser1.ReadyState <> READYSTATE_COMPLETE do Application.ProcessMessages;
  if not WBFillForm(WebBrowser1,'message', Memo1.Text) then begin
    ShowMessage('Das Feld Message konnte nicht gefüllt werden.');
  end;
  Application.ProcessMessages;
  while WebBrowser1.Busy do Application.ProcessMessages;
  while WebBrowser1.ReadyState <> READYSTATE_COMPLETE do Application.ProcessMessages;

gee21 9. Apr 2013 22:16

AW: Webbrowser OleObject - Felder füllen
 
Zitat:

Zitat von nahpets (Beitrag 1210893)
Hallo,

die Fehlermeldung muss nicht zwingend in der Zeile auftreten, die Du uns gezeigt hast. Zeig doch bitte mal etwas mehr Quellcode.

Oder hilft Dir diese Funktion?
Delphi-Quellcode:
// ...HTML Formulare mit TWebBrowser automatisch ausfüllen lassen?
function WBFillForm(wb: TWebBrowser; sFieldName: string; sValue: string): Boolean;
var
  i, j: Integer;
  FormItem: Variant;
begin
  Result := False;
  //no form on document
  if wb.OleObject.Document.all.tags('FORM').Length = 0 then begin
    Exit;
  end;
  //count forms on document
  for I := 0 to wb.OleObject.Document.forms.Length - 1 do begin
    FormItem := wb.OleObject.Document.forms.Item(I);
    for j := 0 to FormItem.Length - 1 do begin
      try
        // when the fieldname is found, try to fill out
        if AnsiUpperCase(FormItem.Item(j).Name) = AnsiUpperCase(sFieldName) then begin
          FormItem.Item(j).Value := sValue;
          Result := True;
        end;
      except
        Exit;
      end;
    end;
  end;
end;
Der Aufruf müsste dann in etwa so aussehen:
Delphi-Quellcode:
  Application.ProcessMessages;
  while WebBrowser1.Busy do Application.ProcessMessages;
  while WebBrowser1.ReadyState <> READYSTATE_COMPLETE do Application.ProcessMessages;
  if not WBFillForm(WebBrowser1,'message', Memo1.Text) then begin
    ShowMessage('Das Feld Message konnte nicht gefüllt werden.');
  end;
  Application.ProcessMessages;
  while WebBrowser1.Busy do Application.ProcessMessages;
  while WebBrowser1.ReadyState <> READYSTATE_COMPLETE do Application.ProcessMessages;



Ok hier mal mein Quellcode, Dein Code habe ich übrigens getestet. Leider kommt die Meldung dass das Feld nicht ausgefüllt werden konnte.

Delphi-Quellcode:
var
  Form1: TForm1;

implementation

{$R *.dfm}

function WB_GetHTMLCode(WebBrowser: tembeddedwb; ACode: TStrings): Boolean;
var
   ps: IPersistStreamInit;
   ss: TStringStream;
   sa: IStream;
   s: string;
begin
   ps := WebBrowser.Document as IPersistStreamInit;
   s := '';
   ss := TStringStream.Create(s);
   try
     sa := TStreamAdapter.Create(ss, soReference) as IStream;
     Result := Succeeded(ps.Save(sa, True));
     if Result then ACode.Add(ss.Datastring);
   finally
     ss.Free;
   end;
end;



 function FillForm(WebBrowser: tembeddedwb; FieldName: string; Value: string): Boolean;
var
  i, j: Integer;
  FormItem: Variant;
begin
  Result := False;
  //no form on document
  if WebBrowser.OleObject.Document.all.tags('FORM').Length = 0 then
  begin
    Exit;
  showmessage('Exit');
  end;
  //count forms on document
  for I := 0 to WebBrowser.OleObject.Document.forms.Length - 1 do
  begin
    FormItem := WebBrowser.OleObject.Document.forms.Item(I);
    for j := 0 to FormItem.Length - 1 do
    begin
      try
        //when the fieldname is found, try to fill out
        if FormItem.Item(j).Name = FieldName then
        begin
          FormItem.Item(j).Value := Value;
          Result := True;
        end;
      except
        Exit;
      end;
    end;
  end;
end;





procedure TForm1.Button1Click(Sender: TObject);
begin

if Assigned(WebBrowser1)=true then showmessage('Vor');

WebBrowser1.OleObject.Document.getElementById('recipient').value := combobox1.Items[combobox1.ItemIndex]+edit3.Text;
WebBrowser1.OleObject.Document.getElementById('message').value := memo1.Text;

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
if combobox2.ItemIndex=2 then webbrowser1.Navigate('http://www.bern-web.ch/');

if combobox2.ItemIndex=1 then webbrowser1.Navigate('http://www1.sunrise.ch/SMS-Sender-cbBpfAqFI.RUoAAAEwinJTNyCu-Sunrise-Residential-Site-WFS-de_CH-CHF.html');
progressbar1.Position:=25;

end;

procedure TForm1.Button5Click(Sender: TObject);
begin
if form1.Height=322=false then form1.Height:=322 else form1.Height:=590;
end;

procedure TForm1.Edit4MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
 Perform(WM_SYSCOMMAND, $F012, 0);
end;

procedure TForm1.FormCreate(Sender: TObject);

begin
Set8087CW($133F);
memo2.Lines.LoadFromFile(ExtractFilePath(Application.Exename)+'\config.txt');
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
 Perform(WM_SYSCOMMAND, $F012, 0);
end;



procedure TForm1.Memo1Change(Sender: TObject);
var
i: integer;
i2: integer;
begin
i:=memo1.MaxLength;
i2 := Length(Memo1.Text);

i:=i-i2;
edit4.Text:=inttostr(i);
if i<160 then edit1.Text:='3/3';
if i>160 then edit1.Text:='2/3';
if i>320 then edit1.Text:='1/3';
if i>479 then edit1.Text:='0/3';
end;

procedure TForm1.Memo1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
 Perform(WM_SYSCOMMAND, $F012, 0);
end;

procedure TForm1.ProgressBar1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
 Perform(WM_SYSCOMMAND, $F012, 0);
end;


procedure TForm1.WebBrowser1DocumentComplete(ASender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
var
i:integer;
begin

progressbar1.Position:=35;

if combobox2.ItemIndex=2 then begin
WB_GetHTMLCode(Webbrowser1, Memo2.Lines);
if FillForm(WebBrowser1, 'smsMessage', memo1.Text)=true then begin
 progressbar1.Position:=50;
  webbrowser1.Stop;
  FillForm(WebBrowser1, 'smsMessage', memo1.Text) ;
  FillForm(WebBrowser1, 'SMSEingabe', edit3.Text) ;
  if combobox1.ItemIndex=1 then FillForm(WebBrowser1, 'intlPrefix', '004176');
   if combobox1.ItemIndex=2 then FillForm(WebBrowser1, 'intlPrefix', '004177');
  if combobox1.ItemIndex=3 then FillForm(WebBrowser1, 'intlPrefix', '004178');
    if combobox1.ItemIndex=4 then FillForm(WebBrowser1, 'intlPrefix', '004179');

  webbrowser1.oleobject.document.forms.item(4).submit;
progressbar1.Position:=75;
  end else begin
      if progressbar1.Position=35 then begin
if edit7.Text='http://www.bern-web.ch/' then begin
if pos('Heute wurden von Ihrer IP-Adresse',Memo2.Text) > 0 then label1.Caption:='Fehler: Limit erreicht! (IP oder Service wechseln)' else label1.Caption:='Fehler: Service Down?';
label1.Visible:=true;
end;
end;
  end;
if edit7.Text='http://www.bern-web.ch/Bern/sms_ok/' then begin
  Progressbar1.Position:=100;
webbrowser1.Navigate('www.google.com');
end;
  end;


///////////////// //////////////////////

if combobox2.ItemIndex=1 then begin

repeat;
Application.ProcessMessages;
Sleep(1);
until WebBrowser1.ReadyState=4;

try
webbrowser1.oleobject.document.forms.item(1).elements.item('LoginForm_Login').value := memo2.Lines[2];
except
end;

if webbrowser1.oleobject.document.forms.item(1).elements.item('LoginForm_Login').value =memo2.Lines[2] then begin
webbrowser1.oleobject.document.forms.item(1).elements.item('LoginForm_Password').value := memo2.Lines[3] ;
webbrowser1.oleobject.document.forms.item(1).submit;
end;

//Server1 ENDE
end;

end;



procedure TForm1.Webbrowser1DownloadComplete(Sender: TObject);
begin
edit7.Text:=webbrowser1.LocationURL;
end;

end.

nahpets 9. Apr 2013 23:03

AW: Webbrowser OleObject - Felder füllen
 
Hallo,

habe mal rumprobiert. Dazu habe ich die von Dir zur Verfügunggestellte HTML-Seite lokal abgespeichert. Mit folgendem Quelltext bekomme ich den Inhalt von Memo1.Text in das Formular:
Delphi-Quellcode:
unit ClientUnit1;

interface

uses
  SysUtils, Dialogs, Forms,OleCtrls, SHDocVw, Classes, Controls, StdCtrls, StrUtils;

type
  TForm1 = class(TForm)
    Button1: TButton;
    wb: TWebBrowser;
    Memo1: TMemo;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    function WBFillForm(wb: TWebBrowser; sFieldName: string; sValue: string): Boolean;
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

// ...HTML Formulare mit TWebBrowser automatisch ausfüllen lassen?
function TForm1.WBFillForm(wb: TWebBrowser; sFieldName: string; sValue: string): Boolean;
var
  i, j: Integer;
  FormItem: Variant;
begin
  Result := False;
  //no form on document
  if wb.OleObject.Document.all.tags('FORM').Length = 0 then begin
    Exit;
  end;
  //count forms on document
  for I := 0 to wb.OleObject.Document.forms.Length - 1 do begin
    FormItem := wb.OleObject.Document.forms.Item(I);
    for j := 0 to FormItem.Length - 1 do begin
      try
        // when the fieldname is found, try to fill out
        if AnsiUpperCase(FormItem.Item(j).Name) = AnsiUpperCase(sFieldName) then begin
          FormItem.Item(j).Value := sValue;
          Result := True;
        end;
      except
        Exit;
      end;
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Application.ProcessMessages;
  while wb.Busy do Application.ProcessMessages;
  while wb.ReadyState <> READYSTATE_COMPLETE do Application.ProcessMessages;
  if not WBFillForm(wb,'message',Memo1.Text) then begin
    ShowMessage('Das Textfeld message wurde nicht gefunden.');
  end;
  Application.ProcessMessages;
  while wb.Busy do Application.ProcessMessages;
  while wb.ReadyState <> READYSTATE_COMPLETE do Application.ProcessMessages;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  wb.Navigate('E:\Delphi\WebModule\test.html');
  ShowMessage('***');
end;

end.
Allerdings nutze ich TWebBrowser und nicht tembeddedwb. Sollte dies die Ursache sein? Eigentlich ehre nicht.

gee21 9. Apr 2013 23:14

AW: Webbrowser OleObject - Felder füllen
 
Liste der Anhänge anzeigen (Anzahl: 2)
Ok. Ich habe jetzt auch den Twebbrowser genommen. Und dein Code kopiert. Es geht immer noch nicht "Feld wurde nicht gefunden".

Aber beim Twebbrowser erscheinen mir beim laden 2 Script Fehler könnte es irgendwie an dem liegen?
Ich glaube ich könnte diese ja ignorieren (aber evt passiert ja da der fehler?)

Volker Z. 9. Apr 2013 23:19

AW: Webbrowser OleObject - Felder füllen
 
Hallo,

vermutlich liegt das Problem nicht beim Ausfüllen der Felder an sich, sondern an:
Delphi-Quellcode:
procedure TForm1.WebBrowser1DocumentComplete(ASender: TObject; const pDisp: IDispatch; var URL: OleVariant);
begin
  // [...]

  if combobox2.ItemIndex = 1 then
    begin
      repeat;
        application.processmessages;
        sleep(1);
      until webbrowser1.readystate=4;

      try
         webbrowser1.oleobject.document.forms.item(1).elements.item('loginform_login').value := memo2.lines[2];
      except
      end;

      if webbrowser1.oleobject.document.forms.item(1).elements.item('loginform_login').value =memo2.lines[2] then
        begin
          webbrowser1.oleobject.document.forms.item(1).elements.item('loginform_password').value := memo2.lines[3] ;
          webbrowser1.oleobject.document.forms.item(1).submit; // <-- HIER liegt wohl das Problem
        end;

      //server1 ende
    end;
end;
Das submit sendet die Daten an den Server, der Server antwortet, es wird erneut TForm1.WebBrowser1DocumentComplete aufgerufen, combobox2.ItemIndex hat noch immer den Wert 1, der Versuch loginform_login mit einem Wert zu befüllen scheitert.

Gruß

gee21 9. Apr 2013 23:30

AW: Webbrowser OleObject - Felder füllen
 
Hi Volker :-D

Genau das habe ich auch gerade gedacht. Darum hab ich gerade so abgeändert:

Delphi-Quellcode:
///////////////// //////////////////////

if combobox2.ItemIndex=1 then begin
combobox2.ItemIndex:=0;

repeat;
Application.ProcessMessages;
Sleep(1);
until WebBrowser1.ReadyState=4;


webbrowser1.oleobject.document.forms.item(1).elements.item('LoginForm_Login').value := memo2.Lines[2];


if webbrowser1.oleobject.document.forms.item(1).elements.item('LoginForm_Login').value =memo2.Lines[2] then begin
webbrowser1.oleobject.document.forms.item(1).elements.item('LoginForm_Password').value := memo2.Lines[3] ;
webbrowser1.oleobject.document.forms.item(1).submit;
end;

//Server1 ENDE

end;

So dürfte der abschnitt ja nur 1x durchgeführt werden. Aber leider gleicher Effekt.

nahpets 9. Apr 2013 23:33

AW: Webbrowser OleObject - Felder füllen
 
Hallo,
Zitat:

Zitat von gee21 (Beitrag 1210902)
Ok. Ich habe jetzt auch den Twebbrowser genommen. Und dein Code kopiert. Es geht immer noch nicht "Feld wurde nicht gefunden".

Aber beim Twebbrowser erscheinen mir beim laden 2 Script Fehler könnte es irgendwie an dem liegen?
Ich glaube ich könnte diese ja ignorieren (aber evt passiert ja da der fehler?)

Die beiden Fehler habe ich auch bekommen und ignoriert, da sie beim Laden der Seite auftreten, aber nicht beim Befüllen.

Kommentier bitte diese Zeile mal aus:
Delphi-Quellcode:
webbrowser1.oleobject.document.forms.item(1).submit;
Änderd sich dann was?

Volker Z. 9. Apr 2013 23:39

AW: Webbrowser OleObject - Felder füllen
 
Hallo Robert,

warum gehst Du nicht über die URL, die Dir als Parameter übergeben wird. Werte doch einfach die aus anstatt Combobox2.ItemIndex

Gruß

gee21 9. Apr 2013 23:46

AW: Webbrowser OleObject - Felder füllen
 
Zitat:

Die beiden Fehler habe ich auch bekommen und ignoriert, da sie beim Laden der Seite auftreten, aber nicht beim Befüllen.

Kommentier bitte diese Zeile mal aus:
Delphi-Quellcode:
webbrowser1.oleobject.document.forms.item(1).submit;
Änderd sich dann was?

Habe die fehler nun auch ignoriert. Und den .submit Befehl deaktiviert (mit //). Dadurch musste ich den Login Knopf selber drücken. Aber leider füllte er auch nachher nicht das Feld aus. (Feld nicht gefunden)



@Volker:

Etwa so: (hilft aber auch nichts)
Delphi-Quellcode:
if webbrowser1.LocationURL= 'http://www1.sunrise.ch/SMS-Sender-cbBpfAqFI.RUoAAAEwinJTNyCu-Sunrise-Residential-Site-WFS-de_CH-CHF.html' then begin

repeat;
Application.ProcessMessages;
Sleep(1);
until WebBrowser1.ReadyState=4;

webbrowser1.oleobject.document.forms.item(1).elements.item('LoginForm_Login').value := memo2.Lines[2];

if webbrowser1.oleobject.document.forms.item(1).elements.item('LoginForm_Login').value =memo2.Lines[2] then begin

webbrowser1.oleobject.document.forms.item(1).elements.item('LoginForm_Password').value := memo2.Lines[3] ;
webbrowser1.oleobject.document.forms.item(1).submit;
end;

//Server1 ENDE
end;

Volker Z. 9. Apr 2013 23:52

AW: Webbrowser OleObject - Felder füllen
 
Hallo Robert,

ich meinte eigenlich
Delphi-Quellcode:
  if URL= 'http://www1.sunrise.ch/SMS-Sender-cbBpfAqFI.RUoAAAEwinJTNyCu-Sunrise-Residential-Site-WFS-de_CH-CHF.html' then
    begin
      [...]
    end
ich kenne die EmbeddeWB Komponente nicht, daher kann ich nicht sagen was in LocationURL drin steht.

Gruß

nahpets 9. Apr 2013 23:57

AW: Webbrowser OleObject - Felder füllen
 
Hallo,

bin nochmal durch den Quelltext und dabei fiel mir auf, dass mal von 'Message' und mal von 'smsMessage' die Rede ist.

Delphi-Quellcode:
  FillForm(WebBrowser1, 'smsMessage', memo1.Text) ;
  FillForm(WebBrowser1, 'SMSEingabe', edit3.Text) ;
Die beiden mit FillForm zu befüllenden Felder kann ich in der HTML-Datei nicht finden. Habe ich da was übersehen?

gee21 10. Apr 2013 00:02

AW: Webbrowser OleObject - Felder füllen
 
Delphi-Quellcode:
///////////////// //////////////////////

if URL= 'http://www1.sunrise.ch/SMS-Sender-cbBpfAqFI.RUoAAAEwinJTNyCu-Sunrise-Residential-Site-WFS-de_CH-CHF.html' then begin
repeat;
Application.ProcessMessages;
Sleep(1);
until WebBrowser1.ReadyState=4;

webbrowser1.oleobject.document.forms.item(1).elements.item('LoginForm_Login').value := memo2.Lines[2];

if webbrowser1.oleobject.document.forms.item(1).elements.item('LoginForm_Login').value =memo2.Lines[2] then begin

webbrowser1.oleobject.document.forms.item(1).elements.item('LoginForm_Password').value := memo2.Lines[3] ;
//webbrowser1.oleobject.document.forms.item(1).submit;
end;

//Server1 ENDE
end;


Geht Leider auch so nicht immer das gleiche... (Habe übrigens jetzt wieder den normalen Webbrowser genommen. So zu Sicherheit aber es macht eben auch keinen Unterschied)



Zitat:

Delphi-Quellcode:

FillForm(WebBrowser1, 'smsMessage', memo1.Text) ;
FillForm(WebBrowser1, 'SMSEingabe', edit3.Text) ;
Die beiden mit FillForm zu befüllenden Felder kann ich in der HTML-Datei nicht finden. Habe ich da was übersehen?
Das wird nur bei einem anderen Server so benötigt. (Den Server wähle ich mit der combobox2 aus)

Volker Z. 10. Apr 2013 00:25

AW: Webbrowser OleObject - Felder füllen
 
Hallo Robert,

wenn ich hier bei mir
Delphi-Quellcode:
procedure TForm4.Button1Click(Sender: TObject);
begin
  WebBrowser1.Navigate ('http://www1.sunrise.ch/SMS-Sender-cbBpfAqFI.RUoAAAEwinJTNyCu-Sunrise-Residential-Site-WFS- de_CH-CHF.html');
  end;

procedure TForm4.WebBrowser1DocumentComplete(ASender: TObject; const pDisp: IDispatch; var URL: OleVariant);
begin
  ShowMessage (Url);
  repeat;
    Application.ProcessMessages;
    Sleep(1);
  until WebBrowser1.ReadyState=4;

  webbrowser1.oleobject.document.forms.item(1).elements.item('LoginForm_Login').value := 'a';

  if webbrowser1.oleobject.document.forms.item(1).elements.item('LoginForm_Login').value = 'a' then // Sinn dieser Zeile erschließt sich mir nicht
    begin
      webbrowser1.oleobject.document.forms.item(1).elements.item('LoginForm_Password').value := 'b' ;
      webbrowser1.oleobject.document.forms.item(1).submit;
    end;
end;
ausführe habe ich keine Probleme. Natürlich erhalte ich eine ReLogin Seite (a, b als Login ist sicherlich Unsinn) mit einer anderen URL, also auch kein Problem. Ich kann Dir natürlich nicht sagen, was da für eine URL zurückgeliefert wird, wenn das Login passen sollte. Vielleicht liefert der Server dann auch http://www1.sunrise.ch/SMS-Sender-cb...tial-Site-WFS- de_CH-CHF.html aus

Gruß

nahpets 10. Apr 2013 00:30

AW: Webbrowser OleObject - Felder füllen
 
Hallo,

also nochmal, da ich langsam aber sicher den Durchblick verliere (ist wohl doch inzwischen zu früh ;-))

Du nutzt zum Befüllen diese Routine:
Delphi-Quellcode:
function FillForm(WebBrowser: tembeddedwb; FieldName: string; Value: string): Boolean;
var
  i, j: Integer;
  FormItem: Variant;
begin
  Result := False;
  //no form on document
  if WebBrowser.OleObject.Document.all.tags('FORM').Length = 0 then
  begin
    Exit;
  showmessage('Exit');
  end;
  //count forms on document
  for I := 0 to WebBrowser.OleObject.Document.forms.Length - 1 do
  begin
    FormItem := WebBrowser.OleObject.Document.forms.Item(I);
    for j := 0 to FormItem.Length - 1 do
    begin
      try
        //when the fieldname is found, try to fill out
        if FormItem.Item(j).Name = FieldName then
        begin
          FormItem.Item(j).Value := Value;
          Result := True;
        end;
      except
        Exit;
      end;
    end;
  end;
end;
Ändere mal bitte den Except-Block in
Delphi-Quellcode:
exept
  on e : Exception do begin
    Memo1.Lines.Add(e.Message);
    // oder auch
    ShowMessage(e.Message);
  end;
end;
Ist bei Dir der Debugger aktiv, so dass Du alle Fehler mitbekommst?
Und ändere bitte mal
Delphi-Quellcode:
if FormItem.Item(j).Name = FieldName then
in
Delphi-Quellcode:
AnsiUpperCase(FormItem.Item(j).Name) = AnsiUpperCase(FieldName)
Setze mal 'nen Breakpoint auf die Zeile
Delphi-Quellcode:
FormItem.Item(j).Value := Value;
Die beiden Zeilen
Delphi-Quellcode:
    Exit;
  showmessage('Exit');
solltes Du mal vertauschen, beim Exit bist Du nämlich vor dem ShowMessage schon aus der Routine raus und bekommst nie zu sehen, wenn die Routine dort schon aussteigt.

Funktioniert mit der Routine das Befüllen von Feldern, die Du auch auf anderem Weg befüllt bekommst?

Also z. B.
Delphi-Quellcode:
FillForm(webbrowser1,'LoginForm_Login', memo2.Lines[2])
statt
Delphi-Quellcode:
webbrowser1.oleobject.document.forms.item(1).elements.item('LoginForm_Login').value := memo2.Lines[2];
?

gee21 10. Apr 2013 11:41

AW: Webbrowser OleObject - Felder füllen
 
HI alle zusammen

Sorry bin gestern plötzlich weggeknackt :-D

Also @ Volker:
Wichtig wäre ja nur das die URL nach dem Login nicht mehr die gleiche ist, oder? Damit der Code in OnDocument Complete nur 1x ausgeführt wird.
Und wenn ich das korrekt sehe, passiert das auch so. Der Code wird 1x ausgeführt dann bin ich eingeloggt. Und dannach möchte ich ja mit dem Button1 die Felder füllen. (Was bis jetzt leider noch immer nicht klappt)

URL der Login Form: http://www1.sunrise.ch/SMS-Sender-cb...de_CH-CHF.html
URL nach dem Login: https://www1.sunrise.ch/is-bin/INTER...LoginProcess=1


@Nahpets
Sorry für die Verwirrung. Für das Login von dem wir hier sprechen, werden nur folgende Teile des Codes benutzt (Das was du meinst, wird nur bei einem anderen Server (www.bern-web.ch) angewendet (Wenn die Combobox auf itemindex 2 wäre))

1. Ich klicke den Button an um auf das Login Formular zu gelangen:
Delphi-Quellcode:
if combobox2.ItemIndex=2 then webbrowser1.Navigate('http://www.bern-web.ch/');

if combobox2.ItemIndex=1 then webbrowser1.Navigate('http://www1.sunrise.ch/SMS-Sender-cbBpfAqFI.RUoAAAEwinJTNyCu-Sunrise-Residential-Site-WFS-de_CH-CHF.html');
progressbar1.Position:=25;
2. Sobald die Login form voll geladen ist wird über OnDocument Complete folgender Code ausgeführt: (Die obere hälfte des Codes ist hierbei unrelevant da diese auch wieder nur bei WWW-.bern-web.ch benutzt wird)
Delphi-Quellcode:
procedure TForm1.WebBrowser1DocumentComplete(ASender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
var
i:integer;
begin

progressbar1.Position:=35;

if combobox2.ItemIndex=2 then begin
WB_GetHTMLCode(Webbrowser1, Memo2.Lines);
if FillForm(WebBrowser1, 'smsMessage', memo1.Text)=true then begin
 progressbar1.Position:=50;
  webbrowser1.Stop;
  FillForm(WebBrowser1, 'smsMessage', memo1.Text) ;
  FillForm(WebBrowser1, 'SMSEingabe', edit3.Text) ;
  if combobox1.ItemIndex=1 then FillForm(WebBrowser1, 'intlPrefix', '004176');
   if combobox1.ItemIndex=2 then FillForm(WebBrowser1, 'intlPrefix', '004177');
  if combobox1.ItemIndex=3 then FillForm(WebBrowser1, 'intlPrefix', '004178');
    if combobox1.ItemIndex=4 then FillForm(WebBrowser1, 'intlPrefix', '004179');

  webbrowser1.oleobject.document.forms.item(4).submit;
progressbar1.Position:=75;
  end else begin
      if progressbar1.Position=35 then begin
if edit7.Text='http://www.bern-web.ch/' then begin
if pos('Heute wurden von Ihrer IP-Adresse',Memo2.Text) > 0 then label1.Caption:='Fehler: Limit erreicht! (IP oder Service wechseln)' else label1.Caption:='Fehler: Service Down?';
label1.Visible:=true;
end;
end;
  end;
if edit7.Text='http://www.bern-web.ch/Bern/sms_ok/' then begin
  Progressbar1.Position:=100;
webbrowser1.Navigate('www.google.com');
end;
  end;


///////////////// //////////////////////

if URL= 'http://www1.sunrise.ch/SMS-Sender-cbBpfAqFI.RUoAAAEwinJTNyCu-Sunrise-Residential-Site-WFS-de_CH-CHF.html' then begin
repeat;
Application.ProcessMessages;
Sleep(1);
until WebBrowser1.ReadyState=4;

webbrowser1.oleobject.document.forms.item(1).elements.item('LoginForm_Login').value := memo2.Lines[2];

if webbrowser1.oleobject.document.forms.item(1).elements.item('LoginForm_Login').value =memo2.Lines[2] then begin

webbrowser1.oleobject.document.forms.item(1).elements.item('LoginForm_Password').value := memo2.Lines[3] ;
//webbrowser1.oleobject.document.forms.item(1).submit;
end;

//Server1 ENDE
end;



end;


3. Nachdem also die Login Daten eingeben wurden und der Login Button gedrückt wurde (Ob Manuell oder per:
Delphi-Quellcode:
webbrowser1.oleobject.document.forms.item(1).submit;
Warte ich bis die Seite wieder komplett geladen wurde und versuche dann die Felder per Button Klick zu füllen:

Delphi-Quellcode:
begin
   Application.ProcessMessages;
   while webbrowser1.Busy do Application.ProcessMessages;
   while webbrowser1.ReadyState <> READYSTATE_COMPLETE do Application.ProcessMessages;
   if not WBFillForm(webbrowser1,'message',Memo1.Text) then begin
     ShowMessage('Das Textfeld message wurde nicht gefunden.');
   end;
   Application.ProcessMessages;
   while webbrowser1.Busy do Application.ProcessMessages;
   while webbrowser1.ReadyState <> READYSTATE_COMPLETE do Application.ProcessMessages;
end;
Und hier will er mir eben einfach keins der Felder füllen! Erhalte einfach immer die Meldung: ShowMessage('Das Textfeld message wurde nicht gefunden.');

nahpets 10. Apr 2013 12:55

AW: Webbrowser OleObject - Felder füllen
 
Hallo,

woweit so gut, mich interessierte eigentlich, ob Du nur Textareas nicht befüllt bekommst oder der Fehler bei allen Feldern auftritt, sofern Du die Routine nutzt, mit der 'message' gefüllt werden soll.

Den Quelltext zu meine Testprogramm, mit dem ich die Felder befüllt bekomme, habe ich als Anhang hinzugefügt.

gee21 10. Apr 2013 13:02

AW: Webbrowser OleObject - Felder füllen
 
Hi

Also beim Einloggen gehen alle Felder und Buttons.
Delphi-Quellcode:
procedure TForm1.WebBrowser1DocumentComplete(ASender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
begin

if URL= 'http://www1.sunrise.ch/SMS-Sender-cbBpfAqFI.RUoAAAEwinJTNyCu-Sunrise-Residential-Site-WFS-de_CH-CHF.html' then begin
repeat;
Application.ProcessMessages;
Sleep(1);
until WebBrowser1.ReadyState=4;

webbrowser1.oleobject.document.forms.item(1).elements.item('LoginForm_Login').value := memo2.Lines[2];

if webbrowser1.oleobject.document.forms.item(1).elements.item('LoginForm_Login').value =memo2.Lines[2] then begin

webbrowser1.oleobject.document.forms.item(1).elements.item('LoginForm_Password').value := memo2.Lines[3] ;
//webbrowser1.oleobject.document.forms.item(1).submit;
end;
//Server1 ENDE
end;

Nach dem Einloggen geht KEIN Feld. Respektive findet kein Feld mehr...

Delphi-Quellcode:
function WBFillForm(wb: TWebBrowser; sFieldName: string; sValue: string): Boolean;
var
   i, j: Integer;
   FormItem: Variant;
begin
   Result := False;
   //no form on document
   if wb.OleObject.Document.all.tags('FORM').Length = 0 then begin
     Exit;
   end;
   //count forms on document
   for I := 0 to wb.OleObject.Document.forms.Length - 1 do begin
     FormItem := wb.OleObject.Document.forms.Item(I);
     for j := 0 to FormItem.Length - 1 do begin
       try
         // when the fieldname is found, try to fill out
         if AnsiUpperCase(FormItem.Item(j).Name) = AnsiUpperCase(sFieldName) then begin
           FormItem.Item(j).Value := sValue;
           Result := True;
         end;
       except
         Exit;
       end;
     end;
   end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   Application.ProcessMessages;
   while webbrowser1.Busy do Application.ProcessMessages;
   while webbrowser1.ReadyState <> READYSTATE_COMPLETE do Application.ProcessMessages;
   if not WBFillForm(webbrowser1,'message',Memo1.Text) then begin
     ShowMessage('Das Textfeld message wurde nicht gefunden.');
   end;
      if not WBFillForm(webbrowser1,'recipient',combobox1.Items[combobox1.ItemIndex]+edit3.Text) then begin
     ShowMessage('Das Textfeld recipient wurde nicht gefunden.');
   end;

   Application.ProcessMessages;
   while webbrowser1.Busy do Application.ProcessMessages;
   while webbrowser1.ReadyState <> READYSTATE_COMPLETE do Application.ProcessMessages;
end;

gee21 10. Apr 2013 13:06

AW: Webbrowser OleObject - Felder füllen
 
Ich habe jetzt übrigens mal dein Projekt genommen und die Lokale Adresse mit der Online Adresse ausgetauscht.
Das Einloggen habe ich manuell eingetippt und auch per maus den Login Button gedrückt.

Danach kommen die 2 Skript Fehler

Und dann wäre die wichtige (auszufüllende) Form da.

Ich klicke also auf deinen Button (Mit dem Füllcode) und was kommt: Felder nicht gefunden

nahpets 10. Apr 2013 13:13

AW: Webbrowser OleObject - Felder füllen
 
Hallo,

daraus schließen wir jetzt mal ganz einfach:

Verhalten bei lokal geladener Datei <> Verhalten bei aus dem Web geladener Datei.

Kann es sein, dass sich die Seiten (irgendwie) unterscheiden?


Bitte einmal die von Dir geladene Datei als Textdatei speichern, zippen und hier dranhängen. Werde mir sie dann mal anschauen.

Eine Möglichkeit könnte auch sein, dass die zu Fehler führenden Scripte bei korrekter Ausführung die Seite so verändern, dass das Befüllen nicht mehr funktioniert.

Ist die Seite denn überhaupt dafür gedacht per Programm genutzt zu werden?

gee21 10. Apr 2013 13:29

AW: Webbrowser OleObject - Felder füllen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Also die Seite ist offiziell nicht dafür gedacht. Aber ich wollte mir halt das Einloggen etc ersparen.

Also habe mich jetzt über das Delphi Project eingeloggt (So wie immer) und habe dann den Quellcode anzeigen lassen. (Im Anhang)

1x Datei Quellcode (Ohne Skript Fehler, Silent True)
1x Datei Quellcode (Mit Skript Fehler, Silent False)

nahpets 10. Apr 2013 15:01

AW: Webbrowser OleObject - Felder füllen
 
Hallo,

bei Silent=false bekomme ich die Werte gesetzt, bei Silent=true nicht.

Wenn man sich die Quelltexte der Seiten anschaut stellt man allerdings auch gewaltige Unterschiede fest. In der Seite mit Silent=true sind weder das Feld message noch recipient vorhanden.

Schaut man sich die von HTML-Tags befreiten Seiten an, so sieht man zwei vollkommen unterschiedliche Seiten.

gee21 10. Apr 2013 17:41

AW: Webbrowser OleObject - Felder füllen
 
Hmm ok. Ich krieg sie aber auch bei silent=false nicht gefüllt. Egal ob ich ja oder nein bei den skript fehler drücke.

Was jemand was man da machen könnte?


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:21 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