TouchEvent,Scroll,SimulateKeyEvent
Posted: Fri Nov 01, 2024 3:58 pm
function TMainForm.SimulateKeyEvent(S: String): Boolean;
var
I: Integer;
KeyCode: Integer;
begin
Result := False;
for I := 1 to Length(S) do
begin
KeyCode := Ord(S);
TThread.ForceQueue(nil,
procedure
var
KeyChar: Char;
KeyStr: String;
begin
KeyChar := S;
KeyStr := UpperCase(KeyChar);
WVBrowser1.SimulateKeyEvent(ketKeyDown, 0, KeyCode, KeyCode, 0, 0,False, False, False, KeyChar, KeyChar, '', 'Key' + KeyStr, KeyChar);
Sleep(RandomRange(50, 120));
WVBrowser1.SimulateKeyEvent(ketKeyUp, 0, KeyCode, KeyCode, 0, 0, False,False, False, KeyChar, KeyChar, '', 'Key' + KeyStr, KeyChar);
end);
Sleep(RandomRange(150, 400));
if (I mod 5 = 0) and (Random(100) < 30) then
Sleep(RandomRange(500, 800));
end;
Result := True;
end;
//SimulateKeyEvent
function TMainForm.SimulateComplexScroll(StartX, StartY, EndX, EndY: Double; MinSpeed, MaxSpeed: Integer): Boolean;
var
Params: TJSONObject;
xDistance, yDistance: Double;
begin
Result := False;
xDistance := EndX - StartX;
yDistance := EndY - StartY;
TThread.ForceQueue(nil,
procedure
begin
Params := TJSONObject.Create;
try
Params.AddPair('x', TJSONNumber.Create(StartX));
Params.AddPair('y', TJSONNumber.Create(StartY));
Params.AddPair('gestureSourceType', 'mouse');
Params.AddPair('xDistance', TJSONNumber.Create(xDistance));
Params.AddPair('yDistance', TJSONNumber.Create(yDistance));
Params.AddPair('speed', TJSONNumber.Create(RandomRange(MinSpeed, MaxSpeed)));
Params.AddPair('repeatCount', TJSONNumber.Create(0));
Params.AddPair('preventFling', TJSONBool.Create(True));
WVBrowser1.CallDevToolsProtocolMethod('Input.synthesizeScrollGesture', Params.ToString, DEVTOOLS_CANEMULATE_ID);
finally
Params.Free;
end;
end);
Result := True;
end;
//SimulateComplexScroll
function TMainForm.SimulateTouchEvent(x, y: Integer): Boolean;
var
Params, TouchPoint: TJSONObject;
TouchPointsArray: TJSONArray;
Completed: Boolean;
begin
Result := False;
Completed := False;
TouchPointsArray := TJSONArray.Create;
Params := TJSONObject.Create;
try
TThread.Synchronize(nil,
procedure
begin
TouchPoint := TJSONObject.Create;
TouchPoint.AddPair('x', TJSONNumber.Create(x));
TouchPoint.AddPair('y', TJSONNumber.Create(y));
TouchPoint.AddPair('radiusX', TJSONNumber.Create(1.0));
TouchPoint.AddPair('radiusY', TJSONNumber.Create(1.0));
TouchPoint.AddPair('rotationAngle', TJSONNumber.Create(0));
TouchPoint.AddPair('force', TJSONNumber.Create(1.0));
TouchPoint.AddPair('id', TJSONNumber.Create(1));
TouchPointsArray.AddElement(TouchPoint);
Params.AddPair('type', 'touchStart');
Params.AddPair('touchPoints', TouchPointsArray);
WVBrowser1.CallDevToolsProtocolMethod('Input.dispatchTouchEvent', Params.ToString, DEVTOOLS_CANEMULATE_ID);
Sleep(RandomRange(44, 55));
Params.RemovePair('type').Free;
Params.AddPair('type', 'touchEnd');
WVBrowser1.CallDevToolsProtocolMethod('Input.dispatchTouchEvent', Params.ToString, DEVTOOLS_CANEMULATE_ID);
Completed := True;
end);
Result := Completed;
finally
Params.Free;
end;
end;
//SimulateTouchEvent
You can modify it accordingly.
//TThread.Synchronize or TThread.ForceQueue delete
var
I: Integer;
KeyCode: Integer;
begin
Result := False;
for I := 1 to Length(S) do
begin
KeyCode := Ord(S);
TThread.ForceQueue(nil,
procedure
var
KeyChar: Char;
KeyStr: String;
begin
KeyChar := S;
KeyStr := UpperCase(KeyChar);
WVBrowser1.SimulateKeyEvent(ketKeyDown, 0, KeyCode, KeyCode, 0, 0,False, False, False, KeyChar, KeyChar, '', 'Key' + KeyStr, KeyChar);
Sleep(RandomRange(50, 120));
WVBrowser1.SimulateKeyEvent(ketKeyUp, 0, KeyCode, KeyCode, 0, 0, False,False, False, KeyChar, KeyChar, '', 'Key' + KeyStr, KeyChar);
end);
Sleep(RandomRange(150, 400));
if (I mod 5 = 0) and (Random(100) < 30) then
Sleep(RandomRange(500, 800));
end;
Result := True;
end;
//SimulateKeyEvent
function TMainForm.SimulateComplexScroll(StartX, StartY, EndX, EndY: Double; MinSpeed, MaxSpeed: Integer): Boolean;
var
Params: TJSONObject;
xDistance, yDistance: Double;
begin
Result := False;
xDistance := EndX - StartX;
yDistance := EndY - StartY;
TThread.ForceQueue(nil,
procedure
begin
Params := TJSONObject.Create;
try
Params.AddPair('x', TJSONNumber.Create(StartX));
Params.AddPair('y', TJSONNumber.Create(StartY));
Params.AddPair('gestureSourceType', 'mouse');
Params.AddPair('xDistance', TJSONNumber.Create(xDistance));
Params.AddPair('yDistance', TJSONNumber.Create(yDistance));
Params.AddPair('speed', TJSONNumber.Create(RandomRange(MinSpeed, MaxSpeed)));
Params.AddPair('repeatCount', TJSONNumber.Create(0));
Params.AddPair('preventFling', TJSONBool.Create(True));
WVBrowser1.CallDevToolsProtocolMethod('Input.synthesizeScrollGesture', Params.ToString, DEVTOOLS_CANEMULATE_ID);
finally
Params.Free;
end;
end);
Result := True;
end;
//SimulateComplexScroll
function TMainForm.SimulateTouchEvent(x, y: Integer): Boolean;
var
Params, TouchPoint: TJSONObject;
TouchPointsArray: TJSONArray;
Completed: Boolean;
begin
Result := False;
Completed := False;
TouchPointsArray := TJSONArray.Create;
Params := TJSONObject.Create;
try
TThread.Synchronize(nil,
procedure
begin
TouchPoint := TJSONObject.Create;
TouchPoint.AddPair('x', TJSONNumber.Create(x));
TouchPoint.AddPair('y', TJSONNumber.Create(y));
TouchPoint.AddPair('radiusX', TJSONNumber.Create(1.0));
TouchPoint.AddPair('radiusY', TJSONNumber.Create(1.0));
TouchPoint.AddPair('rotationAngle', TJSONNumber.Create(0));
TouchPoint.AddPair('force', TJSONNumber.Create(1.0));
TouchPoint.AddPair('id', TJSONNumber.Create(1));
TouchPointsArray.AddElement(TouchPoint);
Params.AddPair('type', 'touchStart');
Params.AddPair('touchPoints', TouchPointsArray);
WVBrowser1.CallDevToolsProtocolMethod('Input.dispatchTouchEvent', Params.ToString, DEVTOOLS_CANEMULATE_ID);
Sleep(RandomRange(44, 55));
Params.RemovePair('type').Free;
Params.AddPair('type', 'touchEnd');
WVBrowser1.CallDevToolsProtocolMethod('Input.dispatchTouchEvent', Params.ToString, DEVTOOLS_CANEMULATE_ID);
Completed := True;
end);
Result := Completed;
finally
Params.Free;
end;
end;
//SimulateTouchEvent
You can modify it accordingly.
//TThread.Synchronize or TThread.ForceQueue delete