Skip to content
AutoHotKey
2011.02.11 23:24

Com_invoke to login

조회 수 10719 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄


Com_invoke to login


AutoHotkey Community Forum Index -> Ask for Help
View previous topic :: View next topic  
AuthorMessage
bacon117



Joined: 26 May 2010
Posts: 18

PostPosted: Thu Jun 03, 2010 8:54 pm    Post subject: Com_invoke to loginReply with quote

Hello erbody. 

Hopefully someone can help me with this. By studying tanks awesome com tutorial (http://www.autohotkey.com/forum/topic34972.html) I have learned a few things. 

I have figured out how to push the username and pw into the website, and I can click buttons on other websites, but I cannot figure out how to click the "Log in" button on my particular site. I can make it work with Focus-> {enter}, but I would like to leave the page hidden until it is logged in. Here is the DOM of http://www.covisint.com/web/guest/login-manufacturing : 
Code (Expand):
<LINK rel="stylesheet" type="text/css" href="/www-main-theme/css/portal_login.css" />
<SCRIPT type="text/javascript"> 
/*<![CDATA[*/jQuery(function(){var a="p_p_id_56_INSTANCE_q44R_";tmpFm=jQuery("form[name="+a+"tmpLogin]"),loginFm=jQuery("form[name="+a+"login]"),tmpUser=jQuery("input[name=user]",tmpFm),tmpPw=jQuery("input[name=password]",tmpFm),user=jQuery("input[name=user]",loginFm),pw=jQuery("input[name=password]",loginFm),time=jQuery("input[name=submitTime]",loginFm);tmpUser.focus();tmpFm.submit(function(c){if(tmpUser.val().length==0){alert("Please enter a User Name");tmpUser.focus()}else{if(tmpPw.val().length==0){alert("Please enter Password");tmpPw.focus()}else{user.val(tmpUser.val().toUpperCase());pw.val(tmpPw.val());time.val((new Date).getTime());var b=new Cookie("defaultLogin");b.industry="manufacturing";b.store(90,"/");loginFm.submit()}}return false})});/*]]>*/
</SCRIPT>
</P>
<FORM method="post" name="p_p_id_56_INSTANCE_q44R_login" action="https://us.sso.covisint.com/sso?cmd=LOGIN">
<INPUT type="hidden" name="auth_mode" value="basic" /><INPUT type="hidden" name="user" value="" /><INPUT type="hidden" name="password" value="" /><INPUT type="hidden" name="submitTime" value="" /> 
</FORM>
<DIV class="portalLogin">
<H2>
Secure Login
</H2>
<DIV class="portalLoginPanel">
<DIV class="portalLoginPanelContent">
<FORM name="p_p_id_56_INSTANCE_q44R_tmpLogin" jQuery1275595950703="9">
<FIELDSET>
<LEGEND>Manufacturing <SPAN>Login</SPAN></LEGEND>
<OL>
<LI>
<LABEL for="p_p_id_56_INSTANCE_q44R_user">User Name</LABEL> <INPUT id="p_p_id_56_INSTANCE_q44R_user" class="field" name="user" jQuery1275595950703="8" index="1" value="" />
</LI>
<LI>
<LABEL for="p_p_id_56_INSTANCE_q44R_password">Password</LABEL> <INPUT id="p_p_id_56_INSTANCE_q44R_password" class="field" type="password" name="password" index="2" value="" />
</LI>
<LI>
<LABEL>&nbsp;</LABEL> <INPUT class="loginButton" type="submit" index="3" value=" " />
</LI>
</OL>
</FIELDSET>
 
</FORM>
<!-- Manufacturing -->

Using this information, I have come up with these two entries to push the user name and PW to this site (both work): 
Code:
   COM_Invoke(itemq:=COM_Invoke(all1:=COM_Invoke(document:=COM_Invoke(pwb,"document"),"All"),"item","p_p_id_56_INSTANCE_q44R_user"),"value",covuser) 
   
   COM_Invoke(item62:=COM_Invoke(all2:=COM_Invoke(document:=COM_Invoke(pwb,"Document"),"All"),"item","p_p_id_56_INSTANCE_q44R_password"),"value",covpw) 
   

But now, how do I click the link. This seems to be the code for the button: 
<LABEL>&nbsp;</LABEL> <INPUT class="loginButton" type="submit" index="3" value=" " /> 
but there is no name or id for me to select and then "click". 

I have tried these with no luck: 


Code:
;1.)
COM_Invoke(itemsubmit:=COM_Invoke(all3:=COM_Invoke(document:=COM_Invoke(pwb,"Document"),"All"),"item","submit"),"submit") 

   
;2.)   ;COM_Invoke(document, "p_p_id_56_INSTANCE_q44R_tmpLogin", "click")



