0

QWebView に HTML フォームをロードしました。この HTML には、次の 2 つの要素があります。

    <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

あなたが私たちに提供した情報から正確な問題が何であるかを判断するのは本当に難しいので、私は質問に答えることができません.

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) 作業中の Web ページに移動します。そのボタンは実際に機能しますか?一部のスクリプトは、クリックできないようにする「無効」属性を挿入する場合があります。

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 に答える