在IE窗口中填写表单:按下按钮并填写文本框

时间:2018-10-10 15:15:06

标签: excel vba internet-explorer web-scraping

我正在尝试自动填充重复且耗时的IE网站。

我编写了启动IE的代码,使它对用户可见,使需要填写的变量变暗。

我找到了文本框的ID和名称,但我无法填写。

该网站是公司网站,因此我无法附加链接。

我可以附加要填充的框的HTLM代码和要单击的按钮。

文本框

<input name="ctl00$m$g_8fbfd2b6_3945_4bee_9a3b_20cfc2c846af$ctl00$grdLineItems$ctl02$txtDescription" 
 type="text"
 id="ctl00_m_g_8fbfd2b6_3945_4bee_9a3b_20cfc2c846af_ctl00_grdLineItems_ctl02_txtDescription"
 class="txtDescription" 
 onkeydown="return (event.keyCode!=13);" 
 style="width:680px;margin-top:2px;margin-bottom:2px" />

按钮点击

<input type="submit"
 name="ctl00$m$g_8fbfd2b6_3945_4bee_9a3b_20cfc2c846af$ctl00$ButtonAdd" 
 value="Add New Item"
 id="ctl00_m_g_8fbfd2b6_3945_4bee_9a3b_20cfc2c846af_ctl00_ButtonAdd"
 style="color:Black;background-color:White;font-size:Medium;font-weight:bold;width:150px;"/>

我尝试了不同的方法。我尝试按名称获取文本框,但是文档命令出现错误。

我的密码

Sub Fill_in_eShipper()

Dim IE As Object Dim web_address As String
Dim number_of_elements As Integer 
Dim MydataSet As Variant 
Dim ObjCollection As Object 

Windows("eshipper filler.xlsm").Activate

Set IE = CreateObject("InternetExplorer.Application")

web_address = Range("c2") Range("D2").Formula = "=ROWS(A1:A161)-1"
number_of_elements = Range("d2") 

IE.navigate web_address 
IE.Visible = True

While IE.Busy DoEvents 'Wait till IE is done loading Wend

'Number of elements to populate 
Range("A1").Select
Range(Selection, Selection.End(xlDown)).Select 

Range("D1").Select
ActiveCell.FormulaR1C1 = "=ROWS(RC[-3]:R[160]C[-3])-1"   

IE.document.getelementsbyid("ctl00_m_g_8fbfd2b6_3945_4bee_9a3b_20cfc2c846af_ctl00_grdLineItems_ctl02_txtDescription").Value = Range("A2")
IE.document.All("ctl00$m$g_8fbfd2b6_3945_4bee_9a3b_20cfc2c846af$ctl00$ButtonAdd").Click

End Sub

2 个答案:

答案 0 :(得分:1)

尝试-将Elements更改为Element,并仅保留.getElementById进行点击。

IE.document.getElementById("ctl00_m_g_8fbfd2b6_3945_4bee_9a3b_20cfc2c846af_ctl00_grdLineItems_ctl02_txtDescription").Value = Range("A2")
IE.document.getElementById("ctl00_m_g_8fbfd2b6_3945_4bee_9a3b_20cfc2c846af_ctl00_ButtonAdd").Click

答案 1 :(得分:1)

在现有答案中,已经为您提供了最好的选择器方法,那就是使用元素id属性。

以下是使用页面上的CSS和id选择器(“ #”)的同一事物的替代语法。

With ie.document
    .querySelector("#ctl00_m_g_8fbfd2b6_3945_4bee_9a3b_20cfc2c846af_ctl00_grdLineItems_ctl02_txtDescription").Value = Range("A2")
    .querySelector("#ctl00_m_g_8fbfd2b6_3945_4bee_9a3b_20cfc2c846af_ctl00_ButtonAdd").Click
End With