Carlos
Carlos

Reputation: 21

get data from a webpage with VBA

I would like to extract from a webpage some data with VBA. This is an invoicing program and I am trying to access the first line of data which is the product description I am not an expert is these matters, but I looked into the html code being one of the fields of data and it looks like this:

    <td class="">
       <div class="UITextbox length length_maximum-255" data-tag="product_code" data-ui-widget="UITextbox"><span class="field"><input autocomplete="off" id="sales_invoice_line_items_attributes_0_product_code" name="sales_invoice[line_items_attributes][0][product_code]" readonly="readonly" size="30" type="text" /></span></div>
    </td>
    <td class="">
       <div class="UITextbox presence length length_maximum-200" data-tag="description" data-ui-widget="UITextbox"><span class="field"><input autocomplete="off" id="sales_invoice_line_items_attributes_0_description" name="sales_invoice[line_items_attributes][0][description]" size="30" type="text" /></span></div>
    </td>
    <td class="hidden numeric">
       <div class="UIHiddenField" data-tag="item_id" data-ui-widget="UIHiddenField"><input autocomplete="off" id="sales_invoice_line_items_attributes_0_item_id" label="false" name="sales_invoice[line_items_attributes][0][item_id]" type="hidden" /></div>
    </td>
    <td class="numeric">
       <div class="UIDecimal presence numericality numericality_greater_than_or_equal_to-0 ensurenotgreaterthanmaxnumber ensurenotgreaterthanmaxnumber_maximum-99999999" data-tag="quantity" data-ui-widget="UIDecimal"><span class="field"><input class="hidden" name="sales_invoice[line_items_attributes][0][quantity]" type="hidden" value="0.00" /><input autocomplete="off" class="visible" data-scale="2" id="sales_invoice_line_items_attributes_0_quantity" name="" size="30" type="text" value="0,00" /></span></div>
    </td>
    <td class="">
       <div class="UIDropdown" data-tag="unit_type" data-ui-widget="UIDropdown">
       <span class="field"><select autocomplete="off" id="sales_invoice_line_items_attributes_0_unit_type" name="sales_invoice[line_items_attributes][0][unit_type]">

I tried this so far with no results:

    Dim desc as string
          
    desc = ie.Document.getElementsByClassName("UITextbox presence length length_maximum-200")(0).innerText

The following code has no errors, but no value either.

Upvotes: 0

Views: 96

Answers (2)

Carlos
Carlos

Reputation: 21

Perhaps this is not the most eficient way, but I couldnt find any other way, so I just used sendkeys to simulate the keypress that adds a new record, since I could not have the fire event to work. Thanks for your help Ricardo

      IE.Document.getElementById("sales_invoice_line_items_attributes       _0_description").Value ="LINE 1 DESCRIPTION" 

     SendKeys "-"
     SendKeys "{ENTER}"

   IE.Document.getElementById("sales_invoice_line_items_attributes_1_description").Value ="LINE 2 DESCRIPTION" 

Upvotes: 0

Ricardo A
Ricardo A

Reputation: 1815

There isnt any Text in the Div you are looking at:

<div class="UITextbox presence length length_maximum-200" data-tag="description" data-ui-widget="UITextbox">
    <span class="field">
        <input autocomplete="off" id="sales_invoice_line_items_attributes_0_description" name="sales_invoice[line_items_attributes][0][description]" size="30" type="text" />
    </span>
</div>

But the Input has an ID that you can use to get the value from

desc = ie.Document.getElementByID("sales_invoice_line_items_attributes_0_description").value

Upvotes: 0

Related Questions