Jump to content
milos83

_IEAttach on _IECreateEmbedded performace issue.

Recommended Posts

milos83

I have one script that creates _IECreateEmbedded and another script that does _IEAttach.

I do this because when autoit is doing something, the Embedded IE starts stalling (eg jquery progress animation)

But there is a new problem.

When IE is having its own process (like in the example above) any _IE command is slow (in the script that Attaches).

Here is a comparison of when its in separate and when its in same process:

Separate process _IETagNameGetCollection : 5000ms

Separate process _IEAction: 850ms

Same process _IETagNameGetCollection : 1ms

Same proccess _IEAction: 135ms

 

If I try to attach to an embedded IE that is done in c#, I get lightning fast results.

As you can see, _IE functions work very slow when the embedded IE we are attaching to is made in Autoit.

 

I did a test and if I empty the WHILE loop in IE process I get these results(but the cpu is at 30% as expected):

Separate process _IETagNameGetCollection : 33ms

Separate process _IEAction: 13ms

 

It slows down if you put anything (like GUIGetMsg) in the WHILE loop.

 

How do I fix this?

 

Create IE:

#include <GUIConstantsEx.au3>
#include <IE.au3>
#include <WindowsConstants.au3>

Local $oIE = _IECreateEmbedded()
GUICreate("My Embedded Web control Test", 640, 580, (@DesktopWidth - 640) / 2, (@DesktopHeight - 580) / 2, $WS_OVERLAPPEDWINDOW + $WS_CLIPSIBLINGS + $WS_CLIPCHILDREN)
GUICtrlCreateObj($oIE, 10, 40, 600, 360)

GUISetState(@SW_SHOW) ;Show GUI

_IENavigate($oIE, "http://www.autoitscript.com")


$timer = TimerInit()
$oLink = _IETagNameGetCollection($oIE, "a", 3) ;takes 1ms
ConsoleWrite(TimerDiff($timer) & @CRLF)

$timer = TimerInit()
_IEAction($oLink, "click")  ;takes 135ms
ConsoleWrite(TimerDiff($timer) & @CRLF)



While 1
    Local $iMsg = GUIGetMsg()
    Select
        Case $iMsg = $GUI_EVENT_CLOSE
            ExitLoop
    EndSelect
WEnd

 

Attach to IE:

#include <IE.au3>

Local $oIE = _IEAttach("My Embedded Web control Test", "embedded")




$timer = TimerInit()
$oLink = _IETagNameGetCollection($oIE, "a", 3)  ; 5000ms
ConsoleWrite(TimerDiff($timer) & @CRLF)

$timer = TimerInit()
_IEAction($oLink, "click")  ; 850ms
ConsoleWrite(TimerDiff($timer) & @CRLF)

 

 

attach.au3

create.au3

Edited by milos83

Share this post


Link to post
Share on other sites
careca

I replicated the issue, could this be a question for developers? @Jos

Seeing as no one has replied.


Spoiler

Paster - Main function is to paste text, but has more functions. (No longer mantained, switched to String Trigger)

Renamer - Rename files and folders, remove portions of text from the filename etc.

GPO Tool - Export/Import Group policy settings.

BeatsPlayer - Music player.

Params Tool - Right click an exe to see it's parameters or execute them.

String Trigger - Triggers pasting text or applications or internet links on specific strings.

Inconspicuous - Hide files in plain sight, not fully encrypted.

Regedit Control - Registry browsing history, quickly jump into any saved key.

Time4Shutdown - Write the time for shutdown in minutes.

Power Profiles Tool - Set a profile as active, delete, duplicate, export and import.

Firefox Profile Backup - Backup/restore previously saved profile.

Finished Task Shutdown - Shuts down pc when specified window/Wndl/process closes.

NetworkSpeedShutdown - Shuts down pc if download speed goes under "X" Kb/s.

IUIAutomation - Topic with framework and examples

Au3Record.exe

Share this post


Link to post
Share on other sites
mLipok

I will try in next 8 hour


Signature beginning:   Wondering who uses AutoIT and what it can be used for ?
* GHAPI UDF - modest begining - comunication with GitHub REST API *
ADO.au3 UDF     POP3.au3 UDF     XML.au3 UDF    How to use IE.au3  UDF with  AutoIt v3.3.14.x  for other useful stuff click the following button

Spoiler

Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind. 

My contribution (my own projects): * Debenu Quick PDF Library - UDF * Debenu PDF Viewer SDK - UDF * Acrobat Reader - ActiveX Viewer * UDF for PDFCreator v1.x.x * XZip - UDF * AppCompatFlags UDF * CrowdinAPI UDF * _WinMergeCompare2Files() * _JavaExceptionAdd() * _IsBeta() * Writing DPI Awareness App - workaround * _AutoIt_RequiredVersion() * Chilkatsoft.au3 UDF * TeamViewer.au3 UDF * JavaManagement UDF * VIES over SOAP * WinSCP UDF * GHAPI UDF - modest begining - comunication with GitHub REST API *

My contribution to others projects or UDF based on  others projects: * _sql.au3 UDF  * POP3.au3 UDF *  RTF Printer - UDF * XML.au3 UDF * ADO.au3 UDF SMTP Mailer UDF *

Useful links: * Forum Rules * Forum etiquette *  Forum Information and FAQs * How to post code on the forum * AutoIt Online Documentation * AutoIt Online Beta Documentation * SciTE4AutoIt3 getting started * Convert text blocks to AutoIt code * Games made in Autoit * Programming related sites * Polish AutoIt Tutorial * DllCall Code Generator * 

Wiki: Expand your knowledge - AutoIt Wiki * Collection of User Defined Functions * How to use HelpFile * Good coding practices in AutoIt * 

IE Related:  * How to use IE.au3  UDF with  AutoIt v3.3.14.x * Why isn't Autoit able to click a Javascript Dialog? * Clicking javascript button with no ID * IE document >> save as MHT file * IETab Switcher (by LarsJ ) * HTML Entities * _IEquerySelectorAll() (by uncommon) * IE in TaskScheduler

I encourage you to read: * Global Vars * Best Coding Practices * Please explain code used in Help file for several File functions * OOP-like approach in AutoIt * UDF-Spec Questions *  EXAMPLE: How To Catch ConsoleWrite() output to a file or to CMD *

"Homo sum; humani nil a me alienum puto" - Publius Terentius Afer
"Program are meant to be read by humans and only incidentally for computers and execute" - Donald Knuth, "The Art of Computer Programming"
:naughty:  :ranting:, be  :) and       \\//_.

Anticipating Errors :  "Any program that accepts data from a user must include code to validate that data before sending it to the data store. You cannot rely on the data store, ...., or even your programming language to notify you of problems. You must check every byte entered by your users, making sure that data is the correct type for its field and that required fields are not empty."

Signature last update: 2018-09-20

Share this post


Link to post
Share on other sites
mLipok

I have some progress.

EDIT:
I'm tired, going sleep, will check it toomorow.

Edited by mLipok

Signature beginning:   Wondering who uses AutoIT and what it can be used for ?
* GHAPI UDF - modest begining - comunication with GitHub REST API *
ADO.au3 UDF     POP3.au3 UDF     XML.au3 UDF    How to use IE.au3  UDF with  AutoIt v3.3.14.x  for other useful stuff click the following button

Spoiler

Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind. 

My contribution (my own projects): * Debenu Quick PDF Library - UDF * Debenu PDF Viewer SDK - UDF * Acrobat Reader - ActiveX Viewer * UDF for PDFCreator v1.x.x * XZip - UDF * AppCompatFlags UDF * CrowdinAPI UDF * _WinMergeCompare2Files() * _JavaExceptionAdd() * _IsBeta() * Writing DPI Awareness App - workaround * _AutoIt_RequiredVersion() * Chilkatsoft.au3 UDF * TeamViewer.au3 UDF * JavaManagement UDF * VIES over SOAP * WinSCP UDF * GHAPI UDF - modest begining - comunication with GitHub REST API *

My contribution to others projects or UDF based on  others projects: * _sql.au3 UDF  * POP3.au3 UDF *  RTF Printer - UDF * XML.au3 UDF * ADO.au3 UDF SMTP Mailer UDF *

Useful links: * Forum Rules * Forum etiquette *  Forum Information and FAQs * How to post code on the forum * AutoIt Online Documentation * AutoIt Online Beta Documentation * SciTE4AutoIt3 getting started * Convert text blocks to AutoIt code * Games made in Autoit * Programming related sites * Polish AutoIt Tutorial * DllCall Code Generator * 

Wiki: Expand your knowledge - AutoIt Wiki * Collection of User Defined Functions * How to use HelpFile * Good coding practices in AutoIt * 

IE Related:  * How to use IE.au3  UDF with  AutoIt v3.3.14.x * Why isn't Autoit able to click a Javascript Dialog? * Clicking javascript button with no ID * IE document >> save as MHT file * IETab Switcher (by LarsJ ) * HTML Entities * _IEquerySelectorAll() (by uncommon) * IE in TaskScheduler

