파워쉘을 이용하여 IE UI 자동화 기능에 대해 들어본 적이 있었다.
그러나 이렇게 자동화 처리를 하는 것인지는 꿈에도 생각하지 못 했다.
이거는 뭐 브라우저 상에서 오토 돌리는 것 하고 완전히 동일한 수준이다.
향후 플래시나 실버라이트 기반까지 지원된다면 더 좋겠지만 요새 추세가 자바스크립트로 다 만드는 것이라,
앞으로 이 기능은 여러모로 쓸모가 있어 보인다.
특히 웹 게임 쪽으로.. 흐흐흐..
일단 먼저 ps 소스부터..
(원래 접속하려던 사이트 주소는 mo-site.kr로 대체하였다.)
$ua = "User-Agent:Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25"+[char]10+[char]13
$ie = New-Object -com internetexplorer.application
$ie.Navigate2('http://mo-site.kr/_reg_fast',0,0,0,$ua)
$ie.Visible = $true
$maxTimeout = 30
# ReadyState의 의미 - 0 : open()메서드 수행전, 1 : 로딩중, 2 : 로딩완료, 3 : 서버처리중, 4 : 서버처리끝
# 페이지가 전체 로딩이 완료되거나 최대 $maxTimeout 동안 대기한다.
while($ie.ReadyState -lt 4 -or $maxTimeout -lt 0)
{
echo 'page loading...'
Start-sleep -milliseconds 1000
$maxTimeout--
}
echo 'page loading is done..!'
#
# form에서 sex가 라디오 버튼으로 되어있다.
# form 작성 시 $ie.Document.getElementById('sex').value = '1' 처럼 직접 값을 입력해 주어도 되지만
# 이 경우 화면에서 라디오 버튼을 선택한 것이 보이지 않는다.
# 그래서 아래와 같은 방식으로 직접 클릭 이벤트를 날려서 라디오 버튼이 선택되도록 한다.
#
$ie.Document.getElementsByTagName('input') | %{ if($_.type -match 'radio' -and $_.value -match '1'){ $_.click() } }
$ie.Document.getElementById('by').value = '1988'
$ie.Document.getElementById('bm').value = '11'
$ie.Document.getElementById('bd').value = '11'
$ie.Document.getElementById('email').value = 'seoddong@tistory.com'
$ie.Document.getElementById('pass').value = 'qlalfqjsgh'
#
# 왜 이렇게 해야 하는지 아직도 이해가 잘 되지 않는다.
# $form = $ie.Document.getElementsByTagName('form')
# $form.submit()
# 이런 식의 접근은 불가능했다.
#
#$ie.Document.getElementsByTagName('form') | %{ $_.submit() }
아래는 Form 소스
Form에 id가 없어서 getElementsByTagName을 이용해야만 했다.
<form action="/_reg_fast_exec" method="post">
<ul class="searchBlock">
<li>
<span class="widthTxt">성별</span>
<span class="widthInput">
<label><input type="radio" name="sex" value="1" >남자</label>
<label><input type="radio" name="sex" value="2">여자</label></span>
</li>
<li>
<span class="widthTxt">생년월일</span>
<span class="widthInput">
<input type="tel" name="by" value="" style="width: 45px;">년
<select name="bm" style="width: 50px;">
<option value="01" >01</option>
...반복 생략...
<option value="12" >12</option>
</select>월
<select name="bd" style="width: 50px;">
<option value="01" >01</option>
...반복 생략...
<option value="31" >31</option>
</select>일<br>
</span>
</li>
<input type="hidden" name="nn" value="wVs41467">
<li>
<span class="widthTxt">메일주소</span>
<span class="widthInput">
<input type="email" name="email" value=""></span>
</li>
<li>
<span class="widthTxt">비밀번호</span>
<span class="widthInput">
<input type="text" name="pass" value="" placeholder="8~20자의 영문 및 숫자" autocapitalize="off" autocorrect="off" autocomplete="off" style="height:24px;margin:2px 0;"></span>
</li>
<li>
</li>
</ul>
<span class="caution">※타인이 추측하기 쉬운 비밀번호는 사용하지 마십시오.</span><br/>
<span><a href="/kiyaku/index.html">회원 약관(필독)</a>과 <a href="/kiyaku/ppolicy.html">개인정보취급방침</a>에 동의후 가입하십시오.</span>
<input type="hidden" name="intro" value="잘 부탁해">
<input type="hidden" name="chk" value="zOWFhulw">
<input type="submit" name="exec" class="bt_l orange" value="위 내용에 동의 후 가입" />
</form>
향후 과제:
여러개의 Form이나 기타 태그를 getElementsByTagName를 이용해서 가져왔을 때 이를 처리하는 방안.