(20-12-2022, Saat: 12:35)Husv Adlı Kullanıcıdan Alıntı: İyi günler.
FMX tarafında WebBrowser1 verileri nasıl alabilirim?
web sayfası bana özel sayfa tamamen boş sadece, textler var
Örnek: User, pasw, Lasdate alalardaki verileri döngü ile alacağım herhangi bir div veya span içinde değil textler boş html.
Ahmet 12345 20.12.2023
Ayşe 12345 20.12.2023
Nuray 12345 20.12.2023
procedure TMainForm.Button2Click(Sender: TObject); var i: Integer; begin for I := 0 to WebBrowser1.Document.Length - 1 do begin end; end; end;
unit Unit1;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
FMX.Memo.Types, FMX.StdCtrls, FMX.Controls.Presentation, FMX.ScrollBox,
FMX.Memo, FMX.WebBrowser, IdContext, IdCustomHTTPServer, IdBaseComponent,
IdComponent, IdCustomTCPServer, IdHTTPServer;
type
TForm1 = class(TForm)
WebBrowser1: TWebBrowser;
Memo1: TMemo;
Button1: TButton;
Timer1: TTimer;
IdHTTPServer1: TIdHTTPServer;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure IdHTTPServer1CommandGet(AContext: TIdContext;
ARequestInfo: TIdHTTPRequestInfo;
AResponseInfo: TIdHTTPResponseInfo);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.fmx}
uses FMX.Platform, System.Rtti, IdGlobal;
procedure TForm1.FormCreate(Sender: TObject);
begin
webbrowser1.Navigate('https://www.google.com');
end;
procedure TForm1.IdHTTPServer1CommandGet(AContext: TIdContext; ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
begin
memo1.lines.add('! IdHTTPServer1CommandGet');
if ARequestInfo.CommandType=THTTPCommandType.hcPOST then
begin
memo1.lines.add('POST: '+ ReadStringFromStream( ARequestInfo.PostStream, -1, IndyTextEncoding_UTF8 ) );
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
timer1.enabled:=False;
Button1Click(Sender);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
uClipBoard : IFMXClipboardService;
Value : TValue;
Text : string;
begin
WebBrowser1.EvaluateJavaScript( ' var veri=document.documentElement.outerHTML; '+
' xmlhttp = new XMLHttpRequest(); xmlhttp.open("POST", "http://127.0.0.1:8090", true); xmlhttp.send(veri); ');
end;
end.
object Form1: TForm1 Left = 0 Top = 0 Caption = 'Form1' ClientHeight = 708 ClientWidth = 490 Position = ScreenCenter FormFactor.Width = 320 FormFactor.Height = 480 FormFactor.Devices = [Desktop] OnCreate = FormCreate DesignerMasterStyle = 3 object WebBrowser1: TWebBrowser Align = Top Size.Width = 490.000000000000000000 Size.Height = 181.000000000000000000 Size.PlatformDefault = False WindowsEngine = EdgeIfAvailable end object Memo1: TMemo Touch.InteractiveGestures = [Pan, LongTap, DoubleTap] DataDetectorTypes = [] Align = Top Position.Y = 181.000000000000000000 Size.Width = 490.000000000000000000 Size.Height = 224.000000000000000000 Size.PlatformDefault = False TabOrder = 1 Viewport.Width = 482.000000000000000000 Viewport.Height = 216.000000000000000000 end object Button1: TButton Align = Client Size.Width = 490.000000000000000000 Size.Height = 303.000000000000000000 Size.PlatformDefault = False TabOrder = 2 Text = 'Button1' OnClick = Button1Click end object Timer1: TTimer Interval = 3000 OnTimer = Timer1Timer Left = 400 Top = 489 end object IdHTTPServer1: TIdHTTPServer Active = True Bindings = < item IP = '127.0.0.1' Port = 8090 end> DefaultPort = 8090 OnCommandGet = IdHTTPServer1CommandGet Left = 16 Top = 433 end end

(20-12-2022, Saat: 20:39)mrmarman Adlı Kullanıcıdan Alıntı: FMX yapıda platform gereği; TWebBrowser ile değil de
Kod: (Select All)
// System.Net.HttpClientComponent unitindedir...
TNetHTTPClient
ile verileri çekmeyi düşünmek isteyebilirsiniz.
Örnek :
uses System.Net.HttpClientComponent, System.Net.HttpClient; function MakeRequest(aUrl: string): string; var LClient : System.Net.HttpClientComponent.TNetHTTPClient; LResponse : System.Net.HttpClient.IHTTPResponse; begin LClient := TNetHTTPClient.Create(nil); try LClient.UserAgent := 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'; LClient.Accept := 'text/html'; LResponse := LClient.Get(aUrl); // 404 not forund // 200 OK case LResponse.StatusCode of 200: // success Result := LResponse.ContentAsString; 404: // not found Result := '[ERROR] Page not found...'; else Result := '[ERROR]' + sLineBreak + LResponse.ContentAsString; end; finally FreeAndNil(LClient); end; end;
Kullanımı :
procedure TForm1.Button1Click(Sender: TObject); var LContent : string; begin LContent := MakeRequest('https://www.google.com.tr'); // ... end;
fikir vermesi açısından yaptım, biraz ters oldu ama sanırım yapabileceğimiz android tarafında en fazla bu şekilde olacakdır, sizin bunu daha güzel bir hale getireceğinize eminim.
js ile "document.documentElement.outerHTML" clipboard a write denedim ilginç bir şekilde yazamadı, araştırmak lasım, o şekilde soket serversiz daha kolay olurdu.
esasında executejavascript in return değeri kaldırılmış, procedure ye çevirilmiş oysaki oradan evulate yapılabilinirdi.
bu yapı ile yine js kullanılarak sayfa içi görsel aksiyonlardan sonra, fmx uygulamaya bir işlem yaptırmak için trigger da yaptırılabilir.

