FrancescoDiMuro

Urgent: make _IE* automation faster

17 posts in this topic

#1 ·  Posted (edited)

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

I will always thank you for the time you spent for me.
I'm here to ask, and from your response, I'd like to learn.
By my knowledge, I can help someone else, and "that someone" could help in turn another, and so on.

Share this post


Link to post
Share on other sites



@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 ;)


√-1 2^3 ∑ π, and it was delicious!

Share this post


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

I will always thank you for the time you spent for me.
I'm here to ask, and from your response, I'd like to learn.
By my knowledge, I can help someone else, and "that someone" could help in turn another, and so on.

Share this post


Link to post
Share on other sites

Yes


√-1 2^3 ∑ π, and it was delicious!

Share this post


Link to post
Share on other sites

#5 ·  Posted (edited)

Do I have to open another thread or, can you modify the title, please? :)

Thanks :)

Edited by FrancescoDiMuro

Click here to see my signature:

Spoiler

I will always thank you for the time you spent for me.
I'm here to ask, and from your response, I'd like to learn.
By my knowledge, I can help someone else, and "that someone" could help in turn another, and so on.

Share this post


Link to post
Share on other sites

You can modify your own title by editing the initial post.


√-1 2^3 ∑ π, and it was delicious!

Share this post


Link to post
Share on other sites

@JLogan3o13

Didn't know about that! 

Thanks again :)

Have a good day :)


Click here to see my signature:

Spoiler

I will always thank you for the time you spent for me.
I'm here to ask, and from your response, I'd like to learn.
By my knowledge, I can help someone else, and "that someone" could help in turn another, and so on.

Share this post


Link to post
Share on other sites

Bump :)


Click here to see my signature:

Spoiler

I will always thank you for the time you spent for me.
I'm here to ask, and from your response, I'd like to learn.
By my knowledge, I can help someone else, and "that someone" could help in turn another, and so on.

Share this post


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

 

Share this post


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

I will always thank you for the time you spent for me.
I'm here to ask, and from your response, I'd like to learn.
By my knowledge, I can help someone else, and "that someone" could help in turn another, and so on.

Share this post


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

Other suggestions?

1. Remove "Urgent" from your topic B)

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

1 person likes this

Share this post


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

I will always thank you for the time you spent for me.
I'm here to ask, and from your response, I'd like to learn.
By my knowledge, I can help someone else, and "that someone" could help in turn another, and so on.

Share this post


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?

Share this post


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

I will always thank you for the time you spent for me.
I'm here to ask, and from your response, I'd like to learn.
By my knowledge, I can help someone else, and "that someone" could help in turn another, and so on.

Share this post


Link to post
Share on other sites

You've stated that it fails, but haven't told us how you determined this. Did the script not run? Was an error generated? Was the element not found?

What happened?!

Share this post


Link to post
Share on other sites
31 minutes ago, Danp2 said:

Was an error generated? Was the element not found?

The function _IETagNameGetCollection doesn't match any h1, either in 0 nor in 1 index.


Click here to see my signature:

Spoiler

I will always thank you for the time you spent for me.
I'm here to ask, and from your response, I'd like to learn.
By my knowledge, I can help someone else, and "that someone" could help in turn another, and so on.

Share this post


Link to post
Share on other sites

That doesn't make any sense. If the original command returned a collection containing 1 object, then the command I posted should work. An index of 1 would mean there were multiple H1s, so it does make sense that this failed.

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

    • Spask
      By Spask
      Hi, I'm trying to find a text value inside of a html.
      This is what the line looks like normally:
      <p id="line1" class> <span class="bot">TEXT HERE</span> </p> The text then changes to a non breaking space:
      <p id="line1" class> <span class="bot">&nbsp;</span> </p> And then it changes back to normal text but it's different every time.
      Can I code this so that it grabs the text every time it changes and has a variable that represents it?
      I currently have this inside of my loop:
      $span = .document.getElementsByTagName("span") For $text In $span If $text.value = "&nbsp;" Then Sleep(50) MsgBox(0,0,0) ;messagebox to test if it can be found, but I don't know how to grab the text EndIf Next The problem is that there are many other lines in the html that have the same span but are called "line3", "line5", etc and the one I need is from "line1".
      I will appreciate if anyone can help with this!
    • Earthshine
      By Earthshine
      This is pretty useful to me at least, I hope to others. Whenever you need to poke a button or such on a GUI, you can just make calls to this UDF and instruct it how long to wait, 0 is forever, anyway, let the code to the explaining. Feel free to help expand this UDF. I plan to create new ones as I go along that support all the Win32 and .NET Controls. Ultimately, I would like to be able to fully control any type of control, this works well with most. Just an example of what you can do.
       
      The test installs and can uninstall 7-Zip 15.14 (x64) Setup.exe
      NOTE: Logger Author(s) .....: Michael Mims (zorphnog)
      ;                    the logging script can be obtained here
      ;                   https://www.autoitscript.com/forum/topic/156196-log4a-a-logging-udf/
       
       
      install_7zip_test.au3
      WaitForControls.au3
    • electrons
      By electrons
      hi  , hope  you all doing well 
       cant find any elements on the page ?  and the right click mouse dont work too?
      iam trying with more than method , i need help please!!
       

    • ur
      By ur
      I have kept below line to wait for IE to load the site completely and continue.
      _IELoadWait($oIE)
       
      But, the code is continuing without waiting for it and I my execution is failing as the elements are not loaded completely.

       
      Any suggestions for alternate code to wait for the browser to load completely?
       
    • ur
      By ur
      We can select elements in IE using their IDs as below.
      Local $oDiv = _IEGetObjById($oIE, "x-auto-16-input") But to one button in the webpage, there is no ID to it.
      In selenium we have option to select this element using the CssSelector and clicked the button using below code in c# selenium.
      driver.FindElement(By.CssSelector("button.x-btn-text")).Click(); What is the alternative for this in AUtoIT?