【问题标题】:Trouble selecting item from dropdown options using IE使用 IE 从下拉选项中选择项目时遇到问题
【发布时间】:2017-12-06 20:42:50
【问题描述】:

我正在尝试单击下拉选项并从中选择任何项目,但未执行单击事件。一旦浏览器点击包含elem.click 的行,它就会抛出错误object variable or with block variable not set。我该如何修补我的以下努力以使其成功?提前感谢您的任何解决方案。

到目前为止我尝试过的是:

Dim Hdoc as HTMLDocument, elem as object, s_item as object

Set Hdoc = IE.Document    ''here IE as New InternetExplorer
Set elem = Hdoc.getElementById("select")
elem.Click     ''error thrown here showing Object variable or with block ----

For Each s_item In Hdoc.getElementsByTagName("option")
    If InStr(1, s_item.innerText, "Asia Pacific Ex-Japan Fund", 1) > 0 Then s_item.Click: Exit For
Next s_item

嵌入选择按钮和下拉选项的元素:

<html>
 <body>
  <select id="select" name="select" onchange="redirect(this.value);" style="width: 165px;">
   <option value="">
    Select a fund
   </option>
   <option value="/wps/myportal/mfs/non-us-advisor/products/meridian-funds/!ut/p/a1/04_Sj9CPykssy0xPLMnMz0vMAfGjzOL9A40C_c09jAzcjYOdDYxcTPyNTUONDS1NjPW99KPSc_KTwEojHfOSjC3S9aOKUtNSi1KL9DLyi0v0I8rLy_Vy04r1kvNz9cOd9aMCEjMLMxz1C7KjkiodFRUBO3AG8w!!/dl5/d5/L2dJQSEvUUt3QS80SmlFL1o2X09RMlFPN0gyMEczU0MwMkQ0TzM1VTMxRk8y/?clearPortletSession=true&amp;productId=480&amp;shareId=33&amp;viewMode=profile">
    <!-- Do Nothing -->
    Absolute Return Fund
   </option>
   <option value="/wps/myportal/mfs/non-us-advisor/products/meridian-funds/!ut/p/a1/04_Sj9CPykssy0xPLMnMz0vMAfGjzOL9A40C_c09jAzcjYOdDYxcTPyNTUONDS1NjPW99KPSc_KTwEojHfOSjC3S9aOKUtNSi1KL9DLyi0v0I8rLy_Vy04r1kvNz9cOd9aMCEjMLMxz1C7KjkiodFRUBO3AG8w!!/dl5/d5/L2dJQSEvUUt3QS80SmlFL1o2X09RMlFPN0gyMEczU0MwMkQ0TzM1VTMxRk8y/?clearPortletSession=true&amp;productId=1466&amp;shareId=33&amp;viewMode=profile">
    <!-- Do Nothing -->
    Asia Pacific Ex-Japan Fund
   </option>
   <option value="/wps/myportal/mfs/non-us-advisor/products/meridian-funds/!ut/p/a1/04_Sj9CPykssy0xPLMnMz0vMAfGjzOL9A40C_c09jAzcjYOdDYxcTPyNTUONDS1NjPW99KPSc_KTwEojHfOSjC3S9aOKUtNSi1KL9DLyi0v0I8rLy_Vy04r1kvNz9cOd9aMCEjMLMxz1C7KjkiodFRUBO3AG8w!!/dl5/d5/L2dJQSEvUUt3QS80SmlFL1o2X09RMlFPN0gyMEczU0MwMkQ0TzM1VTMxRk8y/?clearPortletSession=true&amp;productId=139597&amp;shareId=33&amp;viewMode=profile">
    <!-- Do Nothing -->
    Blended Research European Equity Fund
   </option>
   <option value="/wps/myportal/mfs/non-us-advisor/products/meridian-funds/!ut/p/a1/04_Sj9CPykssy0xPLMnMz0vMAfGjzOL9A40C_c09jAzcjYOdDYxcTPyNTUONDS1NjPW99KPSc_KTwEojHfOSjC3S9aOKUtNSi1KL9DLyi0v0I8rLy_Vy04r1kvNz9cOd9aMCEjMLMxz1C7KjkiodFRUBO3AG8w!!/dl5/d5/L2dJQSEvUUt3QS80SmlFL1o2X09RMlFPN0gyMEczU0MwMkQ0TzM1VTMxRk8y/?clearPortletSession=true&amp;productId=3014&amp;shareId=33&amp;viewMode=profile">
    <!-- Do Nothing -->
    Continental European Equity Fund
   </option>
   <option value="/wps/myportal/mfs/non-us-advisor/products/meridian-funds/!ut/p/a1/04_Sj9CPykssy0xPLMnMz0vMAfGjzOL9A40C_c09jAzcjYOdDYxcTPyNTUONDS1NjPW99KPSc_KTwEojHfOSjC3S9aOKUtNSi1KL9DLyi0v0I8rLy_Vy04r1kvNz9cOd9aMCEjMLMxz1C7KjkiodFRUBO3AG8w!!/dl5/d5/L2dJQSEvUUt3QS80SmlFL1o2X09RMlFPN0gyMEczU0MwMkQ0TzM1VTMxRk8y/?clearPortletSession=true&amp;productId=165855&amp;shareId=33&amp;viewMode=profile">
    <!-- Do Nothing -->
    Diversified Income Fund
   </option>
  </select>
 </body>
</html>

【问题讨论】:

  • elem 对象的click 方法失败,因为没有elem 对象

标签: vba excel internet-explorer web-scraping


【解决方案1】:

你能运行这个吗?我想这是因为 Hdoc 没有时间设置

    Dim Hdoc As HTMLDocument, elem As Object, s_item As Object

    Set Hdoc = IE.Document    ''here IE as New InternetExplorer
    Set elem = Hdoc.getElementById("select")
    Application.Wait(Now + TimeValue("00:00:02"))
    elem.Click     ''error thrown here showing Object variable or with block ----

    For Each s_item In Hdoc.getElementsByTagName("option")
        If InStr(1, s_item.innerText, "Asia Pacific Ex-Japan Fund", 1) > 0 Then s_item.Click: Exit For
    Next s_item

【讨论】:

  • 我运行了您建议的部分,发现脚本在点击我在帖子中提到的特定行时抛出了相同的错误。这就是为什么MsgBox 永远不会出现的原因。谢谢。
  • @Topto 这可能是因为 elem 尚未设置(这可能发生在多线程中) - 我已经更新了应该对此进行排序的代码
  • @Topto 我想我知道出了什么问题 - 从上面的代码的 sn-p 看起来你似乎正在使用 HTTP 请求。如果是这种情况,那么'.Click' 功能将不起作用,因为这是 Internet Explorer 功能,因此您需要将其视为 IE 模拟,而不是 (Set IE = CreateObject("InternetExplorer.Application")) 您能显示所有代码吗?
  • 请不要假设性地评判我。我是这样开始的:Dim IE As New SHDocVw.InternetExplorer With IE .Visible = True .navigate URL Do While .readyState &lt;&gt; READYSTATE_COMPLETE: Loop Set HTMLDoc = .document End With
猜你喜欢
  • 1970-01-01
  • 2021-11-19
  • 1970-01-01
  • 1970-01-01
  • 2019-09-10
  • 1970-01-01
  • 2014-08-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多