I encourage you to read: * Global Vars * Best Coding Practices * Please explain code used in Help file for several File functions * OOP-like approach in AutoIt * UDF-Spec Questions *  EXAMPLE: How To Catch ConsoleWrite() output to a file or to CMD *

"Homo sum; humani nil a me alienum puto" - Publius Terentius Afer
"Program are meant to be read by humans and only incidentally for computers and execute" - Donald Knuth, "The Art of Computer Programming"
:naughty:  :ranting:, be  :) and       \\//_.

Anticipating Errors :  "Any program that accepts data from a user must include code to validate that data before sending it to the data store. You cannot rely on the data store, ...., or even your programming language to notify you of problems. You must check every byte entered by your users, making sure that data is the correct type for its field and that required fields are not empty."

Signature last update: 2018-09-20

Share this post


Link to post
Share on other sites
milos83

@mLipok Any progress?

Share this post


Link to post
Share on other sites
mLipok

I'm at work in my office.
This is problem which I must look closer at night.


Signature beginning:   Wondering who uses AutoIT and what it can be used for ?
* GHAPI UDF - modest begining - comunication with GitHub REST API *
ADO.au3 UDF     POP3.au3 UDF     XML.au3 UDF    How to use IE.au3  UDF with  AutoIt v3.3.14.x  for other useful stuff click the following button

Spoiler

Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind. 

My contribution (my own projects): * Debenu Quick PDF Library - UDF * Debenu PDF Viewer SDK - UDF * Acrobat Reader - ActiveX Viewer * UDF for PDFCreator v1.x.x * XZip - UDF * AppCompatFlags UDF * CrowdinAPI UDF * _WinMergeCompare2Files() * _JavaExceptionAdd() * _IsBeta() * Writing DPI Awareness App - workaround * _AutoIt_RequiredVersion() * Chilkatsoft.au3 UDF * TeamViewer.au3 UDF * JavaManagement UDF * VIES over SOAP * WinSCP UDF * GHAPI UDF - modest begining - comunication with GitHub REST API *

My contribution to others projects or UDF based on  others projects: * _sql.au3 UDF  * POP3.au3 UDF *  RTF Printer - UDF * XML.au3 UDF * ADO.au3 UDF SMTP Mailer UDF *

Useful links: * Forum Rules * Forum etiquette *  Forum Information and FAQs * How to post code on the forum * AutoIt Online Documentation * AutoIt Online Beta Documentation * SciTE4AutoIt3 getting started * Convert text blocks to AutoIt code * Games made in Autoit * Programming related sites * Polish AutoIt Tutorial * DllCall Code Generator * 

Wiki: Expand your knowledge - AutoIt Wiki * Collection of User Defined Functions * How to use HelpFile * Good coding practices in AutoIt * 

IE Related:  * How to use IE.au3  UDF with  AutoIt v3.3.14.x * Why isn't Autoit able to click a Javascript Dialog? * Clicking javascript button with no ID * IE document >> save as MHT file * IETab Switcher (by LarsJ ) * HTML Entities * _IEquerySelectorAll() (by uncommon) * IE in TaskScheduler

I encourage you to read: * Global Vars * Best Coding Practices * Please explain code used in Help file for several File functions * OOP-like approach in AutoIt * UDF-Spec Questions *  EXAMPLE: How To Catch ConsoleWrite() output to a file or to CMD *

"Homo sum; humani nil a me alienum puto" - Publius Terentius Afer
"Program are meant to be read by humans and only incidentally for computers and execute" - Donald Knuth, "The Art of Computer Programming"
:naughty:  :ranting:, be  :) and       \\//_.

Anticipating Errors :  "Any program that accepts data from a user must include code to validate that data before sending it to the data store. You cannot rely on the data store, ...., or even your programming language to notify you of problems. You must check every byte entered by your users, making sure that data is the correct type for its field and that required fields are not empty."

Signature last update: 2018-09-20

Share this post


Link to post
Share on other sites
milos83
4 minutes ago, mLipok said:

I'm at work in my office.
This is problem which I must look closer at night.

Thanks @mLipok.

I found a 10 year old post that is describing the same issue but no one replied.

 

Share this post


Link to post
Share on other sites
mLipok

Try this  modified _IETagNameGetCollection_mod()  :

#include <IE.au3>

_Example()
Func _Example()
    Local $timer = TimerInit()

;~  Local $oIE = _IEAttach("http://www.autoitscript.com", "url") ; for testing with stnadard IE - not embedded
    Local $oIE = _IEAttach("My Embedded Web control Test", "embedded") ; for testing with embedded IE
    ConsoleWrite(@ScriptLineNumber & " " & TimerDiff($timer) & @CRLF)

    Local $oLink = _IETagNameGetCollection($oIE, "a", 3) ; 5000ms
    ConsoleWrite(@ScriptLineNumber & " " & TimerDiff($timer) & @CRLF)

    $timer = TimerInit()
    $oLink = _IETagNameGetCollection_mod($oIE, "a", 3) ; 5000ms
    ConsoleWrite(@ScriptLineNumber & " " & TimerDiff($timer) & @CRLF)

    $timer = TimerInit()
    _IEAction($oLink, "click") ; 850ms
    ConsoleWrite(@ScriptLineNumber & " " & TimerDiff($timer) & @CRLF)

EndFunc   ;==>_Example


Func _IETagNameGetCollection_mod(ByRef $oObject, $sTagName, $iIndex = -1)
    If Not IsObj($oObject) Then
        __IEConsoleWriteError("Error", "_IETagNameGetCollection", "$_IESTATUS_InvalidDataType")
        Return SetError($_IESTATUS_InvalidDataType, 1, 0)
    EndIf
    ;
    If Not __IEIsObjType($oObject, "browserdom") Then
        __IEConsoleWriteError("Error", "_IETagNameGetCollection", "$_IESTATUS_InvalidObjectType")
        Return SetError($_IESTATUS_InvalidObjectType, 1, 0)
    EndIf

    ConsoleWrite("! " & @ScriptLineNumber & " " & @MIN & ":" & @SEC & ":" & @MSEC & @CRLF)
    Local $oTemp
    If __IEIsObjType($oObject, "documentcontainer") Then
        $oTemp = _IEDocGetObj($oObject)
    Else
        $oTemp = $oObject
    EndIf

    ConsoleWrite("! " & @ScriptLineNumber & " " & @MIN & ":" & @SEC & ":" & @MSEC & @CRLF)
    $iIndex = Number($iIndex)
    Local $oTemp2 = $oTemp.GetElementsByTagName($sTagName)
    ConsoleWrite("! " & @ScriptLineNumber & " " & @MIN & ":" & @SEC & ":" & @MSEC & @CRLF)
    Select
        Case $iIndex = -1
            ConsoleWrite("! " & @ScriptLineNumber & " " & @MIN & ":" & @SEC & ":" & @MSEC & @CRLF)
            Return SetError($_IESTATUS_Success, $oTemp2.length, _
                    $oTemp2)
        Case $iIndex > -1 And $iIndex < $oTemp2.length
            ConsoleWrite("! " & @ScriptLineNumber & " " & @MIN & ":" & @SEC & ":" & @MSEC & @CRLF)
            Return SetError($_IESTATUS_Success, $oTemp2.length, _
                    $oTemp2.item($iIndex))
        Case $iIndex < -1
            ConsoleWrite("! " & @ScriptLineNumber & " " & @MIN & ":" & @SEC & ":" & @MSEC & @CRLF)
            __IEConsoleWriteError("Error", "_IETagNameGetCollection", "$_IESTATUS_InvalidValue", "$iIndex < -1")
            Return SetError($_IESTATUS_InvalidValue, 3, 0)
        Case Else
            ConsoleWrite("! " & @ScriptLineNumber & " " & @MIN & ":" & @SEC & ":" & @MSEC & @CRLF)
            __IEConsoleWriteError("Error", "_IETagNameGetCollection", "$_IESTATUS_NoMatch")
            Return SetError($_IESTATUS_NoMatch, 0, 0) ; Could be caused by parameter 2, 3 or both
    EndSelect
    ConsoleWrite("! " & @ScriptLineNumber & " " & @MIN & ":" & @SEC & ":" & @MSEC & @CRLF)
EndFunc   ;==>_IETagNameGetCollection_mod

 

This is not solution to this problem but it is speed up for IE.au3    _IETagNameGetCollection() function.

I am still researching the problem to know the cause and the solution.

 


Signature beginning:   Wondering who uses AutoIT and what it can be used for ?
* GHAPI UDF - modest begining - comunication with GitHub REST API *
ADO.au3 UDF     POP3.au3 UDF     XML.au3 UDF    How to use IE.au3  UDF with  AutoIt v3.3.14.x  for other useful stuff click the following button

Spoiler

Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind. 

