Jump to content



Photo

Using IE.au3


  • Please log in to reply
10 replies to this topic

#1 Crazyace

Crazyace

    Wayfarer

  • Active Members
  • Pip
  • 55 posts

Posted 30 April 2012 - 03:05 PM

Hello everyone,

I need some guidance on how to best use the IE.au3 to do the following task. I have a gui built and ready to go, I just need to finish the COM coding.

Here is the code that I have so far.

AutoIt         
#include <GUIConstants.au3> #include <IE.au3> GUICreate("Drivers/Manuals/Warranty", 280, 110) $Driver = GUICtrlCreateCheckbox("Drivers", 10, 10) GUICtrlSetState(-1, $GUI_CHECKED) $Manual = GUICtrlCreateCheckbox("Manual", 80, 10) $Warranty = GUICtrlCreateCheckbox("Warranty", 150, 10) GUICtrlCreateLabel("Service Tag #:", 10, 45) $Input = GUICtrlCreateInput("", 90, 40) $Submit = GUICtrlCreateButton("Submit", 40, 70, 50) $Exit = GUICtrlCreateButton("Cancel", 150, 70, 50) GUISetState(@SW_SHOW) While 1     $msg = GUIGetMsg()     Select         Case $msg = $GUI_EVENT_CLOSE             ExitLoop         Case $msg = $Submit             $serv_tag = GUICtrlRead($Input)             If IsChecked($Driver) Then _Fire($serv_tag)         Case $msg = $Exit             ExitLoop     EndSelect WEnd Exit 0 Func _Fire($sServiceTag)    $oIE = _IECreate("http://www.dell.com/support/drivers/us/en/04/DriversHome/NeedProductSelection",1 ,1 ,0)    _IELoadWait($oIE) EndFunc Func _Fire2($sServiceTag)    $oIE = _IECreate("" & $sServiceTag, 1, 1, 0) Func IsChecked($control)     Return BitAnd(GUICtrlRead($control),$GUI_CHECKED) = $GUI_CHECKED EndFunc


When it navigates to the http://www.dell.com/support/drivers/us/en/04/DriversHome/NeedProductSelection URL we need to have the service tag box populated with the service tag that the user inputs. I have this working with AutoHotKey but I'm converting some scripts from AHK to AU3 and understand that the same COM commands will not work.

AHK Code
  url = http://www.dell.com/support/drivers/us/en/04/DriversHome/NeedProductSelection   pwb :=   ComObjCreate("InternetExplorer.Application")   ;navigates to the url   pwb.Navigate(url)   pwb.visible := true   While ((pwb.readyState <> 4) || pwb.busy)     ;Sleep, 10   frame :=   pwb.document.all["iFramePSHost"].contentWindow   frame.document.all["TheProductSelectorResultsModel_ServiceTagCode"].value := Tag   frame.document.all.btnSubmit[0].click()


So far I have replicated the code up until the frame start. I am able to navigate to the page and have it wait for it to load. Now I just need some help with using the right IE commands to complete the task of inserting the service tag and clicking submit.

Edited by Crazyace, 01 May 2012 - 11:50 AM.

"Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.""Never, ever, argue with an idiot. They'll drag you down to their level and beat you with experience"





#2 Crazyace

Crazyace

    Wayfarer

  • Active Members
  • Pip
  • 55 posts

Posted 01 May 2012 - 02:12 PM

Anyone have any tips they can give me on this that may help me out?
"Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.""Never, ever, argue with an idiot. They'll drag you down to their level and beat you with experience"

#3 Crazyace

Crazyace

    Wayfarer

  • Active Members
  • Pip
  • 55 posts

Posted 03 May 2012 - 06:23 PM

Anyone care to lend a hand with this?
"Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.""Never, ever, argue with an idiot. They'll drag you down to their level and beat you with experience"

#4 DaleHohm

DaleHohm

    Think of IE as an API...

  • MVPs
  • 5,889 posts

Posted 03 May 2012 - 07:18 PM

If I follow you, you need _IEFrameGetObjByName(), _IEGetObjById(), _IEFormElementSetValue() and _IEAction(xxx, "click")

