웹 페이지의 모든 요소를 MSHTML로 제어하기(delphi 코드)

3546 단어 Delphi
며칠 전에 VS2005의 웹 브라우저로 웹 페이지의 요소를 제어했는데 VS2005는 좋은 기능을 많이 봉했지만 사용하기에는 부족하다고 느꼈다.예를 들어 나는 프레임 페이지 안의 웹 페이지의 원본 코드를 얻으려면 찾아오는 것이 마땅한 방법을 찾지 못한다고 생각한다.MSHTML은 마이크로소프트의 COM 구성 요소입니다. 이 구성 요소는 HTML 언어의 모든 요소와 속성을 봉인합니다. 표준 인터페이스를 통해 지정한 웹 페이지에 접근할 수 있습니다. MSHTML 대상 모델은 일부 대상과 집합으로 구성되어 있습니다. 뿌리에 있는 것은 HTML입니다. 페이지를 여는 1개의 창을 설명하는데, 일련의 집합과 대상을 포함합니다.Frames 컬렉션, History, Location, Navigator, Document, Vi-sum, Event 객체 등 고객 창의 실제 웹 페이지에 나타나는 설명은 Document 객체입니다.일련의 속성, 방법, 대상과 집합으로 구성되어 있다. 그 중에서 All 집합에는 웹 페이지에 있는 모든 태그(Tag) 요소가 포함되어 있는데 그 주요한 방법과 속성은 다음과 같다. (1)Length(길이): 즉, 태그가 나타난 개수는 태그의 집합을 0에서 시작하는 1차원 그룹으로 이해할 수 있고 그 순서는 태그가 웹 위치에 따라 배열된다.(2) Tags(태그): Doc.Al1.Tags(P)가 모든 세그먼트 태그 P를 받는 등 지정된 태그의 컬렉션을 필터링하는 데 사용합니다.(3) Item(프로젝트): 집합의 한 요소를 선택하는 데 사용한다. 예를 들어object.item(0)은 집합의 첫 번째 요소를 얻고object.item(i)는 i+1개의 요소를 얻는다. 또한 IHTMLElement도 웹 페이지에 지정된 표시의 집합을 대표하며 이 집합 대상을 통해웹 페이지에 특정한 태그의 내용을 얻을 수 있습니다. IHTMLElement에는 네 가지 주요 속성이 있습니다. (1) InnerText: 시작 태그와 끝 태그 사이의 텍스트입니다.(2) InnerHTML: 시작 태그와 끝 태그 사이의 텍스트와 HTML;(3) OuterText: 객체의 텍스트,(4) OuterHTML:객체의 텍스트 및 HTML. 자동 커밋
 
procedure TForm1.Button1Click(Sender: TObject);
var
Doc:IHTMLDocument2;
input:OleVariant;
userinputelement,pwdinputelement:ihtmlinputelement;
begin
doc:=webbrowser1.document as ihtmldocument2;
userinputelement:=(doc.all.item('user'( ),0) as ihtmlinputelement);
userinputelement.value:=edit1.text;( )
pwdinputelement:=(doc.all.item('password',0) as ihtmlinputelement);
pwdinputelement.value:=edit2.text;
input:=doc.all.item('submit',0);
input.click;
end; 

데이터 제출 버튼에 NAME 속성이 없으면 다음과 같이 하십시오.
procedure TForm1.Button1Click(Sender: TObject);
var
Doc:IHTMLDocument2;
form:ithmlformelement;
userinputelement,pwdinputelement:ihtmlinputelement;
begindoc:=webbrowser1.document as ihtmldocument2;userinputelement:=(doc.all.item('user'(즉 웹 페이지의 사용자 이름 컨트롤의 이름), 0)as ihtmlinputelement);userinputelement.value:=edit1.text;(즉 웹 페이지에 입력할 것) pwdinputelement: = (doc.all.item('password', 0)as ihtmlinputelement);pwdinputelement:=edit2.text;form:=(doc.all.item('login_form',0) as ihtmlformelement):form.submit;end; 
현재 페이지가 프레임 페이지인 경우 다음 방법을 사용합니다.
procedure TForm1.Button1Click(Sender: TObject);
var
    doc2:IHTMLDocument2;
    o : Olevariant;
    ole_index: OleVariant;
    frame_dispatch: IDispatch;
    frame_win: IHTMLWindow2;
    frame_doc: IHTMLDocument2;
begin
  begin
      doc2 := WebBrowser1.Document as IHTMLDocument2;
      ole_index:=0;
      frame_dispatch := doc2.Frames.Item(ole_index);
      if frame_dispatch <> nil then
      begin
          frame_win := frame_dispatch as IHTMLWindow2;
          frame_doc := frame_win.document;
         // memo1.lines.add(IHTMLDocument2(frame_doc).body.outerHTML);
      End;
end; 

좋은 웹페이지 즐겨찾기