Jump to content

Getting the elements of the element returns 'Variable must be of type "Object".'


Recommended Posts

Why this kind of code below, getting the tag name's element of the ID's element:
#include <IE.au3>
$oIE = _IECreate("http://www.example.com/", 0, 1, 1)
Sleep(5000)

$element = $oIE.document.getElementById("element_id")
$tags = $element.getElementsByTagName("IFRAME")

For $tag In $tags
   $msg = $tag.contentWindow.document.body
   MsgBox(0, "Message", $msg.innerHTML)
Next
And also this code, getting the class name's element of the ID's element:
#include <IE.au3>
$oIE = _IECreate("http://www.example.com/", 0, 1, 1)
Sleep(5000)

$element = $oIE.document.getElementById("element_id")
$classes = $element.getElementsByClassName("class_name")

For $class In $classes
   $msg = $class
   MsgBox(0, "Message", $msg.innerHTML)
Next

Returns the error 'Variable must be of type "Object".':

Variable must be of type "Object".:
MsgBox(0, "Message", $msg.innerHTML)
MsgBox(0, "Message", $msg^ ERROR

Instead of the inner HTML sources of the tag name's elements and the class name's elements?

What is the right way to do those?

Edited by Servant
Link to post
Share on other sites

Try this:

#include <IE.au3>
$oIE = _IECreate("http://www.example.com/", 0, 1, 1)
Sleep(5000)

Local $tags = _IETagNameGetCollection($oIE, "input")
$element = $oIE.document.getElementById("element_id")

For $tag In $tags
   $msg = $tag.contentWindow.document.body
   MsgBox(0, "Message", $msg.innerHTML)
Next
Edited by sammy1983
Link to post
Share on other sites
  • 2 months later...

Hello,

I have the same error message about iframe. I tried to start with the following methods :

_IETagNameGetCollection($oIE, "iframe")

_IEFrameGetObjByName($oIE, "HostedIFrame")

but it's impossible to find the html code, so "innerHtml" method fails with this error message.

Has anyone found a solution for Wayfarer ?

Thanks in advance and sorry for my english.

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 genius257
      I've made a library, based on AutoItObject UDF with the goal of implementing getter and setter functionality and make it possible to define new object properties in as few steps as possible.
      Thank you to @trancexx for getting me on the right track, and all users in Hooking into the IDispatch interface for the code to get me going.
      If I've forgotten to add credit, please let me know
      Example:
      #include "AutoItObject_Internal.au3" $myCar = IDispatch() $myCar.make = 'Ford' $myCar.model = 'Mustang' $myCar.year = 1969 $myCar.__defineGetter('DisplayCar', DisplayCar) Func DisplayCar($oThis) Return 'A Beautiful ' & $oThis.parent.year & ' ' & $oThis.parent.make & ' ' & $oThis.parent.model EndFunc MsgBox(0, "", $myCar.DisplayCar) More examples: https://github.com/genius257/AutoItObject-Internal/tree/master/Examples
      Version: 4.0.1
      AutoItObject_Internal.au3
      Documentation
      Edit2 (19th March 2017):
      First of all, sorry about the lack of updates on this project. I always start too many projects and end up ignoring old projects, if I run into problems ^^'.
      So I've started moving my AutoIt scripts to GitHub. I will still post the most recent script version here.
    • By sylremo
      I tried to implement the code in this topic:
      Firstly, i have no idea how these lines of code work but meanwhile i noticed that:
      ; Everytime autoit wants to call a method, get or set a property in a object it needs to go to ; IDispatch::GetIDsFromNames. This is our version of that function, note that by defining this ourselves ; we can fool autoit to believe that the object supports a lot of different properties/methods. Func __IDispatch_GetIDsFromNames($pSelf, $riid, $rgszNames, $cNames, $lcid, $rgDispId) ... EndFunc The problem is i ran into is that some object calls didn't go through IDispatch::GetIDsFromNames.
      Here is the code to replicate what i'm mentioning:
      I followed the example in the topic and tried to do the same thing with method .Documents (line 193) and .Open (line 194) but didn't get the same result because .Documents was being passed through __IDispatch_GetIDsFromNames while .Open didn't.
      $Au3_CallByName = 'Documents' Local $oDoc = $oAppl.Au3_CallByName $Au3_CallByName = 'Open' $oDoc = $oDoc.Au3_CallByName($sFilePath, $bConfirmConversions, $bReadOnly, $bAddToRecentFiles, $sOpenPassword, "", $bRevert, $sWritePassword, "", $iFormat) Console outputs:
      ==> The requested action with this object has failed.: $oDoc = $oDoc.Au3_CallByName($sFilePath, $bConfirmConversions, $bReadOnly, $bAddToRecentFiles, $sOpenPassword, "", $bRevert, $sWritePassword, "", $iFormat) $oDoc = $oDoc^ ERROR Is there any workarounds to solve this?

      Thank you!
    • By goku200
      I'm having an issue with my html paginated table. The script work as expected. It reads the html table and clicks on the Download button. However when it clicks on the next page its not iterating the items. instead it goes to the next URL from the spreadsheet and then iterates through the html table clicking the Download button and so on. Not sure why its doing that. I want it to click the next page and then continue iterating then after it has reached the end of the pagination go to the next url in the spreadsheet and repeat the process. Below is my script. Any help is appreciated 🙂
       
       
    • By Hermes
      Hi, I have a site that has the following elements below: 
      <div>More element here</div> <div>More element here</div> <div>More element here</div> When I do this in Auto It:
      Local $oSelectDiv = _WD_FindElement($sSession, $_WD_LOCATOR_ByCSSSelector, "div") _WD_HighlightElement($sSession, $oSelectDiv, 1) I also tried to add [3], but it doesnt seems to work:
      Local $oSelectDiv = _WD_FindElement($sSession, $_WD_LOCATOR_ByCSSSelector, "div[3]") _WD_HighlightElement($sSession, $oSelectDiv, 1) It always highlight the first one, but I am trying to highlight the 3rd in the list. Is there anyway to select the 3rd div without having to add any class/id in the divs, and without using XPATH? The structure of the elements in that site were built that way.
    • 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.
×
×
  • Create New...