Dale
IE.au3 issues with Vista - Workarounds, Automate input type=file (Related)SciTe Debug mode - it's magic: #AutoIt3Wrapper_run_debug_mode=YFree Internet Tools: DebugBar, AutoIt IE Builder, HTTP UDF, MODIV2, IE Developer Toolbar, IEDocMon, Fiddler, HTML Validator, WGet, curlMSDN docs: InternetExplorer Object, Document Object, Overviews and Tutorials, DHTML Objects, DHTML Events, WinHttpRequest, XmlHttpRequest, Cross-Frame Scripting, Office object model,Alternative to _IECreateEmbedded? better: _IECreatePseudoEmbeddedFind and harvest Enum constants for COM codeAutoIt Snippets Database - you too can contribute!Reproducer: a small (the smallest?) piece of stand-alone code that demonstrates your troubleDoesn't work needs to be ripped out of the troubleshooting lexicon. It means that what you tried did not produce the results you expected. It begs the questions 1) what did you try?, 2) what did you expect? and 3) what happened instead?

#5 Crazyace

Crazyace

    Wayfarer

  • Active Members
  • Pip
  • 55 posts

Posted 04 May 2012 - 12:07 AM

If I follow you, you need _IEFrameGetObjByName(), _IEGetObjById(), _IEFormElementSetValue() and _IEAction(xxx, "click")

Dale

That sounds right yes. Would you mind helping me build the code for that? Here is the code for my current app that would use that. In the code it will be the first _Fire() function.

AutoIt         
#region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Icon=..faviconBX.ico #AutoIt3Wrapper_Res_Comment=Beta #AutoIt3Wrapper_Res_Fileversion=3.0.0.0 #AutoIt3Wrapper_Res_requestedExecutionLevel=asInvoker #AutoIt3Wrapper_Run_Tidy=y #AutoIt3Wrapper_Run_Obfuscator=n #endregion ;**** Directives created by AutoIt3Wrapper_GUI **** #cs ---------------------------------------------------------------------------- AutoIt Version: 3.3.9.4 (beta) Author:      Crazyace Script Function: Allows you to look up your service tag, drivers, warranty and manual Script Version: Beta 1.3 #ce ---------------------------------------------------------------------------- ; Script Start - Add your code below here #include <GUIConstants.au3> #include <IE.au3> #include <Constants.au3> #include <file.au3> #include <string.au3> #include <array.au3> GUICreate("Dell Drivers/Manuals/Warranty", 296, 110) $Driver = GUICtrlCreateCheckbox("Drivers", 23, 10) GUICtrlSetState(-1, $GUI_CHECKED) $Manual = GUICtrlCreateCheckbox("Manual", 113, 10) $Warranty = GUICtrlCreateCheckbox("Warranty", 203, 10) GUICtrlCreateLabel("Service Tag #:", 21, 44) $Input = GUICtrlCreateInput("", 120, 40, 155) GUICtrlSetState(-1, $GUI_FOCUS) $Submit = GUICtrlCreateButton("Submit", 20, 70, 70) $Exit = GUICtrlCreateButton("Cancel", 110, 70, 70) $FTag = GUICtrlCreateButton("Your Tag", 200, 70, 75) Local $aAccelKeys[1][2] = [["{ENTER}", $Submit]] GUISetAccelerators($aAccelKeys) GUISetState(@SW_SHOW) While 1 $msg = GUIGetMsg() Select   Case $msg = $GUI_EVENT_CLOSE Or $msg = $Exit    ExitLoop   Case $msg = $Submit    $serv_tag = GUICtrlRead($Input)    If Not IsChecked($Driver) And Not IsChecked($Manual) And Not IsChecked($Warranty) Then     MsgBox(48, "Selection Error", "Pleaes make a selection first")    ElseIf Not StringRegExp($serv_tag, "^([a-zA-Z0-9]{4}|[a-zA-Z0-9]{6})[a-zA-Z0-9]$") Then     MsgBox(16, "Service Tag Error", "Service tag must be 5 or 7 alphanumeric characters with no spaces!")    Else     If IsChecked($Driver) Then _Fire($serv_tag)     If IsChecked($Manual) Then _Fire2($serv_tag)     If IsChecked($Warranty) Then _Fire3($serv_tag)     ExitLoop    EndIf   Case $msg = $FTag    _FindTag() EndSelect WEnd Exit 0 Func _Fire($sServiceTag) $oIE = _IECreate("http://www.dell.com/support/drivers/us/en/04/DriversHome/NeedProductSelection", 0, 1, 0) EndFunc   ;==>_Fire Func _Fire2($sServiceTag) $oIE = _IECreate("http://support.dell.com/support/topics/global.aspx/support/my_systems_info/manuals?c=us&l=en&s=biz&~ck=ln&lnki=0&ServiceTag=" & $sServiceTag, 0, 1, 0) EndFunc   ;==>_Fire2 Func _Fire3($sServiceTag) $oIE = _IECreate("http://support.dell.com/support/topics/global.aspx/support/my_systems_info/details?c=us&cs=555&l=en&s=biz&~ck=anavml&ServiceTag=" & $sServiceTag, 0, 1, 0) EndFunc   ;==>_Fire3 Func _FindTag() Local $pid = Run("wmic csproduct list brief", @SystemDir, @SW_HIDE, $STDOUT_CHILD) ;wmic isn't an internal command to CMD ProcessWaitClose($pid) ;better than loops $output = StdoutRead($pid) $tag = StringRegExpReplace($output, "(?s)^(?:.+?v+.+?h{2,})(.+?)h{2,}.*$", "$1" & @LF) If $tag = "" Then   MsgBox(16, "Access Denied", "Only the administrator group members can use WMIC.EXE" & @CR & @CR & "Reason:WIN32 Error: Access is Denied!") EndIf GUICtrlSetData($Input, $tag) EndFunc   ;==>_FindTag Func IsChecked($control) Return BitAND(GUICtrlRead($control), $GUI_CHECKED) = $GUI_CHECKED EndFunc   ;==>IsChecked