My contribution (my own projects): * Debenu Quick PDF Library - UDF * Debenu PDF Viewer SDK - UDF * Acrobat Reader - ActiveX Viewer * UDF for PDFCreator v1.x.x * XZip - UDF * AppCompatFlags UDF * CrowdinAPI UDF * _WinMergeCompare2Files() * _JavaExceptionAdd() * _IsBeta() * Writing DPI Awareness App - workaround * _AutoIt_RequiredVersion() * Chilkatsoft.au3 UDF * TeamViewer.au3 UDF * JavaManagement UDF * VIES over SOAP * WinSCP UDF * GHAPI UDF - modest begining - comunication with GitHub REST API *

My contribution to others projects or UDF based on  others projects: * _sql.au3 UDF  * POP3.au3 UDF *  RTF Printer - UDF * XML.au3 UDF * ADO.au3 UDF SMTP Mailer UDF *

Useful links: * Forum Rules * Forum etiquette *  Forum Information and FAQs * How to post code on the forum * AutoIt Online Documentation * AutoIt Online Beta Documentation * SciTE4AutoIt3 getting started * Convert text blocks to AutoIt code * Games made in Autoit * Programming related sites * Polish AutoIt Tutorial * DllCall Code Generator * 

Wiki: Expand your knowledge - AutoIt Wiki * Collection of User Defined Functions * How to use HelpFile * Good coding practices in AutoIt * 

IE Related:  * How to use IE.au3  UDF with  AutoIt v3.3.14.x * Why isn't Autoit able to click a Javascript Dialog? * Clicking javascript button with no ID * IE document >> save as MHT file * IETab Switcher (by LarsJ ) * HTML Entities * _IEquerySelectorAll() (by uncommon) * IE in TaskScheduler

I encourage you to read: * Global Vars * Best Coding Practices * Please explain code used in Help file for several File functions * OOP-like approach in AutoIt * UDF-Spec Questions *  EXAMPLE: How To Catch ConsoleWrite() output to a file or to CMD *

"Homo sum; humani nil a me alienum puto" - Publius Terentius Afer
"Program are meant to be read by humans and only incidentally for computers and execute" - Donald Knuth, "The Art of Computer Programming"
:naughty:  :ranting:, be  :) and       \\//_.

Anticipating Errors :  "Any program that accepts data from a user must include code to validate that data before sending it to the data store. You cannot rely on the data store, ...., or even your programming language to notify you of problems. You must check every byte entered by your users, making sure that data is the correct type for its field and that required fields are not empty."

Signature last update: 2018-09-20

Share this post


Link to post
Share on other sites
milos83
12 hours ago, mLipok said:

Try this  modified _IETagNameGetCollection_mod()  :

#include <IE.au3>

_Example()
Func _Example()
    Local $timer = TimerInit()

;~  Local $oIE = _IEAttach("http://www.autoitscript.com", "url") ; for testing with stnadard IE - not embedded
    Local $oIE = _IEAttach("My Embedded Web control Test", "embedded") ; for testing with embedded IE
    ConsoleWrite(@ScriptLineNumber & " " & TimerDiff($timer) & @CRLF)

    Local $oLink = _IETagNameGetCollection($oIE, "a", 3) ; 5000ms
    ConsoleWrite(@ScriptLineNumber & " " & TimerDiff($timer) & @CRLF)

    $timer = TimerInit()
    $oLink = _IETagNameGetCollection_mod($oIE, "a", 3) ; 5000ms
    ConsoleWrite(@ScriptLineNumber & " " & TimerDiff($timer) & @CRLF)

    $timer = TimerInit()
    _IEAction($oLink, "click") ; 850ms
    ConsoleWrite(@ScriptLineNumber & " " & TimerDiff($timer) & @CRLF)

EndFunc   ;==>_Example


Func _IETagNameGetCollection_mod(ByRef $oObject, $sTagName, $iIndex = -1)
    If Not IsObj($oObject) Then
        __IEConsoleWriteError("Error", "_IETagNameGetCollection", "$_IESTATUS_InvalidDataType")
        Return SetError($_IESTATUS_InvalidDataType, 1, 0)
    EndIf
    ;
    If Not __IEIsObjType($oObject, "browserdom") Then
        __IEConsoleWriteError("Error", "_IETagNameGetCollection", "$_IESTATUS_InvalidObjectType")
        Return SetError($_IESTATUS_InvalidObjectType, 1, 0)
    EndIf

    ConsoleWrite("! " & @ScriptLineNumber & " " & @MIN & ":" & @SEC & ":" & @MSEC & @CRLF)
    Local $oTemp
    If __IEIsObjType($oObject, "documentcontainer") Then
        $oTemp = _IEDocGetObj($oObject)
    Else
        $oTemp = $oObject
    EndIf

    ConsoleWrite("! " & @ScriptLineNumber & " " & @MIN & ":" & @SEC & ":" & @MSEC & @CRLF)
    $iIndex = Number($iIndex)
    Local $oTemp2 = $oTemp.GetElementsByTagName($sTagName)
    ConsoleWrite("! " & @ScriptLineNumber & " " & @MIN & ":" & @SEC & ":" & @MSEC & @CRLF)
    Select
        Case $iIndex = -1
            ConsoleWrite("! " & @ScriptLineNumber & " " & @MIN & ":" & @SEC & ":" & @MSEC & @CRLF)
            Return SetError($_IESTATUS_Success, $oTemp2.length, _
                    $oTemp2)
        Case $iIndex > -1 And $iIndex < $oTemp2.length
            ConsoleWrite("! " & @ScriptLineNumber & " " & @MIN & ":" & @SEC & ":" & @MSEC & @CRLF)
            Return SetError($_IESTATUS_Success, $oTemp2.length, _
                    $oTemp2.item($iIndex))
        Case $iIndex < -1
            ConsoleWrite("! " & @ScriptLineNumber & " " & @MIN & ":" & @SEC & ":" & @MSEC & @CRLF)
            __IEConsoleWriteError("Error", "_IETagNameGetCollection", "$_IESTATUS_InvalidValue", "$iIndex < -1")
            Return SetError($_IESTATUS_InvalidValue, 3, 0)
        Case Else
            ConsoleWrite("! " & @ScriptLineNumber & " " & @MIN & ":" & @SEC & ":" & @MSEC & @CRLF)
            __IEConsoleWriteError("Error", "_IETagNameGetCollection", "$_IESTATUS_NoMatch")
            Return SetError($_IESTATUS_NoMatch, 0, 0) ; Could be caused by parameter 2, 3 or both
    EndSelect
    ConsoleWrite("! " & @ScriptLineNumber & " " & @MIN & ":" & @SEC & ":" & @MSEC & @CRLF)
EndFunc   ;==>_IETagNameGetCollection_mod

 

This is not solution to this problem but it is speed up for IE.au3    _IETagNameGetCollection() function.

I am still researching the problem to know the cause and the solution.

 

Thanks @mLipok

Basically, the _IETagNameGetCollection() was just an example.

Most of _IE UDF functions are slowed down.

 

Share this post


Link to post
Share on other sites
mLipok

I know as I said this is not a solution just a speed up, and an information to show that I'm working on this.

Question 1:
Did you make test on older Au3 version ?
 

Question 2:
Did you make test on few different system WIn7, 8, 8.1, 10 and with different IE version ? with different ServicePack or without recent Windows Updates ?

I have only fully updated Windows station and do no have possibility to test on different environment.

 

Q


Signature beginning:   Wondering who uses AutoIT and what it can be used for ?
* GHAPI UDF - modest begining - comunication with GitHub REST API *
ADO.au3 UDF     POP3.au3 UDF     XML.au3 UDF    How to use IE.au3  UDF with  AutoIt v3.3.14.x  for other useful stuff click the following button

Spoiler

Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind. 

My contribution (my own projects): * Debenu Quick PDF Library - UDF * Debenu PDF Viewer SDK - UDF * Acrobat Reader - ActiveX Viewer * UDF for PDFCreator v1.x.x * XZip - UDF * AppCompatFlags UDF * CrowdinAPI UDF * _WinMergeCompare2Files() * _JavaExceptionAdd() * _IsBeta() * Writing DPI Awareness App - workaround * _AutoIt_RequiredVersion() * Chilkatsoft.au3 UDF * TeamViewer.au3 UDF * JavaManagement UDF * VIES over SOAP * WinSCP UDF * GHAPI UDF - modest begining - comunication with GitHub REST API *

My contribution to others projects or UDF based on  others projects: * _sql.au3 UDF  * POP3.au3 UDF *  RTF Printer - UDF * XML.au3 UDF * ADO.au3 UDF SMTP Mailer UDF *

Useful links: * Forum Rules * Forum etiquette *  Forum Information and FAQs * How to post code on the forum * AutoIt Online Documentation * AutoIt Online Beta Documentation * SciTE4AutoIt3 getting started * Convert text blocks to AutoIt code * Games made in Autoit * Programming related sites * Polish AutoIt Tutorial * DllCall Code Generator * 

Wiki: Expand your knowledge - AutoIt Wiki * Collection of User Defined Functions * How to use HelpFile * Good coding practices in AutoIt * 

