본문 바로가기
IT/델파이

TChromium 컴포넌트를 활용한 브라우저 기능 확장

by 불멸남생 2024. 6. 25.

TChromium 컴포넌트는 Delphi 개발자들에게 강력한 웹 브라우징 기능을 제공합니다. 이 글에서는 TChromium 컴포넌트를 활용하여 브라우저의 다양한 기능을 확장하는 방법을 자세히 설명하겠습니다.

테스트 도구(DevTool) 창 열기

테스트 도구(DevTool)는 웹 개발자가 웹 페이지를 디버그하고 문제를 해결하는 데 유용한 도구입니다. TChromium을 사용하면 DevTool을 쉽게 열 수 있습니다.

procedure TForm1.ShowDevTools(aPoint: TPoint);
begin
  DevTools.Visible := True;
  DevTools.Width := Width div 4; // 메인 폼을 4등분하여 오른쪽에 배치
  Chromium1.ShowDevTools(aPoint, DevTools);
end;
반응형

브라우저 웹페이지 내 텍스트 얻기

웹 페이지 내 텍스트를 추출하는 것은 다양한 자동화 및 분석 작업에 유용합니다. TChromium의 RetrieveText 메서드를 사용하여 페이지 텍스트를 가져올 수 있습니다.

Chromium1.RetrieveText;

 

텍스트가 요청되면 OnTextResultAvailable 이벤트를 통해 텍스트를 처리할 수 있습니다.

procedure TForm1.Chromium1TextResultAvailable(Sender: TObject; const aText: ustring);
begin
  clipboard.AsText := aText;
end;
반응형

브라우저 웹페이지 내 HTML 얻기

웹 페이지의 HTML 코드를 추출하여 분석하거나 수정하는 데 사용할 수 있습니다. TChromium의 RetrieveHTML 메서드를 사용하면 됩니다.

Chromium1.RetrieveHTML;

HTML이 요청되면 OnTextResultAvailable 이벤트를 통해 HTML을 처리할 수 있습니다.

procedure TForm1.Chromium1TextResultAvailable(Sender: TObject; const aText: ustring);
begin
  clipboard.AsText := aText;
end;
반응형

브라우저 웹페이지 내 프레임 ID 목록 얻기

웹 페이지의 프레임 ID 목록을 얻는 것은 특정 프레임의 내용을 추적하거나 조작하는 데 유용합니다.

procedure TForm1.CopyFramesIDs;
var
  i: NativeUInt;
  TempCount: NativeUInt;
  TempArray: TCefFrameIdentifierArray;
  TempString: string;
begin
  TempCount := Chromium1.FrameCount;

  if Chromium1.GetFrameIdentifiers(TempCount, TempArray) then
  begin
    TempString := '';
    i := 0;

    while (i < TempCount) do
    begin
      // 상수 CRLF(#10#13)는 unit uCEFConstants.pas에 정의되어 있습니다.
      TempString := TempString + IntToStr(TempArray[i]) + CRLF;
      Inc(i);
    end;

    clipboard.AsText := TempString;
  end;
end;
반응형

브라우저 웹페이지 내 프레임 이름 얻기

프레임의 이름을 얻는 것은 특정 프레임을 식별하고 작업하는 데 유용합니다.

procedure TForm1.CopyFramesNamesMsg;
var
  TempSL: TStringList;
begin
  try
    TempSL := TStringList.Create;

    if Chromium1.GetFrameNames(TStrings(TempSL)) then
      clipboard.AsText := TempSL.Text;
  finally
    FreeAndNil(TempSL);
  end;
end;
반응형

브라우저 웹페이지 호출/응답 정보 얻기

웹 페이지와의 요청(Request) 및 응답(Response) 정보를 캡처하여 분석하는 것은 디버깅과 문제 해결에 매우 유용합니다.

// 요청정보 캡처
procedure TForm1.InspectRequest(const aRequest: ICefRequest);
var
  TempHeaderMap: ICefStringMultimap;
  i, j: integer;
begin
  if (aRequest <> nil) then
  begin
    FRequest.Clear;

    TempHeaderMap := TCefStringMultimapOwn.Create;
    aRequest.GetHeaderMap(TempHeaderMap);

    i := 0;
    j := TempHeaderMap.Size;

    while (i < j) do
    begin
      FRequest.Add(TempHeaderMap.Key[i] + '=' + TempHeaderMap.Value[i]);
      Inc(i);
    end;
  end;
end;

// 응답정보 캡처
procedure TForm1.InspectResponse(const aResponse: ICefResponse);
var
  TempHeaderMap: ICefStringMultimap;
  i, j: integer;
begin
  if (aResponse <> nil) then
  begin
    FResponse.Clear;

    TempHeaderMap := TCefStringMultimapOwn.Create;
    aResponse.GetHeaderMap(TempHeaderMap);

    i := 0;
    j := TempHeaderMap.Size;

    while (i < j) do
    begin
      FResponse.Add(TempHeaderMap.Key[i] + '=' + TempHeaderMap.Value[i]);
      Inc(i);
    end;
  end;
end;

// TChromium.OnBeforeResourceLoad Event Handler
procedure TForm1.Chromium1BeforeResourceLoad(Sender: TObject;
  const browser: ICefBrowser; const frame: ICefFrame;
  const request: ICefRequest; const callback: ICefRequestCallback;
  out Result: TCefReturnValue);
begin
  Result := RV_CONTINUE;

  if Chromium1.IsSameBrowser(browser) and
     (frame <> nil) and frame.IsMain then
    InspectRequest(request);
end;

// TChromium.OnResourceResponse Event Handler
procedure TForm1.Chromium1ResourceResponse(Sender: TObject;
  const browser: ICefBrowser; const frame: ICefFrame;
  const request: ICefRequest; const response: ICefResponse;
  out Result: Boolean);
begin
  Result := False;

  if Chromium1.IsSameBrowser(browser) and
     (frame <> nil) and
     frame.IsMain then
    InspectResponse(response);
end;
반응형

브라우저 웹페이지 내비게이션 히스토리 얻기

웹 페이지의 내비게이션 히스토리를 추적하여 사용자가 어떤 페이지를 방문했는지 확인할 수 있습니다.

FNavigationHistory: TStringList; 
// TChromium.OnNavigationVisitorResultAvailable Event Handler 
procedure TForm1.Chromium1NavigationVisitorResultAvailable(
  const entry: ICefNavigationEntry; current: Boolean; index, total: Integer; var aResult: Boolean); 
begin 
  if (entry <> nil) and entry.IsValid then 
    FNavigationHistory.Add(entry.Url); 
end;
반응형

브라우저 웹페이지 스냅샷 얻기(보이는 화면만)

웹 페이지의 스냅샷을 찍어 사용자가 현재 보고 있는 화면을 저장할 수 있습니다.

procedure TForm1.TakeSnapshotMsg(var aMessage: TMessage); 
var 
  TempBitmap: TBitmap; 
begin 
  TempBitmap := nil; 
  try 
    Chromium1.TakeSnapshot(TempBitmap); // TempBitmap 처리 코드...
  finally 
    if (TempBitmap <> nil) then 
      FreeAndNil(TempBitmap); 
  end; 
end;
반응형

결론

이와 같이 TChromium 컴포넌트를 활용하면 웹 페이지의 다양한 정보를 쉽게 추출하고 조작할 수 있습니다. 이러한 기능은 웹 개발과 디버깅, 그리고 데이터 분석에 큰 도움이 됩니다. 이 글에서 소개한 방법들을 사용하여 더욱 효율적이고 강력한 웹 애플리케이션을 개발할 수 있을 것입니다.

반응형