Sign in to follow this  
Followers 0
timmalos

IE.au3 and Javascript :Wait page AND javascript fully loaded

7 posts in this topic

#1 ·  Posted (edited)

Hi guys.

First of all, i hope u will understand my problem as i'm French and i'm not very good in English.

I got a trouble with my simulation.

I want to create a script that do some actions on a webpage. I use IE.au3, but the page is a full javascript application, so when IE is fully loaded (and _IELoadWait() ends) some content is still created dynamically by Javascript.

Before i can do my job and click on a button with DOM functions, i need to really WAIT javascript's work is finished.

Is there a way to do it?

Thx for ur help,

Tim

Edited by timmalos

Share this post


Link to post
Share on other sites



Is there a way to do it?

I doubt it. Here are two things that MIGHT work:

Look around the page and find an element that is dynamically created.

Then, using IE.au3, continuously poll for data about this element. When it succeeds/gives-empty data, you know the page exists and the Javascript is loaded, as Javascript created that element in the first place.

Option 2:

Use a hard coded timer or user input. This may work depending on the complexity of the javascript, operating environment etc.


ongoing projects:-firestorm: Largescale P2P Social NetworkCompleted Autoit Programs/Scripts: Variable Pickler | Networked Streaming Audio (in pure autoIT) | firenet p2p web messenger | Proxy Checker | Dynamic Execute() Code Generator | P2P UDF | Graph Theory Proof of Concept - Breadth First search

Share this post


Link to post
Share on other sites

#3 ·  Posted (edited)

I currently use your option 2 with sleeps, but i want to do better as i need to make a general solution (because i generate these simulations automatically and don't know how many sleeps i need to put in seach simulation).

Furthermore, i need to get the exact time the simulation takes (monitoring/supervision task) and with sleeps i can't have a good timer.

Your option 1 would be great but like in my first sentence i must do as if i didn't know the relevant page. Hence i can't say ok i wait for THIS element to be load. But maybe is it possible to add myself an element at the end of the page with Javascript and wait for him to answer? I don't think so cause he will be inserted by another Javascript thread regardless to the javascript running by IE, but maybe someone can have an idea.

Edited by timmalos

Share this post


Link to post
Share on other sites

#4 ·  Posted (edited)

Any idea?

Edited by timmalos

Share this post


Link to post
Share on other sites

So you know enough about the pages to be able to manipulate them after they are loaded, but not enough to know what dynamic elements you can look for on the page? This sounds strange - perhaps you need to explain in more detail.

There is no general answer to your question. The Ajax processing is asyncronous and there is no way for the browser to know whether it is complete or not. You'll need to apply your knowledge about the pages to devise a scheme that works for you.

Dale


Free Internet Tools: DebugBar, AutoIt IE Builder, HTTP UDF, MODIV2, IE Developer Toolbar, IEDocMon, Fiddler, HTML Validator, WGet, curl

MSDN docs: InternetExplorer Object, Document Object, Overviews and Tutorials, DHTML Objects, DHTML Events, WinHttpRequest, XmlHttpRequest, Cross-Frame Scripting, Office object model

Automate input type=file (Related)

Alternative to _IECreateEmbedded? better: _IECreatePseudoEmbedded  Better Better?

IE.au3 issues with Vista - Workarounds

SciTe Debug mode - it's magic: #AutoIt3Wrapper_run_debug_mode=Y Doesn't work needs to be ripped out of the troubleshooting lexicon. It means that what you tried did not produce the results you expected. It begs the questions 1) what did you try?, 2) what did you expect? and 3) what happened instead?

Reproducer: a small (the smallest?) piece of stand-alone code that demonstrates your trouble

Share this post


Link to post
Share on other sites

Would it be possible to get the HTML source every second or so and search the source (string) for whatever dynamic elements are available?

Share this post


Link to post
Share on other sites

So you know enough about the pages to be able to manipulate them after they are loaded, but not enough to know what dynamic elements you can look for on the page? This sounds strange - perhaps you need to explain in more detail.

