0

特定の Web サイトで、IE の新しいインスタンスを開くと、以前にログインした別の IE のインスタンスが同時に開いている限り、既に認証されています。Delphi から tWebbrowser を開くと、認証されていません。作成したすべての tWebbrowser にログインしたくないので、IE の新しいインスタンスを手動で開いたときに、この認証が正常に機能するようにする方法を見つけたいと考えています。目的は、ログインしているさまざまなページから HTML を取得することです。

どちらかが欲しい

1) ShellExecute で開いた Internet Explorer のインスタンスから HTML を取得する

また

2) 開いている IE の他のすべてのインスタンスからの認証を tWebbrowser に記憶させる

また

3) tWebbrowser を Internet Explorer の既存のインスタンスに接続する

また

4) Delphi から HTML を取得する別の方法

java/sso であるため、認証を自動化する方法がわかりません。

4

1 に答える 1

1

次のようにして、IE ウィンドウの Windows シェルにクエリを実行できます。

uses ShDocVw_Tlb; // or ShDocVw

if Doc = Nil then
  exit;
if Doc.body = Nil then
  exit;

var
  i: Integer;
  Browser: IWebBrowser2;
  ShellWindows: IShellWindows;
  Doc : IHtmlDocument2;

ShellWindows := CoShellWindows.Create;
for i := 0 to ShellWindows.Count - 1 do
  if Supports(ShellWindows.Item(i), IWebBrowser2, Browser) then 
  begin
    // do something with Browser instance, e.g compare the Url you're
    // expecting with Browser.LocationUrl
    // if it is, then you can get at the Html by something like

    Browser.Document.QueryInterface(IHtmlDocument2, Doc);
    if (Doc <> Nil) and (Doc.Body <> Nil) then  
    // access any of the Doc's properties, e.g. InnerHtml

  end;

明らかに、Support が true を返した場合、返されたブラウザーで探しているものを調べることができます。たとえば、ブラウザーの Document のインターフェイスを使用してIHtmlDocument2(最初に Nil でないことを確認してください)、その DOM や HTML などにアクセスできます。それTWebBrowserが必要な場合は、代わりにウィンドウを見つけるのが比較的簡単だと思います。

于 2013-10-12T15:25:27.260 に答える