使用vba在网站的打开框中选择单选按钮/输入值

时间:2018-09-12 05:24:02

标签: excel vba

我正在尝试打单选按钮问题,并希望在打开的文本框中也输入值(使用VBA)。以下是我正在使用的脚本。

我尝试了多种方法,也浏览了其他网站,但是它不起作用。

如果有人可以指导我,那就太好了。

Dim IE As Object
Dim Region, VOCSentDate As String

Sheets("Sheet1").Select
Region = ThisWorkbook.Worksheets("Sheet1").Range("A1").Value
VOCSentDate = ThisWorkbook.Worksheets("Sheet1").Range("B1").Value

Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
IE.Navigate "website link....."
Application.StatusBar = "Submitting"
While IE.Busy
DoEvents
Wend

我不确定如何打单选按钮问题。我在下面尝试了“打开”文本框的3种类型,但是它们都不起作用,抛出对象必需的错误

IE.Document.getElementById("ctl00_body_7F22FA6E-5D77-426A-AA84-68D833FA05C1_3").Value = VOCSentDate

IE.Document.getElementById("ctl00_body_7F22FA6E-5D77-426A-AA84-68D833FA05C1_3").innerText = VOCSentDate

IE.Document.all("ctl00_body_7F22FA6E-5D77-426A-AA84-68D833FA05C1_3").Value = VOCSentDate

Application.StatusBar = "Form Submitted"
IE.Quit
Set IE = Nothing

--------------单选按钮的HTML --------------

<div class="SurveyItem  RadioButtonList Item1">
  <div class="ItemText">
    <span class="NoItemNumber"></span><span class="QuestionText">Please select your region:</span>
  </div>
  <div class="Validators">
    <span id="ctl00_body_ctl12" style="color:Red;display:none;">A response to this question is required</span>
  </div>
  <div id="ctl00_body_01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1" class="Response">
    <div class="ResponseOption">
      <input id="ctl00_body_01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1_1" type="radio" name="ctl00$body$ctl00_body_ctl00_01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1" value="01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1_1" /><label for="ctl00_body_01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1_1">Americas</label>
    </div>
    <div class="ResponseOption AlternatingRow">
      <input id="ctl00_body_01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1_2" type="radio" name="ctl00$body$ctl00_body_ctl00_01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1" value="01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1_2" /><label for="ctl00_body_01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1_2">ANZ</label>
    </div>
    <div class="ResponseOption">
      <input id="ctl00_body_01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1_3" type="radio" name="ctl00$body$ctl00_body_ctl00_01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1" value="01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1_3" /><label for="ctl00_body_01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1_3">APAC</label>
    </div>
    <div class="ResponseOption AlternatingRow">
      <input id="ctl00_body_01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1_4" type="radio" name="ctl00$body$ctl00_body_ctl00_01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1" value="01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1_4" /><label for="ctl00_body_01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1_4">APME</label>
    </div>
    <div class="ResponseOption">
      <input id="ctl00_body_01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1_5" type="radio" name="ctl00$body$ctl00_body_ctl00_01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1" value="01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1_5" /><label for="ctl00_body_01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1_5">Europe</label>
    </div>
    <div class="ResponseOption AlternatingRow">
      <input id="ctl00_body_01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1_6" type="radio" name="ctl00$body$ctl00_body_ctl00_01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1" value="01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1_6" /><label for="ctl00_body_01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1_6">India</label>
    </div>
    <div class="ResponseOption">
      <input id="ctl00_body_01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1_7" type="radio" name="ctl00$body$ctl00_body_ctl00_01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1" value="01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1_7" /><label for="ctl00_body_01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1_7">North America</label>
    </div>

-------------------开放式HTML ------------------------ -

<div class="SurveyItem  Item3">
  <div class="ItemText">
    <span class="NoItemNumber"></span><span class="QuestionText">EOPR First Sent Date (dd/mm/yyyy)</span>
  </div>
  <div class="Validators">
    <span id="ctl00_body_ctl52" style="color:Red;display:none;">A response to this question is required</span><span id="ctl00_body_ctl53" style="color:Red;display:none;">Incorrect Date Format</span>
  </div>
  <div class="Response">
    <input name="ctl00$body$01EE9560-B1F9-4BA3-A922-9D53A1120FC2_3" type="text" id="ctl00_body_01EE9560-B1F9-4BA3-A922-9D53A1120FC2_3" class="TextBox" />
  </div>
</div>

2 个答案:

答案 0 :(得分:1)

tl; dr;

以下内容基于所示的HTML。如果涉及父标签form/frame/iframe,则在进行以下选择之前,还需要对其进行协商。


单选按钮:

对于单选按钮,可以使用CSS选择器组合定位页面样式并返回所有单选按钮元素的nodeList。然后,您可以按索引选择适当的按钮

Dim aNodeList As Object
Set aNodeList = ie.document.querySelectorAll(".ResponseOption [type=radio]")
aNodeList.item(0).Click '<==Select first  option

我认为点击可能是此处的一种方法,因为我看不到选中的属性,否则语法为aNodeList.item(0).checked = True

返回的nodeList按索引如下


文本框:

输入框有一个ID,因此您可以使用ID选择器#定位

ie.document.querySelector("#ctl00_body_01EE9560-B1F9-4BA3-A922-9D53A1120FC2_3").Value = "myText"

答案 1 :(得分:0)

要选择单选按钮样式输入,请将选中的属性设置为true。

IE.Document.getElementById("ctl00_body_01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1_6").checked = true

输入文本框获取其值集。

IE.Document.getElementById("ctl00_body_01EE9560-B1F9-4BA3-A922-9D53A1120FC2_3").value = format(VOCSentDate, "d/m/yy")