Jump to content

Recommended Posts

Good morning everyone :)

I worked a bit on a little project of mine, and I managed to do what I was trying to do, or, automate a quiz in AutoIt.

Now, everything works fine but, in order to achieve what I'm trying to achive, I'd like to make this script run faster.

I'll attach a portion of the code in order to let you understand what my script does.

$objIE_h1 = _IETagNameGetCollection($objIE, "h1") ; Take the text of the answer
        If @error Then
            ConsoleWrite("Errore durante la lettura degli h1 nella pagina. - Errore: " & @error & @CRLF)
        Else
            For $objElement In $objIE_h1
                $strInnerText = $objElement.innerText
            Next

            Select
                Case StringInStr($strInnerText, "QUESTION") ; Here is the question
                    ; PS4 PRO

                    $objSpans = _IETagNameGetCollection($objIE, "span") ; Answers are stored here
                    For $objElement In $objSpans
                        If $i >= 4 Then
                            $strAnswer = $objElement.innerText ; Take the text of the answer n° 0, 1, 2, 3
                            If StringInStr($strAnswer, "CORRECT ANSWER") Then ; If I match the correct answer, then, I have to click on the input with answer id = answer_i
                                $j = $i - 4
                                $objInput = _IEGetObjById($objIE, "answer_" & $j)
                                If @error Then
                                    ConsoleWrite("Errore durante la lettura della risposta #" & $i & " - Errore: " & @error & @CRLF)
                                Else
                                    _IEAction($objInput, "click")
                                    If @error Then
                                        ConsoleWrite("Errore durante il click sull'elemento. - Errore: " & @error)
                                    Else
                                        ConsoleWrite($j & ") Risposta: " & $strAnswer & @CRLF)
                                        ExitLoop
                                    EndIf
                                EndIf
                            EndIf
                            $i+=1
                        Else
                            $i+=1
                        EndIf
                    Next
                    $i = 0
                    $j = 0

This is what my script does.

Questions are 20, in which I have 15 multiple choice question, 2 images ( on which I use _IEImgClick() ), and 3 text inputs ( a simple send with the text I have to enter ).

How can I make all of these, faster?

If I reach this goal, I've probably done one of my best goals in life, and I'd like to share my happiness with you, giving a huge donation to this fantastic community!

Thanks for your help :)

Edited by FrancescoDiMuro

Click here to see my signature:

Spoiler

ALWAYS GOOD TO READ:

 

Link to post
Share on other sites
  • Moderators

@FrancescoDiMuro you have been around long enough to know you're not going to get a lot of help by posting a non-runnable snippet of code and then giving us a blanket "help me make this faster". If you would like help on improving the entire code, you have to post the entire code ;)

"Profanity is the last vestige of the feeble mind. For the man who cannot express himself forcibly through intellect must do so through shock and awe" - Spencer W. Kimball

How to get your question answered on this forum!

Link to post
Share on other sites

@JLogan3o13

Hi Master :)

Yes, you are right.

I'm sorry if I can't post the entire code, because it's a project which I'd like to not share at the moment.

I could ask now: "Is there a way to make a script faster, about _IE* automation?"

Thanks in advance :)

Click here to see my signature:

Spoiler

ALWAYS GOOD TO READ:

 

Link to post
Share on other sites

There are definitely ways to improve your script, but I can't say that it will be any faster. For example.

$objIE_h1 = _IETagNameGetCollection($objIE, "h1") ; Take the text of the answer
        If @error Then
            ConsoleWrite("Errore durante la lettura degli h1 nella pagina. - Errore: " & @error & @CRLF)
        Else
            For $objElement In $objIE_h1
                $strInnerText = $objElement.innerText
            Next

could be rewritten as follows, assuming there is only a single H1 element

$objIE_h1 = _IETagNameGetCollection($objIE, "h1", 0) ; Take the text of the answer
If @error Then
   ConsoleWrite("Errore durante la lettura degli h1 nella pagina. - Errore: " & @error & @CRLF)
