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 컴포넌트를 활용하면 웹 페이지의 다양한 정보를 쉽게 추출하고 조작할 수 있습니다. 이러한 기능은 웹 개발과 디버깅, 그리고 데이터 분석에 큰 도움이 됩니다. 이 글에서 소개한 방법들을 사용하여 더욱 효율적이고 강력한 웹 애플리케이션을 개발할 수 있을 것입니다.
'IT > 델파이' 카테고리의 다른 글
Delphi "coreide70.bpl" Access violation 오류 대처법 (0) | 2024.07.30 |
---|---|
Chromium 메시지 처리 매커니즘 이해 및 구현 방법 (0) | 2024.06.25 |
델파이 PNG파일 Image32로드 하기 (0) | 2024.02.05 |
[Delphi] 워터마크 표시와 이미지 줄이기 (0) | 2023.11.10 |
투명 PNG 이미지를 투명하지 않은 다른 이미지 포멧으로 저장하기 (0) | 2023.02.15 |