Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


7001 / 13646 ツリー ←次へ | 前へ→

【41830】会員制サイトのダウンロードができないの... koma 06/8/23(水) 20:33 質問[未読]
【41831】Re:会員制サイトのダウンロードができない... マクロマン 06/8/23(水) 20:40 発言[未読]
【41832】Re:会員制サイトのダウンロードができない... かみちゃん 06/8/23(水) 20:42 発言[未読]
【41837】Re:会員制サイトのダウンロードができない... Kein 06/8/23(水) 22:20 発言[未読]
【41861】Re:会員制サイトのダウンロードができない... koma 06/8/24(木) 15:52 発言[未読]
【41867】Re:会員制サイトのダウンロードができない... koma 06/8/24(木) 17:34 発言[未読]

【41830】会員制サイトのダウンロードができないの...
質問  koma  - 06/8/23(水) 20:33 -

引用なし
パスワード
   とある会員制のサイトの中で、PDFファイルを大量にダウンロード
したい、と考えています。

手順として考えているのが
1 まず手動でログイン
2 ダウンロードすべきURL(*******.pdf)というリンク先を列挙
3 実際にダウンロード


この2まではできていて、後は3のみなのですが、試してだめだったのは
下記のURLDownloadToFileを使うやり方→既に入力しているIDなどが
入力されていない状態と認識されています。(これは下記プログラムで
生成されたPDFの中身をtextにして読んで分かりました)

ちょっと違うのですが可能なのは、マクロでIEを新規に開いて、そこにリンク先を
入れてやって閲覧する事。でもこれはファイルの保存ではありません。

あと分かっているのは、手動でそのURLをIEに入れてやると、
 ログインするために開いたIE→正しく表示できる
 新規に開いたIE→そのURLを入れても、ログインが認識されていない
         のかアクセス不可


ということです。ダウンロードをするのに良い方法を教えて頂ければ
と思います。宜しく御願いします!


----------------------------
'URLDownloadToFile API from URLMON.
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

-----------------------------

Sub get_url_file(strURL As String, place As String)

  Dim strFNAME As String 'ダウンロード先(パス+ファイル名)
  Dim strWORK As String '後ろから/を探し、ファイル名を取り出す
  Dim returnValue
  Dim n As Integer

  'ファイル名を取り出す
  For n = Len(strURL) To 1 Step -1 '後ろから/を探す
    If Mid(strURL, n, 1) = "/" Then
      Exit For '/が見つかったらループを抜ける
    End If
  Next n
  strWORK = Mid(strURL, n + 1) '/の次からファイル名なのでn+1から
  
  'ファイル名を cells(z,2~4)とする
  z = Cells(1, 2)
  strFNAME = place & "\" & Cells(z, 2) & Cells(z, 3) & Cells(z, 4) & ".pdf"

  'URLDownloadToFile API をコールする
  returnValue = URLDownloadToFile(0, strURL, strFNAME, 0, 0)
  

End Sub

【41831】Re:会員制サイトのダウンロードができな...
発言  マクロマン  - 06/8/23(水) 20:40 -

引用なし
パスワード
   自動ログイン
でネット検索したらサンプルが見つかると思います。

ただ、サイトの管理者に確認を取ったほうがいいかも。
でないとセキュリテイ対策ではじかれたりするかも。

【41832】Re:会員制サイトのダウンロードができな...
発言  かみちゃん E-MAIL  - 06/8/23(水) 20:42 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>とある会員制のサイトの中で、PDFファイルを大量にダウンロード
>したい、と考えています。

手動ではファイル保存ができるのでしょうか?
あと、strURLの内容を教えていただかないと検証のしようもないですね。
もっとも、会員制サイトなら、会員IDなども必要でしょうから、せめてサイト名
くらい教えていただかないと、コメントはつきにくいのではないでしょうか?

【41837】Re:会員制サイトのダウンロードができな...
発言  Kein  - 06/8/23(水) 22:20 -

引用なし
パスワード
   >手動でそのURLをIEに入れてやるとログインするために開いたIE→正しく表示できる
>新規に開いたIE→そのURLを入れても、ログインが認識されていないのかアクセス不可
つまり、ログインするためのIDなりパスワードを入力する "窓" があるサイトは
マクロで開くことができる。しかしログイン後のURLを、直接 IE の Navigate に
渡しても、セキュリティでブロックされてしまう。
ということでしょーか ? それなら窓があるサイトを開いて、IEメニューの
「表示」「ソース」を選択して

input type="text" name="×××" value="○○○"

などのタグを探してみて下さい。
それが入力用の窓であれば、IEのインスタンスに対して例えば

With IE
  'ここへ窓のあるサイトを開くコードを書く
  With .Document
   .All("×××").Value = パスワード等の文字列
   .Forms(0).Submit
  End With
  Do While .Busy: Loop
  Do Until .ReadyState = 4: Loop
End With

などとして、ログインした先のサイトに入れるはずです。
それから・・
>マクロでIEを新規に開いて、そこにリンク先を入れてやって閲覧する
が出来るなら、SendKeys "^(a)", True で全文を選択状態にし、
Application.Wait Time + TimeValue("00:00:01") とインターバル
を入れてから SendKeys "^(c)", True でコピー。これでクリップ
ボードに全文の文字列が入りますから、あとは DataObject なんかを使って

Dim MyData As DataObject
Dim GetSt As String, MyF As String

Set MyData = New DataObject
MyData.GetFromClipboard
GetSt = MyData.GetText(1)
With Application
  .CutCopyMode = False
  MyF = .DefaultFilePath & "\MyPDF.txt"
End With
Open MyF For Output Access Write As #1
Print #1, GetSt
Close #1
Set MyData = Nothing

などとテキストファイルに落として保存すれば良いかと思います。

【41861】Re:会員制サイトのダウンロードができな...
発言  koma  - 06/8/24(木) 15:52 -

引用なし
パスワード
   皆さんどうもありがとうございます。また、返事が遅れて申し訳ありません。

方針を転換して、
 1 自動ログイン
 2 自動URL列挙
 3 自動ダウンロード

で、いこうと考えたのですが、今は1.5くらいのところでまごついています。
ログイン後、URLのあるサイトにたどり着くまでに、チェックボックスを
選択したり、クリックしたりするのですが、問題は、URLのあるサイトに
いくための最後のクリックを行っても、手動で行っているときのように
新規にIEが立ち上がらず、サイトが開かないのです。
    .All.namedItem("Submit").Value = "ここをクリックすれば良い"
    .All.namedItem("Submit").Click
などとやって、クリックすべきボタンは目視で確認しており合っているはず
ですし、その後、リロードして、同じところをクリックすればIEがちゃんと
立ち上がるのですが、これはどのように解決すれば良いものでしょうか?

サイトを書き込むことができれば一番良いとは思うのですが、業務用の
サイトなので、外部には書くことはできないのです。

宜しく御願いします。

【41867】Re:会員制サイトのダウンロードができな...
発言  koma  - 06/8/24(木) 17:34 -

引用なし
パスワード
   自己レスです


>問題は、URLのあるサイトに
>いくための最後のクリックを行っても、手動で行っているときのように
>新規にIEが立ち上がらず、サイトが開かないのです。

これはポップアップを許可していなかっただけ、という単純な問題だと
分かって、解決できました。でも、次に、開いたIEをコントロールするには
どうすればよいか、という問題が出てきました、、、
またいろいろ試してみます

7001 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free