ExcelVBA에서 IE에서 사용자 ID와 비밀번호를 입력하고 로그인합니다.
Excel에 이런 느낌으로 사용자 이름/비밀번호가 쓰여 있고,
로그인 버튼으로 IE에서 connpass에 로그인하는 VBA를 만들었습니다.
※시트명은 「로그인 정보」
완성판 VBA 소스 코드
만든 VBA는 다음과 같습니다.
Sub login()
Dim objIE As InternetExplorer 'IEオブジェクトを準備
Set objIE = CreateObject("Internetexplorer.Application") '新しいIEオブジェクトを作成してセット
objIE.Visible = True 'IEを表示
Dim strUrl As String '次ページのURL
strUrl = "https://connpass.com/login/"
objIE.navigate strUrl 'IEでURLを開く
Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE '読み込み待ち
DoEvents
Loop
Dim strUsername As String
strUsername = Worksheets("ログイン情報").Range("C3").Value
Dim strPassword As String
strPassword = Worksheets("ログイン情報").Range("C4").Value
Dim htmlDoc As HTMLDocument 'HTMLドキュメントオブジェクトを準備
Set htmlDoc = objIE.document 'objIEで読み込まれているHTMLドキュメントをセット
htmlDoc.getElementsByName("username")(0).Value = strUsername 'name="username"にユーザー名を入力
htmlDoc.getElementsByName("password")(0).Value = strPassword 'name="password"にパスワードを入力
htmlDoc.getElementById("login_form").submit 'フォームの内容を送信
End Sub
대상 HTML은 다음과 같습니다.
<form action="/login/" method="post" id="login_form">
<h3 class="main_h3">connpassアカウントでログイン</h3>
<p class="em mb_smallest">ユーザー名、またはメールアドレス</p>
<p class="p text_center">
<input name="username" class="gray_form" type="text" value="">
</p>
<p class="em mb_smallest">パスワード</p>
<p class="p text_center">
<input name="password" class="gray_form" type="password">
</p>
<p class="p text_center"><button class="btn btn_default" type="submit">ログインする</button></p>
<input type="hidden" name="csrfmiddlewaretoken" value="g638HlpAm1I3B7qA9zSv8YpuYU8Tb6HE">
</form>
소스 코드 참고로 한 사이트는 이쪽
【엑셀 VBA로 IE 조작】 유저명과 패스워드를 입력해 로그인을 한다
↑상기 사이트는 getElementById 메소드로 취득하고 있었습니다만, Id가 없었기 때문에 이하를 참고로 getElementsByName 메소드로 취득했습니다
VBA에서 IE의 텍스트 상자에 값 입력
오류 비망록
사용자 정의 유형이 정의되지 않았습니다.
컴파일 오류
필요한 라이브러리가 로드되지 않는 오류처럼. 그래서 처음에는 IE를 열 수 없었습니다.
해결 방법: 코드 실행을 중지한 후 [도구] > [참조 설정]에서 필요한 라이브러리 파일을 선택합니다.
개체는 이 속성 또는 메서드를 지원하지 않습니다.
런타임 오류.
직역하면, 「그런 프로퍼티 or 메소드는 뭐야 w」라는 것 같다.
잘 살펴보면 'getElementByName'이 되어 s가 빠졌습니다.
해결책: 속성 및 메서드 검토
감상
이것은 패스워드를 그대로 Excel상에 직접 쓰고 있기 때문에, 이전의 기사와 같이 패스워드를 복자로 한 상태로부터 패스워드를 취득해, 로그인할 수 있도록(듯이) 하고 싶다.
그리고 yahoo 메일과 같이, 유저 ID 입력 후 패스워드 입력의 화면에 우울한 패턴으로도 로그인할 수 있도록 하고 싶다.
Reference
이 문제에 관하여(ExcelVBA에서 IE에서 사용자 ID와 비밀번호를 입력하고 로그인합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/salmonosushi/items/9ce79759de6aa3d422e0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Sub login()
Dim objIE As InternetExplorer 'IEオブジェクトを準備
Set objIE = CreateObject("Internetexplorer.Application") '新しいIEオブジェクトを作成してセット
objIE.Visible = True 'IEを表示
Dim strUrl As String '次ページのURL
strUrl = "https://connpass.com/login/"
objIE.navigate strUrl 'IEでURLを開く
Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE '読み込み待ち
DoEvents
Loop
Dim strUsername As String
strUsername = Worksheets("ログイン情報").Range("C3").Value
Dim strPassword As String
strPassword = Worksheets("ログイン情報").Range("C4").Value
Dim htmlDoc As HTMLDocument 'HTMLドキュメントオブジェクトを準備
Set htmlDoc = objIE.document 'objIEで読み込まれているHTMLドキュメントをセット
htmlDoc.getElementsByName("username")(0).Value = strUsername 'name="username"にユーザー名を入力
htmlDoc.getElementsByName("password")(0).Value = strPassword 'name="password"にパスワードを入力
htmlDoc.getElementById("login_form").submit 'フォームの内容を送信
End Sub
<form action="/login/" method="post" id="login_form">
<h3 class="main_h3">connpassアカウントでログイン</h3>
<p class="em mb_smallest">ユーザー名、またはメールアドレス</p>
<p class="p text_center">
<input name="username" class="gray_form" type="text" value="">
</p>
<p class="em mb_smallest">パスワード</p>
<p class="p text_center">
<input name="password" class="gray_form" type="password">
</p>
<p class="p text_center"><button class="btn btn_default" type="submit">ログインする</button></p>
<input type="hidden" name="csrfmiddlewaretoken" value="g638HlpAm1I3B7qA9zSv8YpuYU8Tb6HE">
</form>
사용자 정의 유형이 정의되지 않았습니다.
컴파일 오류
필요한 라이브러리가 로드되지 않는 오류처럼. 그래서 처음에는 IE를 열 수 없었습니다.
해결 방법: 코드 실행을 중지한 후 [도구] > [참조 설정]에서 필요한 라이브러리 파일을 선택합니다.
개체는 이 속성 또는 메서드를 지원하지 않습니다.
런타임 오류.
직역하면, 「그런 프로퍼티 or 메소드는 뭐야 w」라는 것 같다.
잘 살펴보면 'getElementByName'이 되어 s가 빠졌습니다.
해결책: 속성 및 메서드 검토
감상
이것은 패스워드를 그대로 Excel상에 직접 쓰고 있기 때문에, 이전의 기사와 같이 패스워드를 복자로 한 상태로부터 패스워드를 취득해, 로그인할 수 있도록(듯이) 하고 싶다.
그리고 yahoo 메일과 같이, 유저 ID 입력 후 패스워드 입력의 화면에 우울한 패턴으로도 로그인할 수 있도록 하고 싶다.
Reference
이 문제에 관하여(ExcelVBA에서 IE에서 사용자 ID와 비밀번호를 입력하고 로그인합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/salmonosushi/items/9ce79759de6aa3d422e0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(ExcelVBA에서 IE에서 사용자 ID와 비밀번호를 입력하고 로그인합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/salmonosushi/items/9ce79759de6aa3d422e0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)