IE Related:  * How to use IE.au3  UDF with  AutoIt v3.3.14.x * Why isn't Autoit able to click a Javascript Dialog? * Clicking javascript button with no ID * IE document >> save as MHT file * IETab Switcher (by LarsJ ) * HTML Entities * _IEquerySelectorAll() (by uncommon) * IE in TaskScheduler

I encourage you to read: * Global Vars * Best Coding Practices * Please explain code used in Help file for several File functions * OOP-like approach in AutoIt * UDF-Spec Questions *  EXAMPLE: How To Catch ConsoleWrite() output to a file or to CMD *

"Homo sum; humani nil a me alienum puto" - Publius Terentius Afer
"Program are meant to be read by humans and only incidentally for computers and execute" - Donald Knuth, "The Art of Computer Programming"
:naughty:  :ranting:, be  :) and       \\//_.

Anticipating Errors :  "Any program that accepts data from a user must include code to validate that data before sending it to the data store. You cannot rely on the data store, ...., or even your programming language to notify you of problems. You must check every byte entered by your users, making sure that data is the correct type for its field and that required fields are not empty."

Signature last update: 2018-09-20

Share this post


Link to post
Share on other sites
milos83
On 1/25/2018 at 0:44 PM, mLipok said:

I know as I said this is not a solution just a speed up, and an information to show that I'm working on this.

Question 1:
Did you make test on older Au3 version ?
 

Question 2:
Did you make test on few different system WIn7, 8, 8.1, 10 and with different IE version ? with different ServicePack or without recent Windows Updates ?

I have only fully updated Windows station and do no have possibility to test on different environment.

 

Q

Tested on win7 and win10. both fully updated. Latest Autoit.

Latest test showed something interesting.

If you rightclick the embedded IE  the requests are fast again and issue is gone!

Run this with and then without rightclick context menu up or just give it a right click while its running and see the timers.

 

#include <IE.au3>

Local $oIE = _IEAttach("My Embedded Web control Test", "embedded")

For $i = 1 To 20
    
    $timer = TimerInit()
    $oLink = _IETagNameGetCollection($oIE, "a", 3)  ; 5000ms
    ConsoleWrite(TimerDiff($timer) & @CRLF)

Next

 

There is another bug regarding _IEAttach that I discovered today.

After about a minute from attaching about 4 _IEGetObjById requests will crash the autotit entirely giving "Autoit has been closed...".

Opposed to the first bug, this one happens no matter if the embedded IE is made in AutoIt or C#. 

That means its an _IEAttach issue.

I'll test on win 10 and see if it acts the same and I'll make another thread about it.

This second bug appears only on win 7.

 

 

Edited by milos83

Share this post


Link to post
Share on other sites
milos83

And here the other bug reproducer.

This script will cause Autoit v3 Script has stopped working crash

#include <IE.au3>

$oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
Local $oIE = _IEAttach("My Embedded Web control Test", "embedded")


For $i = 1 To 1000
    $obj = _IEGetObjById($oIE, "main-content")
    ConsoleWrite("Run:" & $i & @TAB & IsObj($obj) & @CRLF)
    ;Fails after about 590 cycles
;~  Sleep(1000); takes 10 min with this sleep and about 10s without it.
Next


Func MyErrFunc()
EndFunc

It only happens if the embedded IE script has an empty WHILE loop (that is done in order to avoid the IE UDF delays regarding the first bug).

This means, once you are attached, you have a limited number of actions you can send to IE.

eg. If you add _IEAction focus to the script above, the number of steps until the crash is halved.

 

Opposed to the limit on number of actions, when attaching to c# made IE embedded, we have a time limit and its about 70 seconds!

No matter if you send one of 1000 actions, it fails after about a minute.

 

Share this post


Link to post
Share on other sites
mLipok
On 25.01.2018 at 5:36 PM, milos83 said:

If you rightclick the embedded IE  the requests are fast again and issue is gone!

Confirm that issue is gone in this workaround.
Also confirm that in case when While Wend loop is empty then the speed is fast.


Here are my testing scripts:
 

Spoiler

 

create.au3:

#include <GUIConstantsEx.au3>
#include <IE.au3>
#include <WindowsConstants.au3>

_Example()
Func _Example()
    Local $oIE = _IECreateEmbedded()
    Local $hGUI = GUICreate("My Embedded Web control Test", 640, 580, (@DesktopWidth - 640) / 2, (@DesktopHeight - 580) / 2, $WS_OVERLAPPEDWINDOW + $WS_CLIPSIBLINGS + $WS_CLIPCHILDREN)
    Local $iEmbeded = GUICtrlCreateObj($oIE, 10, 40, 600, 360)
    GUISetState(@SW_SHOW) ;Show GUI

    _IENavigate($oIE, "http://www.autoitscript.com")


    Local $timer = TimerInit()
    Local $oLink = _IETagNameGetCollection($oIE, "a", 3) ;takes 1ms
    ConsoleWrite(TimerDiff($timer) & @CRLF)

    $timer = TimerInit()
    _IEAction($oLink, "click") ;takes 135ms
    ConsoleWrite(TimerDiff($timer) & @CRLF)

    ; Check how external Attach works before going to inside Loop
    MsgBox(0, '', 1)

    Local $iMsg
    While 1

        $iMsg = GUIGetMsg()
        Select
            Case $iMsg = $GUI_EVENT_CLOSE
                ExitLoop
        EndSelect
    WEnd

EndFunc   ;==>_Example

attach.au3

#include <IE.au3>

_Example()
ConsoleWrite("+ Next test" & @CRLF)
;~ MsgBox(0, '', 1)
Sleep(3000)
_Example()
Func _Example()
    Local $timer = TimerInit()

;~  Local $oIE = _IEAttach("http://www.autoitscript.com", "url") ; for testing with stnadard IE - not embedded
    Local $oIE = _IEAttach("My Embedded Web control Test", "embedded") ; for testing with embedded IE
;~  Local $oIE = _IEAttach("Komentarz", "embedded") ; for testing with embedded IE - testing with TeamViewer Comment window

    ConsoleWrite('! ---> @error=' & @error & '  @extended=' & @extended & ' : ' &  @ScriptLineNumber & " " & TimerDiff($timer) & @CRLF)

    Local $sHTML = _IEBodyReadHTML($oIE)
    ConsoleWrite('! ---> @error=' & @error & '  @extended=' & @extended & ' : ' &  @ScriptLineNumber & " " & TimerDiff($timer) & @CRLF)
;~  ClipPut($sHTML)
;~  MsgBox(0, '$sHTML', $sHTML)

    Local $oLink = _IETagNameGetCollection($oIE, "a", 3) ; 5000ms
    ConsoleWrite('! ---> @error=' & @error & '  @extended=' & @extended & ' : ' &  @ScriptLineNumber & " " & TimerDiff($timer) & @CRLF)

    $timer = TimerInit()
    $oLink = _IETagNameGetCollection($oIE, "a", 3) ; 5000ms
    ConsoleWrite('! ---> @error=' & @error & '  @extended=' & @extended & ' : ' &  @ScriptLineNumber & " " & TimerDiff($timer) & @CRLF)

    $timer = TimerInit()
    _IEAction($oLink, "click") ; 850ms
    ConsoleWrite('! ---> @error=' & @error & '  @extended=' & @extended & ' : ' &  @ScriptLineNumber & " " & TimerDiff($timer) & @CRLF)

EndFunc   ;==>_Example

