0

我在 QWebView 中加载了 HTML 表单。此 HTML 包含以下两个元素:

    <button class="submit1" tabindex="1" type="submit" id="submit1">accept</button>
    <button class="submit2" tabindex="2" type="submit" id="submit2">decline</button>

在代码中我有以下内容:

    QWebView webView;
    ...
    QWebElement button = webView->page()->mainFrame()->documentElement().findFirst("button[id=\"submit1\"]");
    button.evaluateJavaScript("this.click();");

最后一行代码对我不起作用。此外,如果我有一个元素而不是按钮 - JavaScript click() 方法可以正常工作。

4

1 回答 1

2

我无法逐个回答这个问题,因为从你给我们的信息中很难判断出什么是确切的问题,但我能做的是给你一些关于 QWebView 中调试问题的指导。

1)我要检查的第一件事是,您是否真的手头有按钮元素。尝试这样做:

QWebView webView;
...
QWebElement button = webView->page()....findFirst("button[id=\"submit1\"]");
if button is not None:
    button.evaluateJavaScript("this.click();");
else:
    print "Oh dear!"

通过这个我们想看看 findFirst() 是否真的得到了元素(我相信它确实,语法似乎很好)。

2) 转到您正在处理的网页。那个按钮真的有用吗?某些脚本可能会为其注入“禁用”属性,使其无法点击。

3)尝试以某种不同的方式锁定元素:

按类获取:

QWebElement button = webView->page()->mainFrame()->documentElement().findFirst("button[class=submit1]");

尝试锁定父母,然后获得第一个孩子:

QWebElement parent = **get the parent element**
button = parent.findAll("button")[0]

通常我会尽量避免使用这样的方法,因为它在某些情况下很容易崩溃。如果这是唯一对您有用的方法,我强烈建议您使用“try\except”来避免任何问题。

小提示:你说如果你得到一个元素而不是一个按钮,click() 工作正常。原因是 click() 对不可点击的元素或具有附加到 click() 事件的某种行为的元素没有任何作用。所以它基本上什么都不做来工作:)

于 2014-09-09T08:31:08.457 回答