QT 模拟点击网页

来源:互联网 发布:一淘也叫淘宝客吗 编辑:程序博客网 时间:2024/05/09 09:38

    • 概要
    • QWebView 的对象生成
    • 获取网页标签
    • 给输入框赋值
      • setAttribute进行赋值
      • 直接赋值
    • 通过JS 模拟一次点击事件


概要

QT 客户端与网页交互的过程中,总是有很多值得我们学习的地方。 而QT模拟点击网页,也是很重要的内容之一, 这里所说的QT模拟点击网页就是获取到网页上的对应的标签,然后再进行我们想要的点击操作。如点击标签,或者提交登陆。


QWebView 的对象生成。

    m_browser = new QWebView();    setCentralWidget(m_browser);  //为中心位置    QWebPage* page = m_browser->page();    page->setForwardUnsupportedContent(true);//下面是设置对应网页上的一些可操作属性    QWebSettings* settings = page->settings();    settings->setAttribute(QWebSettings::AutoLoadImages, false); //不让自动下载图片。    settings->setAttribute(QWebSettings::JavascriptEnabled, true); //允许使用js    settings->setAttribute(QWebSettings::PluginsEnabled, true); //可以拖拽网页

获取网页标签

QWebFrame* frame = m_browser->page()->mainFrame();QWebElement element = frame->documentElement().findFirst(QLatin1String("div[class=search_btn_wrap]")).firstChild()

我们可以通过QWebView 对象的page() 里获得mainFram() , 而element 的查找就可以通过fram里面的所有element 找到需要的element,这里可以通过id, 也可以通过className,
findFirst(QLatin1String(“div[class=search_btn_wrap]”))
这里是找到网页中class name为 search_btn_wrap 的第一次出现的div标签。 firstChild() 这里是找到该div标签后,再找到它的第一个子标签。
其它的查找方式也类似这样。


给输入框赋值


setAttribute进行赋值

    QWebFrame* frame = m_browser->page()->mainFrame();    QWebElement element = frame->documentElement().findFirst(QLatin1String("input[class=pwd]"));    element.setAttribute(QLatin1String("value"), m_password);

这里先通过QT的接口获取到对应的element, 再通过QWebElement 的setAttribute 方法设置输入框内需要的值。


直接赋值

QWebFrame* frame = m_browser->page()->mainFrame();
frame->evaluateJavaScript(tr(“document.getElementById(\”passkey\”).value=\”%1\”“).arg(m_password));

这里是通过使用js脚本,先通过标签id找到对应的标签,再进行赋值造作。


通过JS 模拟一次点击事件。

void emulateMouseClick(QWebElement& element){    const QString script = QLatin1String(        "var evObj = document.createEvent('MouseEvents');"        "evObj.initEvent('click', true, true);"        "this.dispatchEvent(evObj);");    element.evaluateJavaScript(script);}

这里是自己先编写需要用上的js脚本,这里的功能是模拟鼠标点击一次, 再通过QWebElement 的evaluateJavaScript 方法来执行JS脚本操作。

1 0
原创粉丝点击