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



我已经加载了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()方法可以很好地工作。

我无法回答这个问题,因为从你给我们的信息中很难判断什么是EXACT问题,但我能做的是给你一些关于在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) 转到你正在处理的网页。那个按钮真的能用吗?某些脚本可能会为其注入"disabled"属性,从而使其无法单击。

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

按类别获取:

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

尝试锁定家长,然后获得第一个孩子:

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

通常我会尽量避免使用这样的方法,因为在某些情况下它很容易崩溃。如果这是唯一对你有效的方法,我强烈建议你尝试一下,以避免出现任何问题。

小提示:你说过如果你得到一个元素而不是一个按钮,click()可以很好地工作。原因是click()对无法单击或附加了某种行为的元素click()事件。所以它基本上什么都不做:)

相关内容

  • 没有找到相关文章

最新更新