;3.)
;   pbuttons := COM_Invoke(document, "getElementsByTagName", "submit") 
;   ; use loop to find the right button ->pbutton 
;     COM_Invoke(pbutton, "click")
;   
;4.)
;   COM_Invoke(itemsubmit:=COM_Invoke(all3:=COM_Invoke(document:=COM_Invoke(pwb,"Document"),"All"),"getElementsbytagname","submit"),"click") 


Any ides or other clarification?
Back to top
View user's profile Send private message 
bacon117



Joined: 26 May 2010
Posts: 18

PostPosted: Thu Jun 03, 2010 9:20 pm    Post subject:Reply with quote

I have had some moderate sucess using the name of the input form. But when I run the script, it submits nothing to the website, and I get "invalid user name or password": 

Code:
COM_Invoke(itemsubmit:=COM_Invoke(all3:=COM_Invoke(document:=COM_Invoke(pwb,"Document"),"All"),"item","p_p_id_56_INSTANCE_q44R_Login"),"submit")


Again, here is the code of the form: 

Code (Expand):
link href="/www-main-theme/css/portal_login.css" type="text/css" rel="stylesheet" /><script type="text/javascript">/*<![CDATA[*/jQuery(function(){var a="p_p_id_56_INSTANCE_q44R_";tmpFm=jQuery("form[name="+a+"tmpLogin]"),loginFm=jQuery("form[name="+a+"login]"),tmpUser=jQuery("input[name=user]",tmpFm),tmpPw=jQuery("input[name=password]",tmpFm),user=jQuery("input[name=user]",loginFm),pw=jQuery("input[name=password]",loginFm),time=jQuery("input[name=submitTime]",loginFm);tmpUser.focus();tmpFm.submit(function(c){if(tmpUser.val().length==0){alert("Please enter a User Name");tmpUser.focus()}else{if(tmpPw.val().length==0){alert("Please enter Password");tmpPw.focus()}else{user.val(tmpUser.val().toUpperCase());pw.val(tmpPw.val());time.val((new Date).getTime());var b=new Cookie("defaultLogin");b.industry="manufacturing";b.store(90,"/");loginFm.submit()}}return false})});/*]]>*/</script></p>
<form method="POST" action="https://us.sso.covisint.com/sso?cmd=LOGIN" name="p_p_id_56_INSTANCE_q44R_login">
    <input type="hidden" value="basic" name="auth_mode" /><input type="hidden" name="user" /><input type="hidden" name="password" /><input type="hidden" value="" name="submitTime" />
</form><div class="portalLogin">
<h2>Secure Login</h2>
<div class="portalLoginPanel">
<div class="portalLoginPanelContent">
<form name="p_p_id_56_INSTANCE_q44R_tmpLogin">
    <fieldset>                     <legend>Manufacturing <span>Login</span></legend>
    <ol>
        <li><label for="p_p_id_56_INSTANCE_q44R_user">User Name</label>                             <input type="text" index="1" name="user" id="p_p_id_56_INSTANCE_q44R_user" class="field" /></li><li><label for="p_p_id_56_INSTANCE_q44R_password">Password</label>                             <input type="password" index="2" name="password" id="p_p_id_56_INSTANCE_q44R_password" class="field" /></li><li><label> </label>                             <input type="submit" index="3" value=" " class="loginButton" /></li></ol>
    </fieldset>
</form><!-- Manufacturing -->
Back to top
View user's profile Send private message 
sinkfaze



Joined: 18 Mar 2008
Posts: 3612
Location: the tunnel(?=light)

PostPosted: Thu Jun 03, 2010 10:30 pm    Post subject:Reply with quote

tank's tutorials are a little dated, as the syntax for using COM has been greatly simplified by using the "dotted path": 