Else
   $strInnerText = $objIE_h1.innerText
EndIf

 

Link to post
Share on other sites

Thanks @Danp2:)

Other suggestions? :)

There is a bug when the script is too fast... It selects the correct answer, but seems that the system doesn't recognize it and then, I have a bad answer ( even if it's right ).

Thanks again :)

Click here to see my signature:

Spoiler

ALWAYS GOOD TO READ:

 

Link to post
Share on other sites
1 minute ago, Danp2 said:

1. Remove "Urgent" from your topic B)

I need to make this script faster for today, so, it's urgent.

1 minute ago, Danp2 said:

2. Stop making us work so hard to help you. Provide all information in one place.

I tested the script many times, and lately I had this little bug.

Don't answer if you don't want to.

And, by the way, your solution

1 hour ago, Danp2 said:

$objIE_h1 = _IETagNameGetCollection($objIE, "h1", 0) ; Take the text of the answer If @error Then    ConsoleWrite("Errore durante la lettura degli h1 nella pagina. - Errore: " & @error & @CRLF) Else    $strInnerText = $objIE_h1.innerText EndIf

doesn't work.

Click here to see my signature:

Spoiler

ALWAYS GOOD TO READ:

 

Link to post
Share on other sites
15 minutes ago, FrancescoDiMuro said:

I need to make this script faster for today, so, it's urgent.

cw-urgent.jpeg

16 minutes ago, FrancescoDiMuro said:

I tested the script many times, and lately I had this little bug.

Don't answer if you don't want to.

Fine... I won't.

20 minutes ago, FrancescoDiMuro said:

And, by the way, your solution doesn't work.

As I stated, it should work if there is only one H1 element. Again, you've failed to provide the necessary details. How did it fail?

Link to post
Share on other sites

 

Just now, Danp2 said:

cw-urgent.jpeg

Really kid? :)

1 minute ago, Danp2 said:

Fine... I won't.

You've already did it.

 

1 minute ago, Danp2 said:

As I stated, it should work if there is only one H1 element. Again, you've failed to provide the necessary details. How did it fail?

I really don't know... Even if I have onlyone <h1> element in my page, it fails...

Search "h1" (2 hits in 1 file)
  C:\Users\maybe\Downloads\IE_Automation.html (2 hits)
    Line 70:         <h1><span class="questionid">1. </span>QUESTION</h1>
    Line 70:         <h1><span class="questionid">1. </span>QUESTION</h1>

One is the open tag <h1>, and the second one is the close tag </h1>.

KTHXBYE :)

Click here to see my signature:

Spoiler