Func _IETagNameGetCollection_mod(ByRef $oObject, $sTagName, $iIndex = -1)
    If Not IsObj($oObject) Then
        __IEConsoleWriteError("Error", "_IETagNameGetCollection", "$_IESTATUS_InvalidDataType")
        Return SetError($_IESTATUS_InvalidDataType, 1, 0)
    EndIf
    ;
    If Not __IEIsObjType($oObject, "browserdom") Then
        __IEConsoleWriteError("Error", "_IETagNameGetCollection", "$_IESTATUS_InvalidObjectType")
        Return SetError($_IESTATUS_InvalidObjectType, 1, 0)
    EndIf

    ConsoleWrite("! " & '! ---> @error=' & @error & '  @extended=' & @extended & ' : ' &  @ScriptLineNumber & " " & @MIN & ":" & @SEC & ":" & @MSEC & @CRLF)
    Local $oTemp
    If __IEIsObjType($oObject, "documentcontainer") Then
        $oTemp = _IEDocGetObj($oObject)
    Else
        $oTemp = $oObject
    EndIf

    ConsoleWrite("! " & '! ---> @error=' & @error & '  @extended=' & @extended & ' : ' &  @ScriptLineNumber & " " & @MIN & ":" & @SEC & ":" & @MSEC & @CRLF)
    $iIndex = Number($iIndex)
    Local $oTemp2 = $oTemp.GetElementsByTagName($sTagName)
    ConsoleWrite("! " & '! ---> @error=' & @error & '  @extended=' & @extended & ' : ' &  @ScriptLineNumber & " " & @MIN & ":" & @SEC & ":" & @MSEC & @CRLF)
    Select
        Case $iIndex = -1
            ConsoleWrite("! " & '! ---> @error=' & @error & '  @extended=' & @extended & ' : ' &  @ScriptLineNumber & " " & @MIN & ":" & @SEC & ":" & @MSEC & @CRLF)
            Return SetError($_IESTATUS_Success, $oTemp2.length, _
                    $oTemp2)
        Case $iIndex > -1 And $iIndex < $oTemp2.length
            ConsoleWrite("! " & '! ---> @error=' & @error & '  @extended=' & @extended & ' : ' &  @ScriptLineNumber & " " & @MIN & ":" & @SEC & ":" & @MSEC & @CRLF)
            Return SetError($_IESTATUS_Success, $oTemp2.length, _
                    $oTemp2.item($iIndex))
        Case $iIndex < -1
            ConsoleWrite("! " & '! ---> @error=' & @error & '  @extended=' & @extended & ' : ' &  @ScriptLineNumber & " " & @MIN & ":" & @SEC & ":" & @MSEC & @CRLF)
            __IEConsoleWriteError("Error", "_IETagNameGetCollection", "$_IESTATUS_InvalidValue", "$iIndex < -1")
            Return SetError($_IESTATUS_InvalidValue, 3, 0)
        Case Else
            ConsoleWrite("! " & '! ---> @error=' & @error & '  @extended=' & @extended & ' : ' &  @ScriptLineNumber & " " & @MIN & ":" & @SEC & ":" & @MSEC & @CRLF)
            __IEConsoleWriteError("Error", "_IETagNameGetCollection", "$_IESTATUS_NoMatch")
            Return SetError($_IESTATUS_NoMatch, 0, 0) ; Could be caused by parameter 2, 3 or both
    EndSelect
    ConsoleWrite("! " & '! ---> @error=' & @error & '  @extended=' & @extended & ' : ' &  @ScriptLineNumber & " " & @MIN & ":" & @SEC & ":" & @MSEC & @CRLF)
EndFunc   ;==>_IETagNameGetCollection_mod

 

 

 

I test this with Au3.3.14.2, Au3.3.12.0, Au3.3.10.0, Au3.3.8.1, all version works in the sam way - slowly in this testing scenario.

 

I'm not an system enginer or C++ dev, so my answer is only a guess.

The problem is in how Sleep() or GUIGetMsg() works.
This two functions internall make an internall loop which literaly sleep's Au3 script durring interpretation.

When internall loop is in progress, then no more messages, communication is maintained by Au3 Core so also, embeded IE is not exposed ("in real time") to the outer environment, this mean any program which want to access embeded object must wait to the end of internall loop.

Hower IMHO this is looking like an issue as Sleep() or GUIGetMsg() should generate only few miliseconds delay.

 

More precise answer could be done by @Jon or @trancexx.

 

Edited by mLipok

Signature beginning:   Wondering who uses AutoIT and what it can be used for ?
* GHAPI UDF - modest begining - comunication with GitHub REST API *
ADO.au3 UDF     POP3.au3 UDF     XML.au3 UDF    How to use IE.au3  UDF with  AutoIt v3.3.14.x  for other useful stuff click the following button

Spoiler

Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind. 

My contribution (my own projects): * Debenu Quick PDF Library - UDF * Debenu PDF Viewer SDK - UDF * Acrobat Reader - ActiveX Viewer * UDF for PDFCreator v1.x.x * XZip - UDF * AppCompatFlags UDF * CrowdinAPI UDF * _WinMergeCompare2Files() * _JavaExceptionAdd() * _IsBeta() * Writing DPI Awareness App - workaround * _AutoIt_RequiredVersion() * Chilkatsoft.au3 UDF * TeamViewer.au3 UDF * JavaManagement UDF * VIES over SOAP * WinSCP UDF * GHAPI UDF - modest begining - comunication with GitHub REST API *

My contribution to others projects or UDF based on  others projects: * _sql.au3 UDF  * POP3.au3 UDF *  RTF Printer - UDF * XML.au3 UDF * ADO.au3 UDF SMTP Mailer UDF *

Useful links: * Forum Rules * Forum etiquette *  Forum Information and FAQs * How to post code on the forum * AutoIt Online Documentation * AutoIt Online Beta Documentation * SciTE4AutoIt3 getting started * Convert text blocks to AutoIt code * Games made in Autoit * Programming related sites * Polish AutoIt Tutorial * DllCall Code Generator * 

Wiki: Expand your knowledge - AutoIt Wiki * Collection of User Defined Functions * How to use HelpFile * Good coding practices in AutoIt * 

IE Related:  * How to use IE.au3  UDF with  AutoIt v3.3.14.x * Why isn't Autoit able to click a Javascript Dialog? * Clicking javascript button with no ID * IE document >> save as MHT file * IETab Switcher (by LarsJ ) * HTML Entities * _IEquerySelectorAll() (by uncommon) * IE in TaskScheduler

I encourage you to read: * Global Vars * Best Coding Practices * Please explain code used in Help file for several File functions * OOP-like approach in AutoIt * UDF-Spec Questions *  EXAMPLE: How To Catch ConsoleWrite() output to a file or to CMD *

"Homo sum; humani nil a me alienum puto" - Publius Terentius Afer
"Program are meant to be read by humans and only incidentally for computers and execute" - Donald Knuth, "The Art of Computer Programming"
:naughty:  :ranting:, be  :) and       \\//_.

Anticipating Errors :  "Any program that accepts data from a user must include code to validate that data before sending it to the data store. You cannot rely on the data store, ...., or even your programming language to notify you of problems. You must check every byte entered by your users, making sure that data is the correct type for its field and that required fields are not empty."

Signature last update: 2018-09-20

Share this post


Link to post
Share on other sites
mLipok
On 26.01.2018 at 1:15 PM, milos83 said:

And here the other bug reproducer.

This script will cause Autoit v3 Script has stopped working crash

#include <IE.au3>

$oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
Local $oIE = _IEAttach("My Embedded Web control Test", "embedded")


For $i = 1 To 1000
    $obj = _IEGetObjById($oIE, "main-content")
    ConsoleWrite("Run:" & $i & @TAB & IsObj($obj) & @CRLF)
    ;Fails after about 590 cycles
;~  Sleep(1000); takes 10 min with this sleep and about 10s without it.
Next


Func MyErrFunc()
EndFunc

It only happens if the embedded IE script has an empty WHILE loop (that is done in order to avoid the IE UDF delays regarding the first bug).

This means, once you are attached, you have a limited number of actions you can send to IE.

eg. If you add _IEAction focus to the script above, the number of steps until the crash is halved.

 

Opposed to the limit on number of actions, when attaching to c# made IE embedded, we have a time limit and its about 70 seconds!

No matter if you send one of 1000 actions, it fails after about a minute.

 

I little modify your testing script:
 

#include <IE.au3>

;~ $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
_IEErrorHandlerRegister(MyErrFunc)
Local $oIE = _IEAttach("My Embedded Web control Test", "embedded")


For $i = 1 To 100000
    $obj = _IEGetObjById($oIE, "main-content")
    If @error Then ConsoleWrite('! ---> @error=' & @error & '  @extended=' & @extended & ' : ' & @CRLF)
    ConsoleWrite("Run:" & $i & @TAB & IsObj($obj) & @CRLF)
Next

Func MyErrFunc($oError)
    ; Do anything here.
    ConsoleWrite( _
            @ScriptName & " (" & $oError.scriptline & ") : ==> COM Error intercepted !" & @CRLF & _
            @TAB & "err.number is: " & @TAB & @TAB & "0x" & Hex($oError.number) & @CRLF & _
            @TAB & "err.windescription:" & @TAB & $oError.windescription & @CRLF & _
            @TAB & "err.description is: " & @TAB & $oError.description & @CRLF & _
            @TAB & "err.source is: " & @TAB & @TAB & $oError.source & @CRLF & _
            @TAB & "err.helpfile is: " & @TAB & $oError.helpfile & @CRLF & _
            @TAB & "err.helpcontext is: " & @TAB & $oError.helpcontext & @CRLF & _
            @TAB & "err.lastdllerror is: " & @TAB & $oError.lastdllerror & @CRLF & _
            @TAB & "err.scriptline is: " & @TAB & $oError.scriptline & @CRLF & _
            @TAB & "err.retcode is: " & @TAB & "0x" & Hex($oError.retcode) & @CRLF & @CRLF)
EndFunc   ;==>_ErrFunc

And I do not have any problem in 10000 pasess.

 

Edited by mLipok

Signature beginning:   Wondering who uses AutoIT and what it can be used for ?
* GHAPI UDF - modest begining - comunication with GitHub REST API *
ADO.au3 UDF     POP3.au3 UDF     XML.au3 UDF    How to use IE.au3  UDF with  AutoIt v3.3.14.x  for other useful stuff click the following button

Spoiler

Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind. 

