Jump to content

Recommended Posts

I'm having unpredictable results - rather than post all the code right away (as it's quite lengthy) I've attached an image of the code section in question and an image of the result I'm getting and an image of the result I'm expecting.

As you'll see, box 1 and 2 under Source have the default 'Please select' whereas they should have 'Working Tax Credits' and 'Disability living allowance' in 1 and 2 respectively.

Whilst watching the code run I can see the correct results are being selected but by the time the script finishes executing those boxes have changed back to default.

Here's the site https://www.platform.co.uk/webapp/WEBAPP.EXE?WSYD_EVENT=PW10kkfF

I should mention that if I add in a delay e.g. Sleep(500) then selection remains as expected - but I would rather not do this as it slows the script down.

If $MonthlyUniversalTaxCreditIncomeOne > 0 Then
   $oSelect = _IEGetObjByName($oIE, "AP1AMT1")
   $oSelect.Value = ($MonthlyUniversalTaxCreditIncomeOne * 12)
   $oSelect = _IEGetObjByName($oIE, "OGICMB1A")
   _IEFormElementOptionSelect($oSelect, 8, 1, "byValue")
Else
EndIf

If $MonthlyStateDisabilityIncomeOne > 0 Then
   $oSelect = _IEGetObjByName($oIE, "AP1AMT2")
   $oSelect.Value = ($MonthlyStateDisabilityIncomeOne * 12)
   $oSelect = _IEGetObjByName($oIE, "OGICMB1B")
   _IEFormElementOptionSelect($oSelect, 10, 1, "byValue")
Else
EndIf

Strange result.PNG

Expected result.PNG

Code.PNG

Edited by Dent
Change image for code

Share this post


Link to post
Share on other sites

Please post the code that reproduces that effect, dont need to be everything, just a sample that exemplifies your problem. And avoid to put the code as a image, is much easier to copy and modify than write everything. :)

 

Share this post


Link to post
Share on other sites

Ok done :)

Hmmm. Just tried running the code again multiple times and it seems to be working every time now? Very strange.

Edited by Dent

Share this post


Link to post
Share on other sites

@Dent Very annoying event, but its not unpredictable. :)

Just do the source first and you will be fine, i also add a event fire that you were forgetting.

Local $oSource1 = _IEGetObjByName($oIE, "OGICMB1A")
If Not IsObj($oSource1) Then Exit ConsoleWrite("Error in $oSource1" & @CRLF)
_IEFormElementOptionSelect($oSource1, 8)

Local $oSource1Ammount = _IEGetObjByName($oIE, "AP1AMT1")
If Not IsObj($oSource1Ammount) Then Exit ConsoleWrite("Error in $oSource1Ammount" & @CRLF)
_IEFormElementSetValue($oSource1Ammount, "800")
$oSource1Ammount.fireEvent("OnBlur")

Local $oSource2 = _IEGetObjByName($oIE, "OGICMB1B")
If Not IsObj($oSource2) Then Exit ConsoleWrite("Error in $oSource2" & @CRLF)
_IEFormElementOptionSelect($oSource2, 10)

Local $oSource2Ammount = _IEGetObjByName($oIE, "AP1AMT2")
If Not IsObj($oSource2Ammount) Then Exit ConsoleWrite("Error in $oSource2Ammount" & @CRLF)
_IEFormElementSetValue($oSource2Ammount, "900")
$oSource2Ammount.fireEvent("OnBlur")

Local $oDateOfBirth_DAY = _IEGetObjByName($oIE, "AP1DAY")
If Not IsObj($oDateOfBirth_DAY) Then Exit ConsoleWrite("Error in $oDateOfBirth_DAY" & @CRLF)
_IEFormElementOptionSelect($oDateOfBirth_DAY, 1)

Local $oDateOfBirth_MONTH = _IEGetObjByName($oIE, "AP1MONTH")
If Not IsObj($oDateOfBirth_MONTH) Then Exit ConsoleWrite("Error in $oDateOfBirth_MONTH" & @CRLF)
_IEFormElementOptionSelect($oDateOfBirth_MONTH, 1)

Local $oDateOfBirth_YEAR = _IEGetObjByName($oIE, "AP1YEAR")
If Not IsObj($oDateOfBirth_YEAR) Then Exit ConsoleWrite("Error in $oDateOfBirth_YEAR" & @CRLF)
_IEFormElementOptionSelect($oDateOfBirth_YEAR, 1990)