I mean i can manipulate the page after she is loaded because my scenario does it. But This scenario is generated by a robot. The human (who don't know anything about Autoit) say : I want to do this and this on this page.So my scenario does these actions after the page is loaded.That could work if i asked my user to say to my robot : "The last element loading is ..." but generally he won't be able because he dosn't know anything in development.

That's why i asked a 'general solution' so that my robot wait with _IeLoadWait and do some actions to verify the page is well loaded and then do what the user asked.

But it seems impossible so i'll open a support for each scenario : If there is a problem i'll correct the scenaio manually myself.

Edit : Or something i could do using GMK idea is : The first time scenario is launch, he wait some time with Sleep() for example, each second he get the DOM source and see which element is the last (or at least in the lasts), write it and then use this element next.

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
Sign in to follow this  
Followers 0

  • Similar Content

    • nassausky
      By nassausky
      Hi all,
       
      Anyone have any idea how to close all open tabs except a specific one I manually open.  Assuming I don't know what is open in all the tabs except just the one I want to keep open.
       
      I didn't want to use sendkeys and I was trying to use the following code to list the title (or url) of the 3 open tabs and  after I got that part working I would just close the other 2. This sample only displays the title of the first open tab
      #include <IE.au3> Const $ie_new_in_tab = 0x0800 $oIE = _IECreate("https://www.autoitscript.com") __IENavigate($oIE, "https://www.autoitscript.com/forum/", 1, $ie_new_in_tab) ;(obj,url,wait,param) __IENavigate($oIE, "https://www.google.com/", 1, $ie_new_in_tab) ;(obj,url,wait,param) Local $aIE[1] $aIE[0] = 0 Local $i = 1, $oIE While 1     $oIE = _IEAttach("", "instance", $i)     If @error = $_IEStatus_NoMatch Then ExitLoop     ConsoleWrite(_IEPropertyGet($oIE, "title") & @CRLF)     ReDim $aIE[$i + 1]     $aIE[$i] = $oIE ;each item holds object     $aIE[0] = $i ;first item holds count     $i += 1 WEnd MsgBox($MB_SYSTEMMODAL, "Browsers Found", "Number of browser instances in the array: " & $aIE[0]) ; This doesn't return the list of tabs in the console just the first tab  
      Thanks for any and all help
    • toto22
      By toto22
      I'm trying to click on Java Dropbox using IE. However, I'm running into problems. There is a Dropbox "Please Select" with two options "Buy" and "Sell".
      I'm able to click on a drop box (please see code below) but i'm unable to select "Buy" or "Sell"".
      Local $sMyString = "Please Select" ;############ ENTER ############# Local $oLinks = _IELinkGetCollection($oIE) For $oLink In $oLinks Local $sLinkText = _IEPropertyGet($oLink, "innerText") If StringInStr($sLinkText, $sMyString) Then _IEAction($oLink, "click") ExitLoop EndIf Next  
      Please help
       
         
    • Gowrisankar
      By Gowrisankar
      Hello everyone,
      I'm working on a task where, a PDF file is opened (in IE browser) when I click a link in a website.
      I have to read the first page of the PDF to find particular strings. Can you please share some ideas?
    • Seminko
      By Seminko
      Hey,
      i would like to set a value into an INPUT field.
      Checked the _IEFormElementSetValue function but that does require _IEFormGetObjByName and this is where the problem comes in. The input field I want to write to is not a part of a form tag. It is part of a table.
      <input type="text" class="w2" id="nabidka_vozidel_formular_tach_od" name="nabidka_vozidel_formular_tach_od" onchange="GLOBAL.pocetInzerceNZ(&quot;nabidka_vozidel_formular&quot;,&quot;tach_od&quot;,&quot;&quot;);" autocomplete="off"> I tried this but that didn't work:
      $oDownloadSamples = _IEGetObjById($oIE, "nabidka_vozidel_formular_tach_od") _IEFormElementSetValue($oDownloadSamples, "123") If you want to try the site I'm working with is https://www.tipcars.cz/. There is a menu on the top left hand side and if you click the "vyhledat" button the input fields will show up.
      Thanks
    • Seminko
      By Seminko
      I am now able to populate the dropdown menus at https://www.tipcars.com/.
      The dropdowns are dynamic and do not have a Text value, only ids.
      Is there a way to get all the available options from a dropdown?
      $url = "https://www.tipcars.com/" $oIE = _IECreate($url) _IELoadWait($oIE) $oDownloadSamples = _IEGetObjById($oIE, "homepage_vyhl_frm_vozidlo") _IEFormElementOptionSelect($oDownloadSamples, "C") Above code, populates ID 'C' into the 'druh' dropdown, which results in selecting 'užitkové'. 
      Is there a way so I can grab all of the options from the dropdown menu? I could easily grab all the IDs but I am afraid they will change in the future so I would much rather match the text titles and assign the option IDs grabbed from site.
      This is what the options are according to Chrome:
      <select class="w1"id="homepage_vyhl_frm_vozidlo"name="homepage_vyhl_frm_vozidlo"onchange="try{NABIDKA_VOZIDEL_FORMULAR.naplnSelectZnacka('homepage_vyhl_frm');GLOBAL.pocetInzerceHZ('homepage_vyhl_frm','vozidlo');}catch(ex){odeslatJsChybu('formHOMEPAGE onChange 1: ' + ex.message, 'formHomePage onChange 1', -1);}"> <option value="A" style="color: black;">osobní a terénní (56 334)</option> <option value="C" style="color: black;">užitkové (4 333)</option> <option value="D" style="color: black;">nákladní (3 742)</option> <option value="E" style="color: black;">autobusy (56)</option> <option value="F" style="color: black;">obytné (373)</option> <option value="G" style="color: black;">přívěsy (1 179)</option> <option value="J" style="color: black;">motorky (780)</option> <option value="S" style="color: black;">pracovní stroje (605)</option> <option value="L" style="color: black;">ostatní (235)</option></select> Also, this cannot be grabbed by _INetGetSource.
      Thanks