再谈QT模拟点击<a>标签

来源:互联网 发布:zol买手机 知乎 编辑:程序博客网 时间:2024/06/07 20:31

最近公司要求做一个信息搜集工具,在百度地图输入学校名称, 然后把左侧列出的所有学校的名称, 电话, 地址, 保存在一个excel文件里面。如果只有几条数据就能不用点击下一页, 而当搜过列出成千上万条数据时,就需要一页一页地点, 然后,返回每一页的网页数据文本, 通过正则表达式和字符串分割,把对应的学校名称,电话,地址再保存在execel里面。    当有成千上万数据时 ,人工去点,将是一个很大的数据量, 这时,就需要电脑模拟点击“下一页”按钮,  通过分析网页的html文本发现,刚好有一条语句,是网页上显示点击下一页的地方:   

<a href="javascript:void(0)" tid="toNextPage" onclick="Instance('TANGRAM_478').toPage(7);return false;">下一页&gt;</a>

可以看到,这是一个<a>标签, javascript:void(0) 有一个防止网页跳转函数, onclick事件, 是跳转到第7页, 说明目前正在第6页。

 由此用到了QT的模拟点击<a>标签功能。


直接上代码吧:

QWebFrame *webFrame = ui->findWebView->page()->mainFrame();
QWebElement button = webFrame->documentElement().findFirst("a[tid=toNextPage]");
button.evaluateJavaScript("this.click()");

一定要注意那"this.click()"  ,如果没有那this这段代码运行不出效果的。 


 findFirst("a[tid=toNextPage]"); 这里可以看到, 标签类型[一个有关它的属性 = 对应的值(这里没用引号)];

最后发出一个点的事件出去, 就实现了网页的模拟点击。


当然, 在我这个项目中, 自己点击后,有一个加载网页的过程, 这时就需要一个定时器, 不然,太快,效果不太好。我定为的一秒执行一次:

QTimer::singleShot(1000, this, SLOT(slotNextPage()));
void Widget::slotNextPage()
{
    QWebFrame *webFrame = ui->findWebView->page()->mainFrame();
    QWebElement button = webFrame->documentElement().findFirst("a[tid=toNextPage]");
    button.evaluateJavaScript("this.click()");
}




 




0 0