My contribution (my own projects): * Debenu Quick PDF Library - UDF * Debenu PDF Viewer SDK - UDF * Acrobat Reader - ActiveX Viewer * UDF for PDFCreator v1.x.x * XZip - UDF * AppCompatFlags UDF * CrowdinAPI UDF * _WinMergeCompare2Files() * _JavaExceptionAdd() * _IsBeta() * Writing DPI Awareness App - workaround * _AutoIt_RequiredVersion() * Chilkatsoft.au3 UDF * TeamViewer.au3 UDF * JavaManagement UDF * VIES over SOAP * WinSCP UDF * GHAPI UDF - modest begining - comunication with GitHub REST API *

My contribution to others projects or UDF based on  others projects: * _sql.au3 UDF  * POP3.au3 UDF *  RTF Printer - UDF * XML.au3 UDF * ADO.au3 UDF SMTP Mailer UDF *

Useful links: * Forum Rules * Forum etiquette *  Forum Information and FAQs * How to post code on the forum * AutoIt Online Documentation * AutoIt Online Beta Documentation * SciTE4AutoIt3 getting started * Convert text blocks to AutoIt code * Games made in Autoit * Programming related sites * Polish AutoIt Tutorial * DllCall Code Generator * 

Wiki: Expand your knowledge - AutoIt Wiki * Collection of User Defined Functions * How to use HelpFile * Good coding practices in AutoIt * 

IE Related:  * How to use IE.au3  UDF with  AutoIt v3.3.14.x * Why isn't Autoit able to click a Javascript Dialog? * Clicking javascript button with no ID * IE document >> save as MHT file * IETab Switcher (by LarsJ ) * HTML Entities * _IEquerySelectorAll() (by uncommon) * IE in TaskScheduler

I encourage you to read: * Global Vars * Best Coding Practices * Please explain code used in Help file for several File functions * OOP-like approach in AutoIt * UDF-Spec Questions *  EXAMPLE: How To Catch ConsoleWrite() output to a file or to CMD *

"Homo sum; humani nil a me alienum puto" - Publius Terentius Afer
"Program are meant to be read by humans and only incidentally for computers and execute" - Donald Knuth, "The Art of Computer Programming"
:naughty:  :ranting:, be  :) and       \\//_.

Anticipating Errors :  "Any program that accepts data from a user must include code to validate that data before sending it to the data store. You cannot rely on the data store, ...., or even your programming language to notify you of problems. You must check every byte entered by your users, making sure that data is the correct type for its field and that required fields are not empty."

Signature last update: 2018-09-20

Share this post


Link to post
Share on other sites
milos83
15 hours ago, mLipok said:

I little modify your testing script:
 

#include <IE.au3>

;~ $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
_IEErrorHandlerRegister(MyErrFunc)
Local $oIE = _IEAttach("My Embedded Web control Test", "embedded")


For $i = 1 To 100000
    $obj = _IEGetObjById($oIE, "main-content")
    If @error Then ConsoleWrite('! ---> @error=' & @error & '  @extended=' & @extended & ' : ' & @CRLF)
    ConsoleWrite("Run:" & $i & @TAB & IsObj($obj) & @CRLF)
Next

Func MyErrFunc($oError)
    ; Do anything here.
    ConsoleWrite( _
            @ScriptName & " (" & $oError.scriptline & ") : ==> COM Error intercepted !" & @CRLF & _
            @TAB & "err.number is: " & @TAB & @TAB & "0x" & Hex($oError.number) & @CRLF & _
            @TAB & "err.windescription:" & @TAB & $oError.windescription & @CRLF & _
            @TAB & "err.description is: " & @TAB & $oError.description & @CRLF & _
            @TAB & "err.source is: " & @TAB & @TAB & $oError.source & @CRLF & _
            @TAB & "err.helpfile is: " & @TAB & $oError.helpfile & @CRLF & _
            @TAB & "err.helpcontext is: " & @TAB & $oError.helpcontext & @CRLF & _
            @TAB & "err.lastdllerror is: " & @TAB & $oError.lastdllerror & @CRLF & _
            @TAB & "err.scriptline is: " & @TAB & $oError.scriptline & @CRLF & _
            @TAB & "err.retcode is: " & @TAB & "0x" & Hex($oError.retcode) & @CRLF & @CRLF)
EndFunc   ;==>_ErrFunc

And I do not have any problem in 10000 pasess.

 

Still crashes for me after about 800 turns.

Are you sure you used an IE with empty while loop like this:

 

#include <GUIConstantsEx.au3>
#include <IE.au3>
#include <WindowsConstants.au3>

Local $oIE = _IECreateEmbedded()
GUICreate("My Embedded Web control Test", 640, 580, (@DesktopWidth - 640) / 2, (@DesktopHeight - 580) / 2, $WS_OVERLAPPEDWINDOW + $WS_CLIPSIBLINGS + $WS_CLIPCHILDREN)
GUICtrlCreateObj($oIE, 10, 40, 600, 360)

GUISetState(@SW_SHOW) ;Show GUI

_IENavigate($oIE, "http://www.autoitscript.com")


While True
WEnd

 

Share this post


Link to post
Share on other sites
mLipok
6 hours ago, milos83 said:

Still crashes for me after about 800 turns.

Which:

  • IE version ?
  • Windows Version 64/32 Bit ?

Please also put here SciTE console output.

 

 

6 hours ago, milos83 said:

Are you sure you used an IE with empty while loop like this:

Yes I was tested this with empty loop.

But I do not know what you mean, to what you are refering ?
 

Edited by mLipok

Signature beginning:   Wondering who uses AutoIT and what it can be used for ?
* GHAPI UDF - modest begining - comunication with GitHub REST API *
ADO.au3 UDF     POP3.au3 UDF     XML.au3 UDF    How to use IE.au3  UDF with  AutoIt v3.3.14.x  for other useful stuff click the following button

Spoiler

Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind. 

My contribution (my own projects): * Debenu Quick PDF Library - UDF * Debenu PDF Viewer SDK - UDF * Acrobat Reader - ActiveX Viewer * UDF for PDFCreator v1.x.x * XZip - UDF * AppCompatFlags UDF * CrowdinAPI UDF * _WinMergeCompare2Files() * _JavaExceptionAdd() * _IsBeta() * Writing DPI Awareness App - workaround * _AutoIt_RequiredVersion() * Chilkatsoft.au3 UDF * TeamViewer.au3 UDF * JavaManagement UDF * VIES over SOAP * WinSCP UDF * GHAPI UDF - modest begining - comunication with GitHub REST API *

My contribution to others projects or UDF based on  others projects: * _sql.au3 UDF  * POP3.au3 UDF *  RTF Printer - UDF * XML.au3 UDF * ADO.au3 UDF SMTP Mailer UDF *

Useful links: * Forum Rules * Forum etiquette *  Forum Information and FAQs * How to post code on the forum * AutoIt Online Documentation * AutoIt Online Beta Documentation * SciTE4AutoIt3 getting started * Convert text blocks to AutoIt code * Games made in Autoit * Programming related sites * Polish AutoIt Tutorial * DllCall Code Generator * 

Wiki: Expand your knowledge - AutoIt Wiki * Collection of User Defined Functions * How to use HelpFile * Good coding practices in AutoIt * 

IE Related:  * How to use IE.au3  UDF with  AutoIt v3.3.14.x * Why isn't Autoit able to click a Javascript Dialog? * Clicking javascript button with no ID * IE document >> save as MHT file * IETab Switcher (by LarsJ ) * HTML Entities * _IEquerySelectorAll() (by uncommon) * IE in TaskScheduler

I encourage you to read: * Global Vars * Best Coding Practices * Please explain code used in Help file for several File functions * OOP-like approach in AutoIt * UDF-Spec Questions *  EXAMPLE: How To Catch ConsoleWrite() output to a file or to CMD *

"Homo sum; humani nil a me alienum puto" - Publius Terentius Afer
"Program are meant to be read by humans and only incidentally for computers and execute" - Donald Knuth, "The Art of Computer Programming"
:naughty:  :ranting:, be  :) and       \\//_.

Anticipating Errors :  "Any program that accepts data from a user must include code to validate that data before sending it to the data store. You cannot rely on the data store, ...., or even your programming language to notify you of problems. You must check every byte entered by your users, making sure that data is the correct type for its field and that required fields are not empty."

