如何通过VBA单击网页上的按钮?

时间:2017-06-26 18:12:29

标签: html vba web-scraping

我试图通过vba单击一个按钮,但它告诉我“对象不支持此属性或方法”。

我的VBA代码现在是:

<button class="qm_historyTab_GoButton" type="submit" style="font:normal 11px tahoma,arial,helvetica,sans serif;">
  <span class="qm_historyTab_GoButtonText">GO</span>
</button>

按钮的HTML是:

 import { Injectable } from '@angular/core';
 import { Http, Response, Headers } from '@angular/http';
 import 'rxjs/add/operator/map';
 import { Observable } from 'rxjs/Observable';
 import 'rxjs/add/observable/throw';
 import 'rxjs/add/operator/catch';



 @Injectable()
 export class ExampleService {

    headers: Headers;

    constructor(private http: Http) {
            this.headers = new Headers();
            this.headers.append('Content-Type', 'application/json; charset=utf-8');
            this.headers.append('Accepts', '*/*');
            // this.headers.append()
    }

  service1() {

     let url = 'http://example.com/products';
     return this.http.get(url, this.headers).map((resp: Response) => { 
                    console.log('resp status', resp.status);
                    return resp.json();
            }).catch((resp: Response) => {
                    let details = resp.json();
                    console.log(resp.status); // here you get the error code in your case 401
                    return Observable.throw(details);
            });
  }
}

2 个答案:

答案 0 :(得分:1)

试试这个:

IE.document.getElementsByTagName("button") _
   .getelementsByClassName("qm_historyTab_GoButton")(0).Click

两个getXXX方法都会返回一个项目集合(即使文档中只有一个匹配项),所以要解决上一个项目中的单个项目,以便点击它需要添加(0)

编辑:如果目的是提交表单,那么这也将有效

IE.document.getElementById("qm_historyForm_7871").submit

或者只有一个带有该类名的按钮:

IE.document.getElementsByClassName("qm_historyTab_GoButton")(0).Click

答案 1 :(得分:0)

好的,所以我在这个特定的例子中找到了解决方案。该按钮是提交类型,使用HTMLInputElement发送消息。

我需要做的是在我的参考资料中添加“Microsoft HTML Object Library”并使用这些功能。

我必须创建发送响应的变量:

Dim htmlInput As MSHTML.HTMLInputElement

我无法弄清楚如何单独引用这个特定元素,所以我用它的类名抓取了所有内容。

For Each htmlInput In IE.document.getElementsByClassName("qm_historyTab_GoButton") If Trim(htmlInput.Type) = "submit" Then htmlInput.Click Exit For End If Next htmlInput

然后我让程序循环浏览系列中的每个项目并发送提交响应。因为这是唯一一个有班级名字的人,所以我很幸运。

无论如何,这就是我解决问题的方法。