Code:
COM_Invoke(itemq:=COM_Invoke(all1:=COM_Invoke(document:=COM_Invoke(pwb,"document"),"All"),"item","p_p_id_56_INSTANCE_q44R_user"),"value",covuser) ; <~ old method

COM_Invoke(pwb,"document.all.item[p_p_id_56_INSTANCE_q44R_user].value",covuser) ; <~ new method
    
COM_Invoke(item62:=COM_Invoke(all2:=COM_Invoke(document:=COM_Invoke(pwb,"Document"),"All"),"item","p_p_id_56_INSTANCE_q44R_password"),"value",covpw) ; <~ old method

COM_Invoke(pwb,"document.all.item[
p_p_id_56_INSTANCE_q44R_password].value",covpw) ; <~ new method


Using that will cut down on a great deal of confusion for you and for others trying to assist you. But alas, I digress... 

You could of course submit the form directly, but the key to making the button work is to find out information about your button: 

Code:
<input type="submit" index="3" value=" " class="loginButton" />


You'll notice that the button doesn't have anything readily identifiable for it like a name or id, which will allow us the easiest access to it. The next easiest thing to do will be to determine how many buttons are on the page. We can't immediately distinguish buttons but we can distinguish how many page elements with its root HTML tag 'input' exist by using the length collection: 

Code:
COM_Invoke(pwb,"document.all.tags[input].length")


Saving the result of that function call to a variable will tell you how many elements with the input tag are on the page: 

Code:
p := COM_Invoke(pwb,"document.all.tags[input].length")
MsgBox, %p% input elements.


This is valuable information because we can now create a loop that will only run for as many input elements as there are on the page. But what do we look for? We know this particular input element's type is submit: 

Code:
<input type="submit" index="3" value=" " class="loginButton" />


So that's how we'll look for it, look at only input elements whose type is submit: 

