2016-12-12 3 views
1

QWebViewでdocument.body.innerTextをすべて取得するにはどうすればよいですか? QTバージョン5.5.1を使用します。QWebViewでDOMのinnerTextを取得するには?

例えば

<script> 
    document.write("hello world!"); 
</script> 

をロードするために、

htmlファイルと、私は "こんにちは世界" を取得したいです。

ので、私はQT

QWebView *wv = new QWebView(this); 
QWebFrame *frame = wv->page()->mainFrame(); 
frame->load(QUrl("file:// ~ file path ~")); 
QString string = frame->toPlainText(); 
// then write string to file for checking 

にこのようにしようとした私は、文字列 "Hello World" のある期待しかし、何もありませんでした。 これを検索したところ、これはlinkでした。そのようなコードを変更しましたが、まだ何もありませんでした。

toPlainText()の誤解はありますか?そして、QT 5.5でDOM innerTextをどうやって手に入れることができますか?

答えて

0

ページが更新されるのに十分な時間がありません。 Javascriptを実行するだけでなく、HTMLが読み込まれるまでには時間がかかるでしょう。

回避策のカップルがここにあります:

  1. toPlainText()を呼び出す前に、数秒を待つためにQTimerを使用してください。これはハッキーです。待つ時間を正確に知る方法がないためですが、デモンストレーションの目的には適切です。
  2. document.write()が呼び出された後で、Javascriptコードを更新してC++コードに通知を返します。たとえば、WebSocket経由でこれを行うか、Qt WebChannelを使用します。
+0

回答ありがとうございます。しかし、それはステップ1で失敗します。 toPlainTextの前にsleep(2) - unistd.hを挿入しようとしましたが、変更はありません。 (スリープ機能がこのような状況に適していない場合は、私に教えてください。QTimerでもう一度やり直してください。) – pr0gr4m

+0

これは、loadFinishedで試してみるとうまくいきます。本当にありがとう。ありがとうございました。 – pr0gr4m

関連する問題