[ahk_l] 섬세한 인터넷 자동검색
;AHK_L에서는 제대로 입력이 되네요.
;(AHK_L Unicode Build v1.0.92.02 + Win 7 SP1 + IE 9 RC)
ie := ComObjCreate("InternetExplorer.Application")
ie.Visible := True
ie.Navigate("http://www.google.co.kr/")
While ie.Busy()
Sleep, 50
MsgBox, 로드 완료`n`n폼에 문자를 입력합니다.
form := ie.document.GetElementsByTagName("FORM")[0]
form.q.value := "0987654321"
MsgBox, 폼 송신 완료
form.submit()
While ie.Busy()
Sleep, 50
MsgBox, 검색결과가 표시되었습니다.`n`n종료합니다.
form:=""
ie.Quit() ; 종료시키지 않으면 iexplore.exe 프로세스가 남으므로 주의
return
참고주소 및 소스 : http://www.autohotkey.com/forum/topic51020.html
In the image above, note the document object - you will be using this object quite often. To access the Webpage, you will need to navigate through the HTML DOM. Here are some simple ways to do this:
- Object Name & Index
Say you want to get the value of the 1st element in the 1st form, which will be the Search for Keywords Input Box. The path would look like this (a collection of objects starts at 0):
Now if you want to show the value of the element in a pop-up, simply put this javascript in your URL Address bar and hit enter:Code: document.forms[0].elements[0].valueCode: javascript: alert(document.forms[0].elements[0].value)
MsgBox % pwb.document.forms[0].elements[0].value
MsgBox % COM_Invoke(pwb, "document.forms[0].elements[0].value") - Object's Name / ID Attribute
You can also use the objects name or ID. For example, the 1st forms name is SearchForm, with its 1st elements name being search_keywords. The following javascript fed throught the address bar would produce the same results:
Or if you only know the elements name is search_keywords, you could display the value of that element using all, which references all the elements on the webpage:Code: javascript: alert(document.SearchForm.search_keywords.value)
MsgBox % pwb.document.SearchForm.search_keywords.value
MsgBox % COM_Invoke(pwb, "document.SearchForm.search_keywords.value")Code: javascript: alert(document.all.search_keywords.value)
MsgBox % pwb.document.all.search_keywords.value
MsgBox % COM_Invoke(pwb, "document.all.search_keywords.value") - getElement Methods
If you want to get an element(s) based on limited criteria, you can use the following 3 methods:- getElementById(id) - returns a reference to the first object with the specified ID
- getElementsByName(name) - Returns a collection of objects with the specified name
- getElementsByTagName(tagname) - Returns a collection of objects with the specified tagname
(Note - the item number may be dynamic)Code: javascript: alert(document.getElementsByTagName('input')[3].value)
MsgBox % pwb.document.getElementsByTagName("input")[3].value
MsgBox % COM_Invoke(pwb, "document.getElementsByTagName[input].item[3].value") - getElementById(id) - returns a reference to the first object with the specified ID
Controlling the WebPage
So far we have just retrieved information from the webpage. Now lets start controlling the webpage. Note - if the JavaScript doesn't end with a Method, use void 0.
- Focus on a Webpage Element - focus()
Sets the focus to the Search for Keywords Input Box:Code: javascript: document.all.search_keywords.focus()
pwb.document.all.search_keywords.focus()
COM_Invoke(pwb, "document.all.search_keywords.focus") - Click on a Webpage Element - click()
Clicks the Search button:Code: javascript: document.getElementsByTagName('input')[11].click()
pwb.document.getElementsByTagName("input")[11].click()
COM_Invoke(pwb, "document.getElementsByTagName[input].item[11].click") - Set Value of an Input Field - value
Sets the value of the Search for Keywords Input Box:Code: javascript: document.all.search_keywords.value = 'Input Value'; void 0
pwb.document.all.search_keywords.value := "Input Value"
COM_Invoke(pwb, "document.all.search_keywords.value", "Input Value") - Dropdown Box Selection - selectedIndex
This is the HTML for the Sort By Dropdown. The following will set the Dropdown to Author:Quote: <SELECT class=post name=sort_by><OPTION selected value=0>Post Time</OPTION><OPTION value=1>Post Subject</OPTION><OPTIONvalue=2>Topic Title</OPTION><OPTION value=3>Author</OPTION><OPTION value=4>Forum</OPTION></SELECT> Code: javascript: document.all.sort_by.selectedIndex = 3; void 0 ; Note - you could use value = 3
pwb.document.all.sort_by.selectedIndex := 3
COM_Invoke(pwb, "document.all.sort_by.selectedIndex", 3) - Radio / Checkbox Selection - checked
This is the HTML for the Sort By Radio selection. The following will set the Radio to Ascending:Quote: <INPUT value=ASC type=radio name=sort_dir> Ascending<BR><INPUT value=DESC CHECKED type=radio name=sort_dir> Descending Code: javascript: document.all.sort_dir[0].checked = true; void 0
pwb.document.all.sort_dir[0].checked := True
COM_Invoke(pwb, "document.all.sort_dir[0].checked", True) - Get Text from a WebPage Element - innerText
Say you want to get the text at the top of the page (innerHTML will give you all the HTML):
... or if you want all the text (or html) from the page:Code: text := pwb.document.getElementsByTagName("TD")[2].innerText
text := COM_Invoke(pwb, "document.getElementsByTagName[TD].item[2].innerText")Code: text := pwb.document.documentElement.innerText
text := COM_Invoke(pwb, "document.documentElement.innerText")
There you have it! These techniques should help get you started. Next, I would recommend the following:
- Try these Controls out on some of your favorite webpages.
- Find some more JavaScript examples, and then try "translating" them to COM. (JavaScript is well documented online)
- Learn additional ways to access the HTML DOM.