VB6 pdfの保存

解決


nobu  2013-03-03 21:54:27  No: 103415  IP: [192.*.*.*]

WinXp  のVB6  sp6  にて、
下記のURLの
http://www.yuushirai.jp/shirai/Licence/Exam/Exammenu.html  の中の
下記のページ内の
http://www.yuushirai.jp/shirai/Licence/Exam/1-soutu.html  の中の
「2012.09」「 問題 」のリンク先URL
http://www.yuushirai.jp/shirai/Licence/Exam/mon/sogo-tu-1/201209/sogo-tu-1-kiso-mondai-201209.pdf  を保存したいと思いますが
別ページの内容が保存されてしまい目的のPDFの保存が出来ません。
保存されてしまうは下記のページです。
http://www.yuushirai.jp/shirai/Licence/Exam.html

Webページ上でリンク「2012.09」の「 問題 」をクリックすれば別ページには表示されるのですがVBにて自動保存をしようとしています。

ご指導をお願いします。


Private Declare Function URLDownloadToFile Lib "urlmon" _
    Alias "URLDownloadToFileA" (ByVal pCaller As Long, _
    ByVal szURL As String, ByVal szFileName As String, _
    ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long

Private SaveFileName As String
Private DownloadFile As String
Private Ret          As Long

Private Sub Command1_Click()

URL = "http://www.yuushirai.jp/shirai/Licence/Exam/mon/sogo-tu-1/201209/sogo-tu-1-kiso-mondai-201209.pdf"
        SaveFileName =  "C:\201209.pdf"
        DownloadFile = URL
        Ret = URLDownloadToFile(0, DownloadFile, SaveFileName, 0, 0

End Sub

編集 削除
キトキト  2013-03-05 13:52:39  No: 103416  IP: [192.*.*.*]

IE等のブラウザで試してみると分かりますが、pdfのURLを直接ブラウザのアドレスバーに入力した場合でも、
http://www.yuushirai.jp/shirai/Licence/Exam.html が表示されます。
おそらくこのサイトのWebサーバー側で、自身のサイトからpdfのURLのリクエストがあった場合だけpdfのレスポンスを出力し、
それ以外はトップページのサイトにリダイレクトするような設定になっているのだと思います。

ではどうすればいいのかというと、ゴメンナサイ、分かりません。

編集 削除
nobu  2013-03-05 14:30:01  No: 103417  IP: [192.*.*.*]

ありがとうございます。
おっしゃる通りになっているのは分かります。
そこで、どうすればVB6から保存出来るのかをお尋ねしたしだいです。

VB6で該当リンクをクリックさせる事は出来たのですが新たにIEが開いてPDFページが表示されます。
このページをVB6にて保存する方法でも分かると良いのですが。

編集 削除
キトキト  2013-03-05 16:12:55  No: 103418  IP: [192.*.*.*]

> VB6で該当リンクをクリックさせる事は出来たのですが

これはWebBrowserかIEをVBで操作して行いましたか?
WebBrowserにしろ、IEにしろ、pdfが別画面で開いたということは、そのpdfのキャッシュが保存されていると思いますので、
そのキャッシュファイルを持ってくることでpdfファイルを得ることができる可能性はあります。
キャッシュからのファイルを見つけてくる方法として、以下が参考になるかもしれませんが、
これは.netのもので、しかもある程度Windows APIの理解が必要になりますので、ハードルが高いように思います。
(しかも中国語のサイトです)

http://www.4ucode.com/Study/Topic/1566138

ただし、この方法でも、IEでpdfのページが別ウィンドウで開くことは免れません。
(WebBrowserを使ってNewWindow2イベントを捕捉できれば、ダミーのWebBrowserに表示させることでいけるかも知れないが未確認)
どちらにしろ、Webサーバーの設定のため、正攻法(pdfを直ダウンロード)は無理のようです。

編集 削除
キトキト  2013-03-05 16:43:56  No: 103419  IP: [192.*.*.*]

...と書いてしまいましたが、キャッシュを利用する場合であれば、このpdfが一時ファイルとして
キャッシュされているかどうかを確認する必要がありますね。

キャッシュのあるフォルダは、XPだと(WindowsシステムのあるドライブをC:ドライブとすると)デフォルトは以下のフォルダになります。

C:\Documents and Settings\ユーザー名\Local Settings\Temporary Internet Files

もし該当のpdfがここになければ、キャッシュを利用する方法は使えないですね。

編集 削除
nobu  2013-03-05 17:14:30  No: 103420  IP: [192.*.*.*]

キトキトさん、ありがとうございます。

VB6にてのWebBrowser上にURLを表示させて、希望pdfのリンクを
クリックすると言う操作を行いました。

pdfが一時ファイルとしてキャッシュされていますね。
今は自宅ではないのでVB6のテストが出来ませんが帰宅後に
キャッシュのあるフォルダをサーチして  .pdf を探し希望フォルダにコピーするようにして見ます。

IEがその数だけ開いてしまいますが、これを自動削除する方法も探して見ます。

編集 削除
nobu  2013-03-06 08:31:53  No: 103421  IP: [192.*.*.*]

ありがとうございました。
下記の様に連続で取得しようとするとトップページのサイトにリダイレクトされて
しまう事もありますが、一応はキャッシュされてるPDFも取れましたので
「解決」とさせていただきます。


For i = 0 To 10
    WebBrowser1.Document.Links(i).Click
         DoEvents
         Sleep 5000
Next i

編集 削除