5

A challenge to all you AutoHotKey masters:

Give us a function that will Find and Move the Cursor to an Input Field (E.g. LoginName) and, alternatively send input text. For the old, lazy hackers like myself just fiddling with AHK, it would look like this:

FindFillField(*elementid*,*sendtext*,*alt-text*)

Where elementid is the HTML id for the field, e.g. USERNAME, where sendtext is the text to fill and where alt-text could be additional, specific text to help identify the fields.

Additional, optional parameters are always helpful to round out odd cases so let your imaginations run wild!

For old-timers like me, and for anyone, this would be a blessing in creating simple login macros.

Stevoisiak
  • 23,794
  • 27
  • 122
  • 225
user478094
  • 87
  • 2
  • 3
  • These may be helpful: [Example of Navigating a Website](https://autohotkey.com/board/topic/39048-example-of-navigating-a-website/) and [search a button on a web page and click on it?](https://autohotkey.com/board/topic/122175-search-a-button-on-a-web-page-and-click-on-it/) – Stevoisiak Aug 25 '17 at 16:10

2 Answers2

3

You can always use the {TAB} option. Open the website and hit the TAB key until you reach the input field and count how many times you hit it. Then do Send {TAB ##}. I used the below to put in First name, middle name, last name, and 2 other id into a web form. The variables were entered into a GUI form that was created.

Send {TAB 41}
Send %firstn%
Send {TAB}
Send %middle%
Send {TAB}
Send %lastn%
Send {TAB}
Send %deas%
Send {TAB}
Send %npis%
Send {TAB 3}
Send {N}
Send {TAB 2}
Send {ENTER}
ehepler84
  • 31
  • 2
3

You can send text to an input field with the following code:

wb.document.getElementById("login-username").value := "myUserName"

Where wb is the COM object, login-username is the ID of the input field, and myUserName is what you wish to input.

Insted of ID, you can also find the input field by name getElementsByName(...), tag name getElementsByTagName(...) or class name getElementsByClassName(...). I've found this tutorial to be useful. Use Chrome or Firefox to find out how to identify the input field (rightclick and press "inspect element").

If you want to move the cursor to the input field, use

wb.document.getElementById("login-username").focus()

Here is a full example, using IE and the Stack Overflow login page:

; Create IE instance
wb := ComObjCreate("InternetExplorer.Application")
wb.Visible := True
wb.Navigate("https://stackoverflow.com/users/login")
; Wait for page to load:
While wb.Busy or wb.ReadyState != 4
    Sleep, 100
; Press "Log in using Stack Exchange"
wb.document.getElementById("se-signup-legend").click()
While wb.Busy or wb.ReadyState != 4
    Sleep, 100
; EITHER focus on the input field:
wb.document.getElementsByName("email")[0].focus()
; OR send text directly to the field:
wb.document.getElementsByName("email")[0].value := "my@email.com"
eirki
  • 61
  • 3