QWebElement evaluateJavaScript this.click()方法不起作用

时间:2014-09-08 05:11:16

标签: javascript qt qt5 qwebview qwebelement

我在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()方法工作正常。

1 个答案:

答案 0 :(得分:1)

我不能回答这个问题,因为很难从你给我们的信息中找出什么是确切的问题,但我能做的就是给你一些关于QWebView中调试问题的指导。 / p>

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]

通常我会尽量避免使用像这样的方法,因为在某些情况下它很容易崩溃。如果这是唯一适合你的东西,我强烈推荐一些&#39;尝试\除了&#39;避免任何问题。

  

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