Edited by Crazyace, 04 May 2012 - 12:08 AM.

"Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.""Never, ever, argue with an idiot. They'll drag you down to their level and beat you with experience"

#6 DaleHohm

DaleHohm

    Think of IE as an API...

  • MVPs
  • 5,889 posts

Posted 04 May 2012 - 03:33 AM

Yep, happy to help. Write it for you, not so much. Take a shot at it, work trough some examples, search the forum for related code, post your attempt and explain where you're having issues and you'll get lots of help here.

Dale
IE.au3 issues with Vista - Workarounds, Automate input type=file (Related)SciTe Debug mode - it's magic: #AutoIt3Wrapper_run_debug_mode=YFree Internet Tools: DebugBar, AutoIt IE Builder, HTTP UDF, MODIV2, IE Developer Toolbar, IEDocMon, Fiddler, HTML Validator, WGet, curlMSDN docs: InternetExplorer Object, Document Object, Overviews and Tutorials, DHTML Objects, DHTML Events, WinHttpRequest, XmlHttpRequest, Cross-Frame Scripting, Office object model,Alternative to _IECreateEmbedded? better: _IECreatePseudoEmbeddedFind and harvest Enum constants for COM codeAutoIt Snippets Database - you too can contribute!Reproducer: a small (the smallest?) piece of stand-alone code that demonstrates your troubleDoesn't work needs to be ripped out of the troubleshooting lexicon. It means that what you tried did not produce the results you expected. It begs the questions 1) what did you try?, 2) what did you expect? and 3) what happened instead?

#7 Crazyace

Crazyace

    Wayfarer

  • Active Members
  • Pip
  • 55 posts

Posted 04 May 2012 - 11:54 AM

Yep, happy to help. Write it for you, not so much. Take a shot at it, work trough some examples, search the forum for related code, post your attempt and explain where you're having issues and you'll get lots of help here.

Dale


Thanks Dale for the support. Also I want to point out my poor wording. What I mean is just see an order of which _IE functions should be in. That way I have a lot more time to focus on getting the right info into the functions. I'm also going to guess that it may not have an order at all, and that it may just depend on what you're looking to do.

