0

こんにちは、ac# IE オートメーション スクリプトがあり、HTMLImgClass から画像を取得しようとしています。画像が保存されていないため、キャッシュから画像を取得できません。また、新しい画像が返されるため、src に要求を再送信することもできません。ブラウザのメモリ内の画像にアクセスする方法。

captcha_image = (HTMLImgClass)GetElementByPosition("img", 0, ie1);

オブジェクトは上記の割り当てで取得され、正常に動作しますが、画像を取得するために使用できる方法がわかりません。

お時間をいただきありがとうございます

解決済み 興味のある他の人のために、この方法で解決しました。画像をクリップボードにコピーしてから、bmp として保存することにしました。

captcha_image = (HTMLImgClass)GetElementByPosition("img", 0, ie1);
                                    IHTMLImgElement captcha_image1 = (IHTMLImgElement)captcha_image;
                                    IHTMLDocument2 doc = (IHTMLDocument2)wb1.Document;
                                    IHTMLControlRange imgRange = (IHTMLControlRange)((HTMLBody)doc.body).createControlRange();
                                    imgRange.add((IHTMLControlElement)captcha_image1);

                                    imgRange.execCommand("Copy", false, null);
                                    using (Bitmap bmp = (Bitmap)Clipboard.GetDataObject().GetData(DataFormats.Bitmap))
                                    {
                                        bmp.Save(@"C:\skt.bmp");
                                    }
4

1 に答える 1

0

これはあなたの他の質問に関連していると思います。そこの私の回答で示唆されているように、画像がディスクキャッシュに保存されていない場合、そこにアクセスすることはできません。

解決策は、ブラウザがすべてのリクエストに対してプロキシを通過するように強制することです。したがって、最初にリクエストされたとおりにキャプチャ イメージを保存します。過去にこれにFiddler2を使用しました。

Fiddler2 ではOnBeforeResponse、次のようなコードでフックを変更して画像を保存できます。

    if (oSession.uriContains("captcha")){      // change as needed
        oSession.utilDecodeResponse();
        var filename = oSession.url;           // get an appropriate file name
        oSession.SaveResponseBody(filename);   // store the file
    }

このスクリプトによって保存されるファイルが後でプログラムによって (通常は URL の何かをキーオフすることによって) 見つけられる限り、問題はありません。

于 2012-05-27T11:43:49.397 に答える