【问题标题】:Filling forms in an IE Window: Press buttons and fill in text boxes在 IE 窗口中填写表格:按下按钮并填写文本框
【发布时间】:2018-10-10 15:15:06
【问题描述】:

我正在尝试自动填充重复且耗时的 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

【问题讨论】:

  • 欢迎使用 Stack Overflow - 请确保以正确的格式添加您的代码,以便我们能够轻松查看 - 下次,只需从您的模块中复制并粘贴代码,突出显示整个块,然后按 Ctrl + K。
  • 语法是.getElementById,而不是getElementsById

标签: excel vba internet-explorer web-scraping


【解决方案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

【讨论】:

  • 简洁明了。+
  • @QHarr 现在我使用 querySelector,但我只是想修正他在当前语法中的小错误 :)
  • 大声笑。您的答案更适合解释错误,并且您选择了最快的选择器。很高兴听到对 querySelector 的喜爱!呜呜呜。
  • @QHarr 哦,是的...... querySelector(和你)在我即将结束的这个可怕的程序中为我节省了无数小时(万岁!)。
  • 恭喜进步!
【解决方案2】:

你已经在现有答案中得到了最好的选择器方法,即使用元素 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

【讨论】:

  • 嗨,谢谢你的指点我试过查询选择器和我得到相同的错误对象'IWEBBrowser2'的方法'文档'失败
  • 尝试将 ie 声明为新的 InternetExplorerMedium
  • 这有什么不同吗?
  • 不,一直在试验网站,查看我手动输入的变量。该值不存在,直到您保存然后写入它。在保存之前没有任何价值。这很常见吗?
猜你喜欢
  • 2017-03-26
  • 2020-05-12
  • 1970-01-01
  • 1970-01-01
  • 2017-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多