アプリ版:「スタンプのみでお礼する」機能のリリースについて

【やりたいこと】
VBAを使用してサイトにログインし、ログイン後のHTMLドキュメントを取得したい。


【条件】
・エクセル以外のソフトは使用せず、VBAのみを使用する(VBA内でjavascriptなどの記述はOK)
・IEなどブラウザも仕様しない


【教えてほしいこと】
上記やりたいことを上記条件でどのように記述するかをしりたいです。
※IEを操作する方法は知っています。


【試したコード】
自分が試したのは下記コードです。
myURLのところに「ログイン画面のURL」
myBodyのところに「member_username=ログイン名&password=パスワード」
をいれています。
member_usernameはログイン名を入れる要素のname名称
passwordはパスワードを入れる要素のname名称
です。

Sub Sample()
  Dim document As IHTMLDocument7
  Set document = myPost("POST", ログイン画面のURL, False, "member_username=ログイン名&password=パスワード")
  '→docuemtでログイン後のページのhtmlドキュメントを取得している想定
End Sub

Function myPost(myMethod As String, myURL As String, mySync As Boolean, myBody) As IHTMLDocument7
  
  Dim httpReq As Object
  Set httpReq = CreateObject("MSXML2.XMLHTTP")
  
  With httpReq
    .Open myMethod, myURL, mySync
    .setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    .send myBody
  End With
  
  Do While httpReq.readyState < 4
    Sleep 10
    DoEvents
  Loop
  
  With CreateObject("ADODB.Stream")
    .Open
    .Position = 0
    .Type = 1 'adTypeBinary
    .write httpReq.responseBody
    .Position = 0
    .Type = 2 'adTypeText
    .Charset = "UTF-8"
    Dim ReturnDom As IHTMLDocument7
    Set ReturnDom = New HTMLDocument
    ReturnDom.write .ReadText
    .Close
  End With
  
  Set PostDom2 = ReturnDom
  
  Set httpReq = Nothing
  Set ReturnDom = Nothing
End Function



【参考にしたサイト】
www.tohoho-web.com/ex/http.htm#request
http://outofmem.tumblr.com/post/63052619242/vbae …でhttp通信
http://piyopiyocs.blog115.fc2.com/blog-entry-433 …


【動作環境】
OS 名:Microsoft Windows 10 Pro
OS バージョン:10.0.16299 N/A ビルド 16299
OS 製造元:Microsoft Corporation
プロセッサ:Intel64 Family 6 Model 42 Stepping 7 GenuineIntel ~2400 Mhz
BIOS バージョン:TOSHIBA Version 2.20 , 2012/06/22
物理メモリの合計:3,988 MB
Excel バージョン:14.0.7192.5000(32ビット) Microsoft Office Standard 2010の一部

以上、よろしくお願いいたします。

A 回答 (4件)

以下のようなHTMLファイルでログインできますか?



<form action="https://login.mail.goo.ne.jp/id/authn/Login">
<input name="uname" value="***">
<input name="pass" value="****">
<input type="submit">
</form>
    • good
    • 0
この回答へのお礼

ありがとうございます!
いただいた例では私のユーザー名とパスワードでログイン後のドキュメント取得ができました!

しかし、あるサイトではこのようにaction=""となってるものもあります。
この場合の対応方法はおわかりでしょうか?
<form name="frm" onsubmit="disableSubmit(this);submit2(this)" action="" enctype="application/x-www-form-urlencoded" method="post">

お礼日時:2018/01/26 10:51

http://takezoe.hatenablog.com/entry/2017/09/08/1 …
この辺りの書籍をご覧になると、そんな単純な物ではない事が分かると思います。
(言語はVBAでなくて、Javaですが)
    • good
    • 1
この回答へのお礼

ご意見ありがとうございます。

お礼日時:2018/01/26 10:52

>   Set document = myPost("POST", ログイン画面のURL, False, "member_username=ログイン名&password=パスワード")



「ログイン画面のURL」 ではなく、
<form action=
のURLを指定する
    • good
    • 0
この回答へのお礼

ありがとうございます。
試してみました。

もともと
myURL="https://****.jp "
だったのを<form action=・・・・の
myURL="https://****.jp/login.pl "
に変更したところ、
帰ってきたdocument (outerHTML)は
<BODY>データがありません</BODY>
でした。
ログインされた後の画面にはなりませんでした。

同じことですが、念のため、
https://****.jp/login.pl
をブラウザの検索窓にいれて表示したところ、画面には「データがありません」と表示されるのみでした。

お礼日時:2018/01/24 00:41

>

http://piyopiyocs.blog115.fc2.com/blog-entry-433 …

にある .Status と .responsebody に期待したものが来るのでしょうか?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
いえ、機体したものがきません。
.statusはページの状態のようです。
.responsebodyがHTMLドキュメントのはずですが、httpReq.Open strMethod, strURL, bAsyncで指定しているstrURLの内容と同じです。
つまりログイン後のページではなく、ログイン前のページがかえってきます。

お礼日時:2018/01/23 22:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A