Code:
p := COM_Invoke(pwb,"document.all.tags[input].length")
Loop %p%
{
  t := COM_Invoke(pwb,"document.all.tags[input].item[" A_Index-1 "].type") ; item collections are zero-based indices (first item is item 0, second is 1, etc.)
. . .


The problem is that there may be multiple input items of type 'submit', so what else can uniquely match our button? The next likely suspect is the class: 

Code:
<input type="submit" index="3" value=" " class="loginButton" />


Now the class is kind of tricky because there is no class property of an item per se, but a className property: 

Code:
p := COM_Invoke(pwb,"document.all.tags[input].length")
Loop %p%
{
  c := COM_Invoke(pwb,"document.all.tags[input].item[" A_Index-1 "].className")
. . .


So now we have two items which should reasonably identify our button, so we just have to use the loop to search for them! 

Code:
p := COM_Invoke(pwb,"document.all.tags[input].length")
Loop %p%
{
  t := COM_Invoke(pwb,"document.all.tags[input].item[" A_Index-1 "].type") 
  c := COM_Invoke(pwb,"document.all.tags[input].item[" A_Index-1 "].className")
  if (t="submit") AND (c="loginButton") { ; if both things about the input element match
    COM_Invoke(pwb,"document.all.tags[input].item[" A_Index-1 "].click") ; click on the element
    break ; and break the loop
  }
}


Having worked with COM in this way for a while I write it slightly differently: 

Code:
Loop %   COM_Invoke(pwb,"document.all.tags[input].length") {
   if   (COM_Invoke(pwb,"document.all.tags[input].item[" A_Index-1 "].type")="submit")
    &&   (COM_Invoke(pwb,"document.all.tags[input].item[" A_Index-1 "].className")="loginButton") {
      COM_Invoke(pwb,"document.all.tags[input].item[" A_Index-1 "].click")
      break
   }
}


HTH
_________________
Try Quick Search for Autohotkey or see the tutorial for newbies.
Back to top
View user's profile Send private message 
bacon117



Joined: 26 May 2010
Posts: 18

PostPosted: Fri Jun 04, 2010 11:59 pm    Post subject:Reply with quote

Thank you very much, your post is very easy for me to understand, but more importantly, it works. Smile 

sinkfaze wrote:
You could of course submit the form directly,


How do I submit the form directly? The website runs a Java code locally that sanitizes the inputs (makes sure the fields are not blank), capitalizes the username, and then also submits a "SubmitTime" with the current date and time to the server. It may do other things that I don't understand. This code is the reason I wanted to click the button in the first place 

How do I submit the form directly and bypass this code? 

BTW, here is the code I refer to, I suspect it has something to do with the *loginFm.submit()* at the bottom, but i'm not sure how to use it: 

Code:
<SCRIPT type="text/javascript"> 
/*<![CDATA[*/jQuery(function(){var a="p_p_id_56_INSTANCE_q44R_";tmpFm=jQuery("form[name="+a+"tmpLogin]"),loginFm=jQuery("form[name="+a+"login]"),tmpUser=jQuery("input[name=user]",tmpFm),tmpPw=jQuery("input[name=password]",tmpFm),user=jQuery("input[name=user]",loginFm),pw=jQuery("input[name=password]",loginFm),time=jQuery("input[name=submitTime]",loginFm);tmpUser.focus();tmpFm.submit(function(c){if(tmpUser.val().length==0){alert("Please enter a User Name");tmpUser.focus()}else{if(tmpPw.val().length==0){alert("Please enter Password");tmpPw.focus()}else{user.val(tmpUser.val().toUpperCase());pw.val(tmpPw.val());time.val((new Date).getTime());var b=new Cookie("defaultLogin");b.industry="manufacturing";b.store(90,"/");loginFm.submit()}}return false})});/*]]>*/
</SCRIPT>
Back to top
View user's profile Send private message 


















로그인 후 댓글쓰기가 가능합니다.

?

List of Articles
번호 분류 제목 날짜 조회 수
537 컴퓨터잡담 MYSQL 설정에 관한 조언 2 2012.02.04 4609
536 컴퓨터잡담 HMail Server 4.4.1 설치하기 2 2012.02.06 6911
535 Excel MS Office 2007 Excel 최근 문서 목록 삭제하기 1 2012.02.13 22254
534 Excel 최근문서 지우기 file 2012.02.13 9964
533 컴퓨터잡담 부팅시 출력되는 메시지가 너무 빨리 지나가 볼수가 없때 2012.02.14 4430
532 AutoHotKey Autohotkey) Find WM_COMMAND parameter with Winspector 17 2012.02.22 35919
531 AutoHotKey autohotkey) WinSpector spy를 이용한 post,sendmessage Control ID 추출하기 3 file 2012.02.22 10921
530 컴퓨터잡담 16진수 헥사, 2진수, 10진수, 8진법 변환 계산기; Hex Calc 2012.02.22 7934
529 AutoHotKey autohotkey) postmessage mouse control 13 2012.02.22 28653
528 Excel 엑셀) 배열 2 2012.02.23 8392
527 컴퓨터잡담 인터넷 익스플러러 속도 향샹을 위한 팁 1 file 2012.02.25 24577
526 컴퓨터잡담 XE) 관리자모드 업데이트가 안되는 이유 file 2012.02.28 5146
525 컴퓨터잡담 윈도우7 인터넷 속도 제한 해제(윈도우7 QOS 설정) 30 2012.02.29 20015
524 컴퓨터잡담 탐색기 다른 이름으로 저장하기 저장위치 즐겨찾기 폴더 변경하기 2 file 2012.03.02 5298
523 Excel 엑셀) 피벗테이블 원본데이터 영역범위 수정방법 1 2 file 2012.03.06 25198
522 AutoHotKey autohotkey) 윈도우 ahk_id 추출하기 2 2012.03.06 30118
521 컴퓨터잡담 IGMP, IGMP Snooping Internet Group Management Protocol 인터넷 그룹 관리 프로토콜 2 2012.03.07 7296
520 Excel [엑셀] 소수점 정수만들기 .. 반올림 올림 내림 3 2012.03.08 16695
519 컴퓨터잡담 윈도우 XP에서 메모리를 시스템 캐시로 설정하는 방법 file 2012.03.08 4956
518 컴퓨터잡담 safeout.exe 프로세스 삭제하기 3 2012.03.12 13039
Board Pagination Prev 1 ... 18 19 20 21 22 ... 46 Next
/ 46

http://urin79.com

우린친구블로그

sketchbook5, 스케치북5

sketchbook5, 스케치북5

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소