Local $oEmploymentStatus = _IEGetObjByName($oIE, "EmpSt1")
If Not IsObj($oEmploymentStatus) Then Exit ConsoleWrite("Error in $oEmploymentStatus" & @CRLF)
_IEFormElementOptionSelect($oEmploymentStatus, "O")

Local $oMainIncome = _IEGetObjByName($oIE, "AFFINC1")
If Not IsObj($oMainIncome) Then Exit ConsoleWrite("Error in $oMainIncome" & @CRLF)
_IEFormElementSetValue($oMainIncome, "5000")
$oMainIncome.fireEvent("OnBlur")

Local $oBonus = _IEGetObjByName($oIE, "PW10kkbA")
If Not IsObj($oBonus) Then Exit ConsoleWrite("Error in $oBonus" & @CRLF)
_IEFormElementSetValue($oBonus, "1200")
$oBonus.fireEvent("OnBlur")

Local $oGender = _IEGetObjByName($oIE, "APP1GDR")
If Not IsObj($oGender) Then Exit ConsoleWrite("Error in $oGender" & @CRLF)
_IEFormElementOptionSelect($oGender, "M")

Local $oJointApplication = _IEGetObjById($oIE, "JointAppN")
If Not IsObj($oJointApplication) Then Exit ConsoleWrite("Error in $oJointApplication" & @CRLF)
_IEAction($oJointApplication, "click")

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By SkysLastChance
      The problem that I am having is when my Msgbox pops up it come up blank.
      I would like it to show Nonprocedure.  
      Why is my msgbox coming up blank?
      How do I grab NonProcedure code and display it  in msgbox. 
      Do $oInputs = _IETagNameGetCollection($oIE,"class") For $oInput in $oInputs If StringStripWS($oInput.innertext,1) = "medical__name" Then $otarget = $oInput $vTxt = $otarget. ExitLoop Else $target = "1" EndIf Next Until $otarget <> "1" MsgBox(0,"",$vTxt) <div class="medical__summary"> <a class="medical__name" onclick="trackmedicalEvent('medicalClick', 'click', '4990000', '82546', 'tri', 1, '');" href="/field/origin/a/xid=i5dbe04e5d2ac4ad58ea5bdb7049b1af7">NonProcedure</a> <a class="medical__group" href="/field/origin">Origin <span class="medical__category-name">(medical)</span></a> <div class="medical__extended-fields"> <span class="medical__extended-field">Number 319390</span> <span class="medical__extended-field">Type</span> </div> </div>  
    • By XinYoung
      Hello all,
      Preface: Column A is full of courses. Column B is full of usernames. If course (A1) exists, we check to see if username (B1) is enrolled. If user is found, the user is un-enrolled. Then Loop.
      I am working on a script that loops through an Excel file and pastes the content from A1 into a textbox in IE, does some stuff, then pastes the content from B1 into a different textbox. Then it loops around until all used rows in columns A and B have been accounted for.
      For some reason, column A loops properly but column B doesn't. B1 is pasted over and over again. So, as it loops, B1 is constantly being pasted, first accompanying A1's loop, then A2, and so on.
      The OpenExcel() func opens the Excel file the user specifies in an earlier function. It's supposed to gather the entire used range of columns A and B. The SearchCourse() func only uses column A, pasting its content into a Search tool in IE. This seems to be working fine. SearchResult() puts "Course Not Found" into column C if the search fails. If the search is successful, however, we move onto... EnterCourse(). This simply gets us to the place where column B's content comes into play. UnenrollNow(). Here, we paste the variable $_userName into a textbox. I don't know why it's always B1  Func OpenExcel() If Not WinExists($hWnd) Then MsgBox(16, "Window closed", "The Internet Explorer window was closed. Please start over.") _Exit() Else $oExcel = _Excel_Open() Global $oWorkbook = _Excel_BookOpen($oExcel, $ChosenFileName, Default, True, True) $oExcel.Sheets("CopyCourses").Activate ;~ Get all used cells in columns A and B $aSearchItems = _Excel_RangeRead($oWorkbook, 1, $oWorkbook.Sheets("CopyCourses").Usedrange.Columns("A:B")) ;~ Create the $aSearchResult array ReDim $aSearchResult[UBound($aSearchItems)] ;~ Loop through the array starting at 0 until the end of the array which is (Ubound($aSearchItems) - 1) For $i = 0 To UBound($aSearchItems) - 1 ;~ Column 0 ConsoleWrite($aSearchItems[$i][0] & @CRLF) ;~ Column 1 ConsoleWrite($aSearchItems[$i][1] & @CRLF) $aSearchResult[$i] = SearchCourse($aSearchItems[$i][0], $aSearchItems[$i][1]) Next _Excel_RangeWrite($oWorkbook, Default, $aSearchResult, "C1") ;~ When the loop is complete, run the Finished function. Finished() EndIf EndFunc ;==>OpenExcel Func SearchCourse($_sSearchResult, $_userName) If Not WinExists($hWnd) Then MsgBox(16, "Window closed", "The Internet Explorer window was closed. Please start over.") _Exit() Else _IENavigate($oIE, $urlBBCourseSearch) _IELoadWait($oIE) Local $oForm = _IEGetObjByName($oIE, "courseManagerFormSearch") Local $oSearchString = _IEFormElementGetObjByName($oForm, "courseInfoSearchText") _IEFormElementSetValue($oSearchString, $_sSearchResult) _IEFormSubmit($oForm) _IELoadWait($oIE) Local $oBBTable = _IETableGetCollection($oIE, 2) $aBBTableData = _IETableWriteToArray($oBBTable) Return SearchResult() EndIf EndFunc ;==>SearchCourse Func SearchResult() If Not WinExists($hWnd) Then MsgBox(16, "Window closed", "The Internet Explorer window was closed. Please start over.") _Exit() Else Local $sResult $iSearchIndex = _ArraySearch($aBBTableData, "Course ID", 0, 0, 0, 1, 1, 0) If $iSearchIndex = -1 Then $sResult = "Course Not Found" _Excel_RangeWrite($oWorkbook, Default, $aSearchResult, "C1") Else EnterCourse() $sResult = "UnEnrolled!" _Excel_RangeWrite($oWorkbook, Default, $aSearchResult, "C1") EndIf Return $sResult EndIf EndFunc ;==>SearchResult Func EnterCourse() If Not WinExists($hWnd) Then MsgBox(16, "Window closed", "The Internet Explorer window was closed. Please start over.") _Exit() Else Local $clickFail = "DATE CREATED" _IELinkClickByIndex($oIE, 34) _IELoadWait($oIE) $sourceCode = _IEBodyReadHTML($oIE) If StringInStr($sourceCode, $clickFail) <> 0 Then _IELinkClickByIndex($oIE, 35) _IELoadWait($oIE) EndIf $oLink = _IEGetObjById($oIE, "controlpanel.users.and.groups_groupExpanderLink") _IEAction($oLink, "click") Sleep(500) _IELinkClickByText($oIE, "Users") _IELoadWait($oIE) $aSearchResult[$i] = UnenrollNow($aSearchItems[$i][0], $aSearchItems[$i][1]) EndIf EndFunc ;==>EnterCourse Func UnenrollNow($_sourceCourseId, $_userName) If Not WinExists($hWnd) Then MsgBox(16, "Window closed", "The Internet Explorer window was closed. Please start over.") _Exit() Else Local $UserError = "No users found" Local $sResult $criteriaUsername = _IEGetObjById($oIE, "userInfoSearchKeyString") _IEFormElementOptionSelect($criteriaUsername, 0, 1, 'byIndex') $criteriaUsername = _IEGetObjById($oIE, "userInfoSearchOperatorString") _IEFormElementOptionSelect($criteriaUsername, 0, 1, 'byIndex') ;Paste whats copied from column B into the Username text box. Local $oForm = _IEGetObjByName($oIE, "userManagerSearchForm") Local $oSearchString = _IEFormElementGetObjByName($oForm, "userInfoSearchText") ;PROBLEM HERE... _IEFormElementSetValue($oSearchString, $_userName) ;^^^^^^ WHY IS $_userName ALWAYS B1 ??? Sleep(1000) _IEFormSubmit($oForm) _IELoadWait($oIE) $sourceCode = _IEBodyReadHTML($oIE) If StringInStr($sourceCode, $UserError) <> 0 Then $sResult = "User Not Found" _Excel_RangeWrite($oWorkbook, Default, $aSearchResult, "C1") Return $sResult Else MsgBox(0, "Unenrollment READY!", "We're ready to unenroll foreal") $sResult = "DUN" _Excel_RangeWrite($oWorkbook, Default, $aSearchResult, "C1") Return $sResult EndIf EndIf EndFunc ;==>UnenrollNow Please let me know if any further information is needed.
      If you see other problems or redundancies in my code, please let me know.
      Thank you!
       
    • By Seminko
      Strange thing. When I load a page in IE and inspect, the elements are clearly there but when I try to find them using _IEGetObjById or _IETagNameGetCollection or even using JS right in the IE console, the elements can't be found.
      Have you guys even encoutered something similar?
      Site's HTML
      <div id="lastdays"> <div class="radio"> <span class="radio"><input id="lastdays_radio" type="radio" name="rangepanel_group" value="lastdays_radio"></span> </div> <div class="content"> <label for="lastdays_radio">Za posledních</label> <label for="lastdays_radio"> </label> <input name="lastdays_days" type="text" value="1" maxlength="3" id="lastdays_days" class="text days" onclick="document.getElementById('lastdays_radio').checked=true;" onfocus="document.getElementById('lastdays_radio').checked=true;"> <label for="lastdays_radio"> </label> <select name="lastdays_period" id="lastdays_period" class="combo" onclick="document.getElementById('lastdays_radio').checked=true;" onfocus="document.getElementById('lastdays_radio').checked=true;"> <option value="D">dnů</option> <option value="W">týdnů</option> <option selected="selected" value="M">měsíců</option> </select> </div> </div> document.getElementById("lastdays_days"); //returns null in IE  
    • By XinYoung
      Greetings!
      I am in need of your guidance once again. I searched the forums for clicking in span, clicking by class, clicking without an ID or Name, etc., but I am unable to find a solution for my problem.
      I am trying to expand this tree in IE. There is an arrow ( > ) that i need to click, but I can't find a way to do it . Alternatively, I can double-click the text "Servers", but that seems to be even more troublesome. I will have to do this 2-3 more times as the tree expands.
      There appears to be an ID for the tree, simply called "tree", but that isn't working when I send a click to it.

      ;Open an IE session and navigate to pgAdmin. Global $oIE = _IECreate($pgAdmin) ;Maximize the IE window. WinSetState(_IEPropertyGet($oIE, "hwnd"), "", @SW_MAXIMIZE) Sleep(2000) ;Expand the tree $oTree = _IEGetObjById($oIE, "tree") _IEAction($oTree, "click") Any ideas?  
    • By XinYoung
      Hello all!   I'm stuck at a seemingly simple part of my script. Using IE, I'm filling out a web form that involves clicking a "Browse" button and selecting a file. Once the file explorer dialog opens, however, I am unable to control it.
      I have a string, which is the name of the file I want, and I'm trying to insert it into the 'File name:' text box in the dialog (which already has focus), but it doesn't get inserted. I've tried ClipPut and Send. 

      What's even more concerning is, when I close the dialog, the string is then pasted into the very next window that has focus, which is often SciTE. It's like that Browse's file open dialog halts all processes. Once it's closed, the script continues.
      ;~ Open a IE window and navigate to the login page. Global $oIE = _IECreate($urlBBLogin) _IELoadWait($oIE) ;~ Recognize the form on this page (login input boxes). Local $oForm = _IEFormGetObjByName($oIE, "login") Local $oTextLogin = _IEFormElementGetObjByName($oForm, "user_id") Local $oTextPass = _IEFormElementGetObjByName($oForm, "password") ;~ Enter the Automation user credentials into the form. _IEFormElementSetValue($oTextLogin, $bbUsername) _IEFormElementSetValue($oTextPass, $bbPassword) ;~ Click the Login button. _IEFormSubmit($oForm) _IELoadWait($oIE) ;~ Navigate to the feedfile upload page. _IENavigate($oIE, $urlUpload) _IELoadWait($oIE) ;~ Click the Browse button Local $Browse = _IEGetObjById($oIE, "feedFile_chooseLocalFile") _IEAction($Browse, "Click") Local $Browse = WinWait("Choose File to Upload") ;~ Open the file we created. WinActivate($Browse) Send($finalFile) Has anyone else experienced this problem? Any ideas to get around it? Am I approaching this the wrong way?
      Any support is greatly appreciated.
      Thank you.
×
×
  • Create New...