본문 바로가기

파워쉘

[파워쉘] IE UI 자동화 도구 만들기


파워쉘을 이용하여 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>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

<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를 이용해서 가져왔을 때 이를 처리하는 방안.