概要
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脚本操作。