Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Embedded WB Wordpress sticky Checken (https://www.delphipraxis.net/187667-embedded-wb-wordpress-sticky-checken.html)

ScharfeMietze 20. Dez 2015 15:11

Embedded WB Wordpress sticky Checken
 
Hey :)
ich versuche auf einem Wordpress Blog
http://fs5.directupload.net/images/151220/x3sp9uo5.jpg

Per Browser das Sticky zu Checken.
Meine übliche Methode ein Feld zu finden, fruchtet nicht!

Delphi-Quellcode:
if embdwb1.go(Url,10000)then
  begin
   try
   for I := 0 to 10 do
     begin
       embdwb1.OleObject.document.forms.item(I).elements.item('sticky').Checked:= True;
       ShowMessage(IntToStr(I));
     end;
   except

   end;
  end;
Wer weiß Rat?

Gruß
SM :)

ScharfeMietze 5. Jan 2016 11:36

AW: Embedded WB Wordpress sticky Checken
 
Keiner eine Idee für mich?

nahpets 5. Jan 2016 12:17

AW: Embedded WB Wordpress sticky Checken
 
Hallo,

habe keine Ahnung, ob Dir dieses "Fundstück" von meiner Festplatte da unter Umständen, eventuell, vielleicht helfen könnte ;-)
Delphi-Quellcode:
// This will do a click on the first element of the first <FORM>, where an
// element is either <INPUT>, <SELECT> or <TEXTAREA>.
// If there is more than one button, you can do something like:
function WBClickButton(wb : TWebBrowser; sTagName : String; sValue : String; sType : String = 'SUBMIT') : Boolean;
var
  ovElements : OleVariant;
  i         : Integer;
  k         : integer;
begin
  Result := False;
  for k := 0 to wb.OleObject.Document.forms.Length - 1 do begin
    ovElements := wb.OleObject.Document.forms.item(k).elements;
    for i := 0 to (ovElements.Length - 1) do begin
      if (AnsiUpperCase(ovElements.item(i).tagName) = sTagName)
      and (AnsiUpperCase(ovElements.item(i).type) = sType)
      and (ovElements.item(i).Value = sValue) then begin
        ovElements.item(i).Click;
        Result := True;
        break;
      end;
    end;
    if not Result then begin
      for i := 0 to (ovElements.Length - 1) do begin
        if (AnsiUpperCase(ovElements.item(i).type) = AnsiUpperCase(sType))
        and (ovElements.item(i).Value = sValue) then begin
          ovElements.item(i).Click;
          Result := True;
          break;
        end;
      end;
    end;
  end;
end;
So als Ansatz zum Weiterforschen?

Bernhard Geyer 5. Jan 2016 13:42

AW: Embedded WB Wordpress sticky Checken
 
Das von IE/EmbeddedWB bereitgestellt DOM hat so seine Probleme wenn dieser dynamisch per JS zusammengebaut wird.

Vor allem wenn du hier nicht auf ein OnDocumentLoaded/Completet etc. wartest bekommst du u.U. noch den (nur halb) zusammengebauten DOM geliefert.

ScharfeMietze 11. Jan 2016 08:35

AW: Embedded WB Wordpress sticky Checken
 
Den Ansatz mit dem Fundstück hatte ich schon probiert. Es funktioniert leider nicht.


Auch der Ansatz mit Dom/Zeit. Ich habe es auf einen Separaten Button gelegt. Aber selbst nach nem Kaffe kein Erfolg.

Mal den Quelltext falls es wem hilft
Code:
</div><!-- .misc-pub-section -->

<div class="misc-pub-section misc-pub-visibility" id="visibility">
Sichtbarkeit: <span id="post-visibility-display">Öffentlich</span>
<a href="#visibility" class="edit-visibility hide-if-no-js"><span aria-hidden="true">Bearbeiten</span> <span class="screen-reader-text">Sichtbarkeit ändern</span></a>