Signature last update: 2018-09-20

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

    • rm4453
      By rm4453
      I have a table I am parsing, to find specific vehicle information. I am unable to get _ArrayFindAll to return the only valid result with my test data.
      Below is a sample of the table's HTML:
      <td class="textCenter">2010</td> <td>TOYOTA</td> <td>TACOMA 4X4 DB</td> <td></td> <td>BLACK</td> <td class="textCenter">C</td> <td class="textCenter">6</td> <td>GAS</td> <td class="textCenter">A</td> <td class="textCenter">4X4</td> <td class="textCenter">Y</td> <td>CD</td> <td class="textCenter">HT</td> <td class="textCenter">C</td> <td class="textRight" nowrap="nowrap">80,975</td> <td class="textRight" nowrap="nowrap">$16,800</td> </tr> <tr><!-- 308 --> <td class="textCenter">2010</td> <td>TOYOTA</td> <td>TACOMA 4X4 RG</td> <td></td> <td>BLACK</td> <td class="textCenter">R</td> <td class="textCenter">4</td> <td>GAS</td> <td class="textCenter">5</td> <td class="textCenter">4X4</td> <td class="textCenter">A</td> <td>CD</td> <td class="textCenter">HT</td> <td class="textCenter">C</td> <td class="textRight" nowrap="nowrap">95,224</td> <td class="textRight" nowrap="nowrap">$9,500</td> </tr> <tr><!-- 309 --> <td class="textCenter">2011</td> <td>BUICK</td> <td>REGAL</td> <td>CXL RL4</td> <td>BLACK</td> <td class="textCenter">4</td> <td class="textCenter">4</td> <td>GAS</td> <td class="textCenter">A</td> <td class="textCenter"></td> <td class="textCenter">A</td> <td>CD</td> <td class="textCenter">SR</td> <td class="textCenter">L</td> <td class="textRight" nowrap="nowrap">102,694</td> <td class="textRight" nowrap="nowrap">$5,000</td> </tr> <tr><!-- 310 --> <td class="textCenter">2011</td> <td>CHEVROLET</td> <td>AVALANCH 4X4 CR</td> <td>LS</td> <td>GRAY</td> <td class="textCenter">C</td> <td class="textCenter">8</td> <td>E</td> <td class="textCenter">A</td> <td class="textCenter">4X4</td> <td class="textCenter">A</td> <td>CD</td> <td class="textCenter">HT</td> <td class="textCenter">C</td> <td class="textRight" nowrap="nowrap">64,759</td> <td class="textRight" nowrap="nowrap">$16,300</td> </tr> <tr><!-- 311 --> <td class="textCenter">2011</td> <td>CHEVROLET</td> <td>EQUINOX AWD 4C</td> <td>LT W/2LT</td> <td>BLACK</td> <td class="textCenter">S</td> <td class="textCenter">4</td> <td>GAS</td> <td class="textCenter">A</td> <td class="textCenter">AWD</td> <td class="textCenter">Y</td> <td>CD</td> <td class="textCenter">SR</td> <td class="textCenter">C</td> <td class="textRight" nowrap="nowrap">91,896</td> <td class="textRight" nowrap="nowrap">$4,400</td> </tr> <tr><!-- 312 --> <td class="textCenter">2011</td> <td>CHEVROLET</td> <td>TAHOE 4X4 V8</td> <td>LTZ</td> <td>WHITE</td> <td class="textCenter">S</td> <td class="textCenter">8</td> <td>C</td> <td class="textCenter">A</td> <td class="textCenter">4X4</td> <td class="textCenter">A</td> <td>N</td> <td class="textCenter">MR</td> <td class="textCenter">L</td> <td class="textRight" nowrap="nowrap">126,982</td> <td class="textRight" nowrap="nowrap">$17,800</td> </tr> <tr><!-- 313 --> <td class="textCenter">2011</td> <td>CHEVROLET</td> <td>1500 SLV 4X4 EX</td> <td>LT</td> <td>GRAY</td> <td class="textCenter">X</td> <td class="textCenter">8</td> <td>GAS</td> <td class="textCenter">O</td> <td class="textCenter">4X4</td> <td class="textCenter">A</td> <td>CD</td> <td class="textCenter">HT</td> <td class="textCenter">C</td> <td class="textRight" nowrap="nowrap">60,303</td> <td class="textRight" nowrap="nowrap">$18,100</td> </tr> <tr><!-- 314 --> <td class="textCenter">2011</td> <td>CHEVROLET</td> <td>1500 SLV 4X4 EX</td> <td>LT</td> <td>SILVER</td> <td class="textCenter">X</td> <td class="textCenter">8</td> <td>E</td> <td class="textCenter">O</td> <td class="textCenter">4X4</td> <td class="textCenter">A</td> <td>CD</td> <td class="textCenter">HT</td> <td class="textCenter">C</td> <td class="textRight" nowrap="nowrap">89,403</td> <td class="textRight" nowrap="nowrap">$15,900</td> </tr> <tr><!-- 315 --> <td class="textCenter">2011</td> <td>CHEVROLET</td> <td>1500 SLV 4X4 EX</td> <td>LTZ</td> <td>BLUE</td> <td class="textCenter">X</td> <td class="textCenter">8</td> <td>E</td> <td class="textCenter">A</td> <td class="textCenter">4X4</td> <td class="textCenter">A</td> <td>CD</td> <td class="textCenter">HT</td> <td class="textCenter">L</td> <td class="textRight" nowrap="nowrap">53,087</td> <td class="textRight" nowrap="nowrap">$17,700</td> </tr> <tr><!-- 316 --> <td class="textCenter">2011</td> <td>CHEVROLET</td> <td>3500 CUTAWAY</td> <td>WORK VAN</td> <td>WHITE</td> <td class="textCenter">S</td> <td class="textCenter"></td> <td></td> <td class="textCenter">A</td> <td class="textCenter">4X2</td> <td class="textCenter"></td> <td>N</td> <td class="textCenter">HT</td> <td class="textCenter">C</td> <td class="textRight" nowrap="nowrap">202,477</td> <td class="textRight" nowrap="nowrap">$2,700</td> </tr> <tr><!-- 317 --> <td class="textCenter">2011</td> <td>CHRYSLER</td> <td>TOWN &amp; COUNTRY</td> <td>TOURING</td> <td>BLACK</td> <td class="textCenter">4</td> <td class="textCenter">6</td> <td>E</td> <td class="textCenter">A</td> <td class="textCenter">4X2</td> <td class="textCenter">A</td> <td>CD</td> <td class="textCenter">HT</td> <td class="textCenter"></td> <td class="textRight" nowrap="nowrap">198,541</td> <td class="textRight" nowrap="nowrap">$1,900</td> </tr> <tr><!-- 318 --> <td class="textCenter">2011</td> <td>DODGE</td> <td>DURANGO AWD V6</td> <td>CREW</td> <td>BLUE</td> <td class="textCenter">S</td> <td class="textCenter">6</td> <td>GAS</td> <td class="textCenter">A</td> <td class="textCenter">AWD</td> <td class="textCenter">A</td> <td>CD</td> <td class="textCenter">SR</td> <td class="textCenter">C</td> <td class="textRight" nowrap="nowrap">176,036</td> <td class="textRight" nowrap="nowrap">$2,800</td> </tr> <tr><!-- 319 --> <td class="textCenter">2011</td> <td>FORD</td> <td>FOCUS</td> <td>SE</td> <td>SILVER</td> <td class="textCenter">4</td> <td class="textCenter">4</td> <td>GAS</td> <td class="textCenter">A</td> <td class="textCenter"></td> <td class="textCenter">Y</td> <td>CD</td> <td class="textCenter">HT</td> <td class="textCenter">C</td> <td class="textRight" nowrap="nowrap">101,929</td> <td class="textRight" nowrap="nowrap">$3,100</td> </tr> <tr><!-- 320 --> <td class="textCenter">2011</td> <td>FORD</td> <td>FUSION FWD 4C</td> <td>SEL</td> <td>WHITE</td> <td class="textCenter">4</td> <td class="textCenter">4</td> <td>GAS</td> <td class="textCenter">A</td> <td class="textCenter"></td> <td class="textCenter">Y</td> <td>CD</td> <td class="textCenter">SR</td> <td class="textCenter">L</td> <td class="textRight" nowrap="nowrap">78,290</td> <td class="textRight" nowrap="nowrap">$5,500</td> </tr> <tr><!-- 321 --> <td class="textCenter">2011</td> <td>FORD</td> <td>F150 4X4 CR</td> <td>XLT</td> <td>BLACK</td> <td class="textCenter">C</td> <td class="textCenter">8</td> <td>GAS</td> <td class="textCenter">A</td> <td class="textCenter">4X4</td> <td class="textCenter">Y</td> <td>CD</td> <td class="textCenter">HT</td> <td class="textCenter">C</td> <td class="textRight" nowrap="nowrap">70,909</td> <td class="textRight" nowrap="nowrap">$16,000</td> </tr> <tr><!-- 322 --> <td class="textCenter">2011</td> <td>FORD</td> <td>MUSTANG V6 CPE</td> <td>V6 PREMIUM</td> <td>BLACK</td> <td class="textCenter">2</td> <td class="textCenter">6</td> <td>GAS</td> <td class="textCenter">A</td> <td class="textCenter">4X2</td> <td class="textCenter">A</td> <td>CD</td> <td class="textCenter">HT</td> <td class="textCenter">L</td> <td class="textRight" nowrap="nowrap">92,531</td> <td class="textRight" nowrap="nowrap">$2,700</td> </tr> <tr><!-- 323 --> <td class="textCenter">2011</td> <td>GMC</td> <td>ACADIA FWD</td> <td>SLE</td> <td>RED</td> <td class="textCenter">4</td> <td class="textCenter">6</td> <td>GAS</td> <td class="textCenter">A</td> <td class="textCenter"></td> <td class="textCenter">A</td> <td>CD</td> <td class="textCenter">HT</td> <td class="textCenter">C</td> <td class="textRight" nowrap="nowrap">79,199</td> <td class="textRight" nowrap="nowrap">$10,700</td> A picture of the table test data is attached here:

      Here is the _query function, and all other relevant code that I can share.
       
      Func _query($aSel, $aUrls) $oIE = _login() If $oIE = "Return" Then Return EndIf $j = 0 While $j < UBound($aSel) - 1 $i = 1 $aucID ;Unable To Share What This Is Other Than Var Name. _IENavigate($oIE, "Something" & $aucID[0] & "Something") _IELoadWait($oIE, 100, 2000) $oObj = _IETableGetCollection($oIE, 3) $cars = _IETableWriteToArray_ProgressBar($oObj, True, "Processing Requested Information!") ;<---- Modified Version See Post For It: https://www.autoitscript.com/forum/topic/195335-solved-how-to-add-a-progress-bar-to-_ietablewritetoarray/?tab=comments#comment-1400699 $carsYear = _filter($cars, 0, 0, GUICtrlRead($year)) $carsMake = _filter($carsYear, 0, 1, GUICtrlRead($make)) Global $carsModel = _filter($carsMake, 0, 2, GUICtrlRead($model)) $i = 0 $engine = GUICtrlRead($engine) If $engine <> "" Then While $i < StringLen($engine) $carsEngine = _filter($carsModel, 0, 6 + $i, StringLeft($engine, 1)) ;_ArrayDisplay($carsModel, "Cars Model Before Array Delete") $x = 1 While $x <= UBound($carsModel) _ArrayDelete($carsModel, $x) $x += 1 WEnd ;_ArrayDisplay($carsModel, "Cars Model After Array Delete") ;_ArrayConcatenate($carsModel, $carsEngine) ;_ArrayDisplay($carsModel, "Cars Model After Concatenate") $engine = StringTrimLeft($engine, 1) $i += 1 WEnd Else Dim $carsEngine[1][16] EndIf _ArrayConcatenate($carsEngine, $carsModel) _ArrayDisplay($carsEngine, "Cars Engine") Dim $carsDriveTrain[1][16] Dim $carsDriveTrain2[1][16] $driveTrainVal = GUICtrlRead($driveTrain) If $driveTrainVal = "4x4" Or $driveTrainVal = "awd" Then $carsDriveTrain = _filter($carsEngine, 0, 9, "4") $carsDriveTrain2 = _filter($carsEngine, 0, 9, "a") ;~ _ArrayDisplay($carsDriveTrain, "Drive Train Before") ;~ If @error Then ;~ MsgBox("", "", "Cars Drive Train Error: " & @error) ;~ EndIf ;~ _ArrayDisplay($carsDriveTrain2, "Drive Train2 Before") ;~ If @error Then ;~ MsgBox("", "", "Cars Drive Train 2 Error: " & @error) ;~ EndIf _ArrayConcatenate($carsDriveTrain, $carsDriveTrain2) _ArrayDisplay($carsDriveTrain, "Drive Train After Concat") ElseIf $driveTrainVal = "" Then _ArrayConcatenate($carsDriveTrain, $carsEngine) Else $carsDriveTrain = _filter($carsEngine, 0, 9, $driveTrain) EndIf Dim $carsOdom[1][16] $min = GUICtrlRead($odomMin) $max = GUICtrlRead($odomMax) For $i = 0 To UBound($carsDriveTrain) - 1 If $carsDriveTrain[$i][14] > $min And $carsDriveTrain[$i][14] < $max Then _ArrayAdd($carsOdom, $carsDriveTrain[$i]) MsgBox("", "", "ADDED!") EndIf Next _ArrayDisplay($carsOdom, "Cars Odom") $j += 1 WEnd _IEQuit($oIE) EndFunc ;==>_query Func _filter($tofilter, $xpos1, $ypos1, $str) ;~ If UBound($tofilter, 1) <= 1 Then ;~ $endx = 0 ;~ Else ;~ $endx = UBound($tofilter, 1) - 1 ;~ EndIf ;~ $cars = _ArrayFindAll($tofilter, $str, $tofilter[$xpos1][$ypos1], $tofilter[$endx][$ypos1], 0, 1, $ypos1, False) $cars = _ArrayFindAll($tofilter, $str, Default, Default, 0, 1, $ypos1) Dim $carsFiltered[1][16] = [["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p"]] ;_ArrayDisplay($carsFiltered) $i = 0 $uBound = UBound($cars) - 1 While $i < $uBound $filtered = _ArrayExtract($tofilter, $cars[$i], $cars[$i], 0, 15) ;_ArrayDisplay($filtered, "_filter Array of Filtered") _ArrayConcatenate($carsFiltered, $filtered) $i += 1 WEnd _ArrayDelete($carsFiltered, 0) Return $carsFiltered EndFunc ;==>_filter  
      If you know of a more efficient way of doing this please let me know would be more than happy to chew down my inefficiency while learning! (It's like my grandpa used to say, "The only criticism I can't use is that which is not given to me.")
       
      The Item an I am using to test the filter is:

       
    • rm4453
      By rm4453
      Hello,
       
      I am currently writing a program that parses a massive table from a website, and need a way to add a progress bar while parsing.
      I am currently using the function _IETableWriteToArray($oObj, True) to parse the array. I need the progress bar to update as the table is parsed, not just at the end of the parsing.
      Any help at all would be very much appreciated!
       
      *EDIT --> The array I am left with after parsing is $array[0-50000][16]
    • SkysLastChance
      By SkysLastChance
      I have a goofy problem. I am hoping someone could shed some light. The example is not going around the text box. It is way off. 
      I have seen some post blaming IE 11, however I have IE11 on my desktop and it works fine.
      Is there anything I can do that might fix this? 
       
      ; Open a browser with the form example and get a reference to the form ; textarea element. Get the coordinates and dimensions of the text area, ; outline its shape with the mouse and come to rest in the center #include <IE.au3> Local $oIE = _IE_Example("form") Local $oForm = _IEFormGetObjByName($oIE, "ExampleForm") Local $oTextArea = _IEFormElementGetObjByName($oForm, "textareaExample") ; Get coordinates and dimensions of the textarea Local $iScreenX = _IEPropertyGet($oTextArea, "screenx") Local $iScreenY = _IEPropertyGet($oTextArea, "screeny") Local $iWidth = _IEPropertyGet($oTextArea, "width") Local $iHeight = _IEPropertyGet($oTextArea, "height") ; Outline the textarea with the mouse, come to rest in the center Local $iMousespeed = 50 MouseMove($iScreenX, $iScreenY, $iMousespeed) MouseMove($iScreenX + $iWidth, $iScreenY, $iMousespeed) MouseMove($iScreenX + $iWidth, $iScreenY + $iHeight, $iMousespeed) MouseMove($iScreenX, $iScreenY + $iHeight, $iMousespeed) MouseMove($iScreenX, $iScreenY, $iMousespeed) MouseMove($iScreenX + $iWidth / 2, $iScreenY + $iHeight / 2, $iMousespeed)  
       
    • SkysLastChance
      By SkysLastChance
      So I have two things I am trying to click.
      Policy which works.
      $oInputs3 = _IETagNameGetCollection($oIE, "div") For $oInput3 in $oInputs3 If StringStripWS($oInput3.innertext,1) = "Policy" Then $target = $oInput3 _IELoadWait($target,"",70000) ExitLoop EndIf Next _IEAction($target, "click")  

      And Add Insurance which I havent been able to get to work. 
      $oInputs2 = _IETagNameGetCollection($oIE, "div") For $oInput2 in $oInputs2 If StringStripWS($oInput2.innertext,1) = "Add Insurance" Then $target = $oInput2 _IELoadWait($target,"",70000) ExitLoop EndIf Next _IEAction($target, "click")

      Any Ideas on what I am doing wrong?  I feel like it might be the spaces between >  Add Insurance  < but I am not sure. 
    • FMS
      By FMS
      Hello,
      I'm trying to read a div element and wait until it hits 100%.
      The structure is like :
      <div class="progress-bar" style="width: 48.0219%;  overflow: hidden; "></div>
      And want to wait until :
      <div class="progress-bar" style="width: 100%;  overflow: hidden; "></div>
      because afther this there will be an redirection whish i don't know the URL from and want to catsh this URL.
      And want to push a button on this redidertion page.

      Is there a best pratice way how to do this or is there a better way to wait for the redirection?
      Maybe wait until button exist or something?

      Does anybody could give me some tips about this challange?
       
      thnx in advanced.
       
      #include <IE.au3> Global $IE_flvto = _IECreate("https://www.website.com/",0,1,1,1) Global $oForm = _IEFormGetObjByName ($IE_flvto, "convertForm") Global $oText = _IEFormElementGetObjByName ($oForm, "convertUrl") _IEFormElementSetValue ($oText, "some text") _IEFormSubmit($oForm) ;wait for redirection ;if redirection loaded push button  
×