-1

VB.NET の Web ブラウザ コントロールを使用して埋め込み画像をダウンロードするにはどうすればよいですか?


特定の Web サイトをクロールし、埋め込まれた画像を含むコンテンツをダウンロードする VB.NET プロジェクトを開発しています。今私の問題は、サイトで維持されているセキュリティのために、Web クライアントと HTTP 要求/応答クラスを使用して目的を果たすことができないことです。

Web サイトは、いくつかのJavaScriptjQueryで維持されています。また、各URL要求で追跡する Cookie と非表示フィールドのセットを通じてセッションを維持します。不連続性が見つかった場合は、ログイン ページにリダイレクトされます。

この問題の解決策は、セキュリティの維持に優れた Web ブラウザー コンポーネントを使用することで見つかりました。

しかし、次の問題は、埋め込み画像などの HTML ソース ファイル以外のコンテンツの保存であり、これは現在の私の主な関心事であり、多くのソフトウェア開発者が同じ問題に直面していると確信しています。

変更した C# でさまざまな投稿を見つけましたが、Web ページ全体を保存するための C# コードのように、うまくいきませんでした。(画像/書式付き) .

また、 Visual Basic 2005 の Web ブラウザー コントロールから画像を保存するという同じ問題に対処するプロジェクトを持っていますが、これについては私の会社のポリシーでは許可されません。

右クリックと「名前を付けて画像を保存」の手順を自動化するにはどうすればよいですか?

本当の解決策はありますか?そうでない場合は、一時フォルダーからコピーするなどの代替ソリューションがあります。はいの場合、解決策を提供してください!

4

2 に答える 2

0

最初のアプローチ、つまり Web ブラウザー コンポーネントを使用してダウンロードする方法については答えが得られませんでしたが、「Temporary Internet Files」フォルダーからコピーするという代替手段が得られました。

これが私の仕事をしている私のコードスニペットです。

Private Function get_Image(ByVal src As String)
    '******* code for storing Images from temporary internet files folder.......
    Dim filename As String = get_File()
    Dim gifFiles As String() = Directory.GetFiles("C:\Documents and Settings\123\Local Settings\Temporary Internet Files\", "*.*", SearchOption.AllDirectories)
    Dim imgno As Integer = 0
    For Each file As String In gifFiles
        'Dim fsi As String = Directory.GetLastWriteTime(file).ToString
        If My.Computer.FileSystem.FileExists(file) And file.Contains("attachDisplay") And Not filename.Contains("File") Then  ' This is HardCoded part for my images that are having dynamic url as my base_URL/attachDisplay?_XYZ (so in temp it is storing as attachDisplay[i]; i=1,2...)
            Dim curFileDT As Date = Directory.GetLastWriteTime(file)
            If Date.Compare(lastFileDT, curFileDT) = -1 Then ' if Last file date is before than current File write time
                imgno += 1

                My.Computer.FileSystem.CopyFile(file, filename & " Img No." & imgno & file.Substring(file.LastIndexOf(".")), True)
            End If
        End If
    Next
    lastFileDT = Date.Now 'My lastFileDT variable is declared at class level and first initialization at form load.
    '*******
End Function

これは画像をダウンロードするための適切な方法ではありませんが、現在、私にとってはうまく機能しています。

于 2012-11-06T04:15:50.640 に答える
0

タスクを達成するために実際に画像をダウンロードする必要があるのはなぜですか? また、Web リクエストを使用して (実際のブラウザ コントロールを必要とせずに) Cookie を実際に追跡/送信できることを覚えておいてください。また、 HtmlAgilityPackを使用して、これらの隠しフィールドの HTML を解析できます。

そのため、ブラウザー コントロールを使用するのではなく、自動化のためにそのルートを再検討することをお勧めします。

于 2012-11-03T04:33:47.473 に答える