基本代码:
procedure TWorkThread.WebBrowserDocumentComplete(ASender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
var
  Doc:IHTMLDocument2;
  input:OleVariant;
  userinputelement,pwdinputelement:ihtmlinputelement;
  access_token:ansistring;
begin
  if pos('baidu',PChar(WebBrowser.locationURL)) >0 then
  begin
    doc:=WebBrowser.document as ihtmldocument2;
    userinputelement:=(doc.all.item('kw',0) as ihtmlinputelement);
    userinputelement.value:='百度';
    input:=doc.all.item('su',0);
    input.click;
  end;
end;procedure TWorkThread.run;
begin
    activex.CoInitialize(nil);
    try
      WebBrowser := TWebBrowser.Create(form1);
      WebBrowser.Silent:=true;
      WebBrowser.ParentWindow:=form1.Handle;
      //WebBrowser.OnDocumentComplete := Form1.WebBrowser1DocumentComplete;
      WebBrowser.Navigate('www.baidu.com');
    except
      WebBrowser.Destroy;
    end;
      activex.CoUninitialize();
end;

解决方案 »

  1.   


    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, OleCtrls, SHDocVw, ActiveX, StdCtrls, MSHTML;type
      TWorkThread = class(TThread)
      private
        { Private declarations }
      protected
        procedure Execute; override;
        procedure run;
        procedure WebBrowserDocumentComplete(ASender: TObject;
          const pDisp: IDispatch; var URL: OleVariant);
      end;
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
      WebBrowser: TWebBrowser;implementation{$R *.dfm}{ TMyThread }procedure TWorkThread.Execute;
    begin
      Synchronize(run);
    end;procedure TWorkThread.run;
    begin
      CoInitialize(nil);
      try
        WebBrowser := TWebBrowser.Create(Form1);
        WebBrowser.Silent := true;
        WebBrowser.ParentWindow := Form1.Handle;
        WebBrowser.FullScreen := True;
        WebBrowser.OnDocumentComplete := WebBrowserDocumentComplete;
        WebBrowser.Navigate('www.baidu.com');
      except
        WebBrowser.Destroy;
      end;
      CoUninitialize();
    end;procedure TWorkThread.WebBrowserDocumentComplete(ASender: TObject;
      const pDisp: IDispatch; var URL: OleVariant);
    var
      Doc: IHTMLDocument2;
      input: OleVariant;
      userinputelement, pwdinputelement: ihtmlinputelement;
      access_token: ansistring;
    begin
      ShowMessage('网页加载完成');  if pos('baidu', PChar(WebBrowser.locationURL)) > 0 then
      begin
        doc := WebBrowser.document as ihtmldocument2;
        userinputelement := (doc.all.item('kw', 0) as ihtmlinputelement);
        userinputelement.value := '百度';
        input := doc.all.item('su', 0);
        input.click;
      end;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      TWorkThread.Create(False);
    end;end.
      

  2.   

    忘了FreeOnTerminate,会导致内存泄露
    修改下调用procedure TForm1.FormCreate(Sender: TObject);
    var
      myThread: TWorkThread;
    begin
      myThread := TWorkThread.Create(True);
      myThread.FreeOnTerminate := True;
      myThread.Resume;
    end;
      

  3.   

    如果webbrowser不可见的话,就不会触发DocumentComplete事件
    这跟线程创建无关,即使你在按钮中执行创建,只要不可见,就不会触发另外,VCL不是线程安全的,最好不要在线程里创建可视控件
      

  4.   


    请问如何不保存cookie啊?我提交以后再重新创建线程还是提交后的页面