But with the ones that you listed before, should they go roughly in that order?
"Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.""Never, ever, argue with an idiot. They'll drag you down to their level and beat you with experience"

#8 DaleHohm

DaleHohm

    Think of IE as an API...

  • MVPs
  • 5,889 posts

Posted 04 May 2012 - 02:48 PM

> But with the ones that you listed before, should they go roughly in that order?

Yes
IE.au3 issues with Vista - Workarounds, Automate input type=file (Related)SciTe Debug mode - it's magic: #AutoIt3Wrapper_run_debug_mode=YFree Internet Tools: DebugBar, AutoIt IE Builder, HTTP UDF, MODIV2, IE Developer Toolbar, IEDocMon, Fiddler, HTML Validator, WGet, curlMSDN docs: InternetExplorer Object, Document Object, Overviews and Tutorials, DHTML Objects, DHTML Events, WinHttpRequest, XmlHttpRequest, Cross-Frame Scripting, Office object model,Alternative to _IECreateEmbedded? better: _IECreatePseudoEmbeddedFind and harvest Enum constants for COM codeAutoIt Snippets Database - you too can contribute!Reproducer: a small (the smallest?) piece of stand-alone code that demonstrates your troubleDoesn't work needs to be ripped out of the troubleshooting lexicon. It means that what you tried did not produce the results you expected. It begs the questions 1) what did you try?, 2) what did you expect? and 3) what happened instead?

#9 Crazyace

Crazyace

    Wayfarer

  • Active Members
  • Pip
  • 55 posts

Posted 07 May 2012 - 05:13 PM

Func _Fire($sServiceTag) $oIE = _IECreate("<a href='http://www.dell.com/support/drivers/us/en/04/DriversHome/NeedProductSelection' class='bbc_url' title='External link' rel='nofollow external'>http://www.dell.com/support/drivers/us/en/04/DriversHome/NeedProductSelection"</a>, 0, 1, 0) $oFrame = _IEFormGetObjByName($oIE, "iFramePSHost") $oID = _IEGetObjById($oFrame, "TheProductSelectorResultsModel_ServiceTagCode") _IEFormElementSetValue($oID, $sServiceTag) _IEAction() EndFunc   ;==>_Fire


Here is what I have so far but I think I'm way off base with this.
"Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.""Never, ever, argue with an idiot. They'll drag you down to their level and beat you with experience"

#10 DaleHohm

DaleHohm

    Think of IE as an API...

  • MVPs
  • 5,889 posts

Posted 07 May 2012 - 11:05 PM

Why are you passing 0, 1, 0 to _IECreate? The last 0 prevents it from waiting for the page to load and the rest of what you do will fail.

Dale
IE.au3 issues with Vista - Workarounds, Automate input type=file (Related)SciTe Debug mode - it's magic: #AutoIt3Wrapper_run_debug_mode=YFree Internet Tools: DebugBar, AutoIt IE Builder, HTTP UDF, MODIV2, IE Developer Toolbar, IEDocMon, Fiddler, HTML Validator, WGet, curlMSDN docs: InternetExplorer Object, Document Object, Overviews and Tutorials, DHTML Objects, DHTML Events, WinHttpRequest, XmlHttpRequest, Cross-Frame Scripting, Office object model,Alternative to _IECreateEmbedded? better: _IECreatePseudoEmbeddedFind and harvest Enum constants for COM codeAutoIt Snippets Database - you too can contribute!Reproducer: a small (the smallest?) piece of stand-alone code that demonstrates your troubleDoesn't work needs to be ripped out of the troubleshooting lexicon. It means that what you tried did not produce the results you expected. It begs the questions 1) what did you try?, 2) what did you expect? and 3) what happened instead?

#11 Crazyace

Crazyace

    Wayfarer

  • Active Members
  • Pip
  • 55 posts

Posted 07 May 2012 - 11:30 PM

Opps, I was doing that for testing before. Going to change it.
"Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.""Never, ever, argue with an idiot. They'll drag you down to their level and beat you with experience"




0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users