ALWAYS GOOD TO READ:

 

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
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By Sachs
      I have a few questions:
      BACKGROUND
      I am using Oracle Application Testing Suite's OpenScript 13 (Eclipse IDE), Oracle Java 6, and AutoIt.
      My goal is to access a given Internet Explorer browser window (`$ieTitle`), send the keystroke of "shift-control-s" for "Save As" functionality to be invoked, so that I can download a (PDF) file to a given location ($fileName).
      The code within the script `DownloadPdfFile.au3` is
      $ieTitle = $CmdLine[1] $ieControl = "AVL_AVView31" $fileName = $CmdLine[2] ControlFocus($ieTitle, "", $ieControl) ControlSend($ieTitle, "", $ieControl, "+^s") ; Save as dialog $winTitle = "Save As" ; wait for Save As window WinWait($winTitle) ; activate Save As window If Not WinActive($winTitle) Then WinActivate($winTitle) ControlFocus($winTitle,"","Edit1") ControlSetText($winTitle,"","Edit1",$fileName) Sleep(2000) ControlClick($winTitle,"","Button3") Exit 0 So I compiled it with SciTE-Lite (32-bit Version 4.4.6 , creating `DownloadPdfFile.exe`, and so within my Java code, I have
      String command = autoItExePath + " " + scriptPath + " \"" + winTitle + "\" " + directoryPath.toFile().toString() + "\\Form9Report" + sdf_ddmmmyyyy.format(new Date()) + ".pdf"; try { Process process = Runtime.getRuntime().exec(command); process.waitFor(); } catch (Exception e) { logger.error("Exception " + e.getMessage(), e); } The output would be like `C:\Program Files (x86)\AutoIt3\AutoIt3.exe C:\...\AutoItScripts\DownloadPdfFile.au3 "https://****.com/****.exe?temp_id=**** - Internet Explorer" C:\...\Report05Apr2022.pdf"` which does run without the $cmdLine successfully. 
      When executed by Java, I see in the taskbar an icon, which I right-click has "[Check] Script Paused" and "Exit".
      Questions:
      (1) How do I unpause the script?
      (2) How do I avoid having the script paused?
      Any help is appreciated.
    • By Steviep
      Hi all,
      I've been using the following code for many years for the sole purpose of tracking my app usage via Google Analytics:
      ;GOOGLE ANALYTICS $AppStatsName = @ScriptName $GA = _IECreate("https://mywebserver/apps/stats/" & $AppStatsName & ".html", 0, 0, 0, 0) The app simply calls a blank .html page on my webserver which only contains the GA tracking code.
      The $iVisible parameter is set to "0" in my case, which means the IE browser is invisible to the user.
      I noticed in Windows 11, the URL is called in the Edge browser and is not invisible.
      So, I wonder if anyone out there has any suggestions on calling a URL invisibly on any operating system?
      Thanks!
    • By abberration
      Software Installer
      Version: 2.0
      It's been been a long year, but I finally got some time to rework this project. I re-wrote everything from scratch because the old version was getting too complicated with so many options and sub-menus. This new version is much easier to use and I have been testing for a few days and it seems very stable.
      For those who are new to this software, it helps you install software silently/unattended. This new version tries to determine the silent switch automatically. You can also re-organize the order in which the software installs by dragging & dropping them in the listview. It now supports creating profiles and checks for missing software (and automatically unchecks them, so it does not attempt to install non-existent software). One feature I included was because I have seen several people on Youtube talk about disliking bright screens at night. So, now you can choose from a few color theme (half of them are dark). I dabbled a bit more into GDI+ to draw a few things and show my logo with a transparent background (hint: I'm not good at GDI+).
      Under the Help menu, you will find a User Guide, which goes through most of it's features. I included a new icon if you want to use when you compile the script (in the Assets > Misc folder).
      If you have questions, comments or suggestions, all are welcome. Hope you enjoy!
      Here it is in action:

       
      Software_Installer_2.0.zip
    • By Pured
      I am looking to create a script which refreshes/reads a webpage every few seconds. My goal is to see if the page has changed, then I will send myself a notification that the webpage has been updated.
       
      However, rather than downloading the entire webpage every single time, is there a way to check when the webpage last updated?
       
      If not, is there away to partially download/read html source until a specific tag is hit?
       
      Goal: I would like to increase my poll rate and not excessively waste data.
    • By rcmaehl
      A UDF to connect and control Five9 on the Local Network via it's provided HTTP API
       
      THIS UDF IS STILL IN TESTING
       
      Current Features:
      Agent Ready
      * Contains most functions needed to control Agent Status  
      PLANNED Features:
      Heavyweight
      * Control most Five9 API functions
      * Full Control over own Status as well as Supervisor functionality
        Helpful Premade Examples Files
      * Examples for almost every function
      * Premade CUI and GUI clients
        Ready for all users, beginner and up
      * Detailed Error Reporting to help pin-point problems
      * Thorough parameter checking to prevent accidental script crashes  
      Support:
      Support for this UDF can be obtained in my Discord Server
×
×
  • Create New...