<div id="post-visibility-select" class="hide-if-js">
<input type="hidden" name="hidden_post_password" id="hidden-post-password" value="" />
<input type="checkbox" style="display:none" name="hidden_post_sticky" id="hidden-post-sticky" value="sticky" />
<input type="hidden" name="hidden_post_visibility" id="hidden-post-visibility" value="public" />
<input type="radio" name="visibility" id="visibility-radio-public" value="public" checked='checked' /> <label for="visibility-radio-public" class="selectit">Öffentlich</label><br />
<span id="sticky-span"><input id="sticky" name="sticky" type="checkbox" value="sticky" /> <label for="sticky" class="selectit">Beitrag auf der Startseite halten</label><br /></span>
<input type="radio" name="visibility" id="visibility-radio-password" value="password" /> <label for="visibility-radio-password" class="selectit">Passwortgeschützt</label><br />
<span id="password-span"><label for="post_password">Passwort:</label> <input type="text" name="post_password" id="post_password" value="" maxlength="20" /><br /></span>
<input type="radio" name="visibility" id="visibility-radio-private" value="private" /> <label for="visibility-radio-private" class="selectit">Privat</label><br />

<p>
 <a href="#visibility" class="save-post-visibility hide-if-no-js button">OK</a>
 <a href="#visibility" class="cancel-post-visibility hide-if-no-js button-cancel">Abbrechen</a>
</p>
</div>

</div><!-- .misc-pub-section -->

nahpets 11. Jan 2016 12:48

AW: Embedded WB Wordpress sticky Checken
 
Hallo,

weitere Fundstücke, mit denen es mit 'nem TWebBrowser geklappt hat:
Delphi-Quellcode:
function WbSetCheckBoxField(WebBrowser: TWebBrowser; FieldName: string; Checked: boolean): Boolean;
var
  Field: TPoint;
begin
  // Position des Felds holen
  if not WbFindField(WebBrowser, FieldName, Field) then
  begin
    Result := false; // Feld existiert nicht
    exit;            // Ende
  end;
  try
    // CheckBox setzen
    WebBrowser.OleObject.Document.forms.Item(Field.x).Item(Field.y).Checked := Checked;
    Result := True;
  except
    Result := false;
    Exit;
  end;
end;
Delphi-Quellcode:
function WbFindField(WebBrowser: TWebBrowser; FieldName: string; var Field: TPoint): boolean;
var
  i, j: Integer;
  FormItem: Variant;
begin
  Result := False;
  //Hat das Dokument Forms? (Frames)
  if WebBrowser.OleObject.Document.all.tags('FORM').Length = 0 then
  begin
    Exit;
  end;
  //Bearbeite alle Frames
  for I := 0 to WebBrowser.OleObject.Document.forms.Length - 1 do
  begin
    FormItem := WebBrowser.OleObject.Document.forms.Item(I);
    // Bearbeite alle Felder eines Frames
    for j := 0 to FormItem.Length - 1 do
    begin
      try
        // Feldname wurde gefunden
        // gebe ihn zurück und ende
        if FormItem.Item(j).Name = FieldName then
        begin
          Field.x := i;         // Position speichern
          Field.Y := j;
          Result := True;
          exit;
        end;
      except
        Exit;
      end;
    end;
  end;
end;
Delphi-Quellcode:
  if WbSetCheckBoxField(WebBrowser1, 'sticky', true) then begin
    stb.SimpleText := Format('gechecked: %s',['sticky']);
  end else begin
    stb.SimpleText := Format('geht nicht :-(: %s',['sticky']);
  end;

himitsu 11. Jan 2016 12:51

AW: Embedded WB Wordpress sticky Checken
 
Nur mal eine Frage, wenn WordPress eine API zur Steuerung anbietet, warum nimmt man nicht diese?

ScharfeMietze 27. Jan 2016 21:48

AW: Embedded WB Wordpress sticky Checken
 
Nachdem ich die diversen Varianten erfolglos Probierte,

PS: Danke für die Anregungen. Sie haben mir troz allem geholfen

Die Lösung war eigentilch simpel, aber ich sah wohl den Wald vor lauter Bäumen nicht.
Delphi-Quellcode:
embdwb1.OleObject.Document.getElementById('sticky').checked:= True;

Über die WP API kann man Beiträge erstellen?
Ohne das vorher Coden zu müssen mit den diversen Plugins?

Ich wüsste nicht wie das geht?!?

Da ich schlicht den Browser unsichtbar lasse, ist das schlicht und für mich die einfachste Lösung.

Falls es mit Api noch einfacher geht, hab ich gern ein offenes Ohr!!!

Gruß
SM


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