2016-12-12 7 views
1

QWebView에서 document.body.innerText를 모두 가져 오는 방법은 무엇입니까? QT 버전 5.5.1을 사용합니다. 예를 들어QWebView에서 DOM 내부 텍스트를 가져 오는 방법은 무엇입니까?

,

html 파일은

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

로드 난에 "Hello World"를 싶어.

그래서, 내가 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 내부 텍스트를 가져올 수있는 방법은 무엇입니까?

답변

0

페이지를 업데이트 할 시간이 충분하지 않습니다. Javascript가 실행될 때까지 HTML을로드하는 데는 시간이 걸립니다.

  1. toPlainText()를 호출하기 전에 몇 초를 기다려야하는 QTimer를 사용

    여기에 해결 방법 중 몇 가지가있다. 이것은 얼마나 오래 기다릴 지 알 길이 없기 때문에 해커입니다.하지만 데모 목적으로는 충분할 것입니다.

  2. document.write()이 호출 된 후 자바 스크립트 코드를 업데이트하여 C++ 코드로 알림을 보냅니다. 예를 들어 WebSocket을 통해이 작업을 수행하거나 Qt WebChannel을 사용할 수 있습니다.
+0

답장을 보내 주셔서 감사합니다. 그러나 1 단계에서 실패합니다. toPlainText 이전에 unistd.h에 sleep (2)을 삽입하려고했지만 변경 사항이 없습니다. (수면 기능이이 상황에서 적합하지 않다면, 나에게 말해줘. QTimer로 다시 시도 할 것이다.) – pr0gr4m

+0

오, 그것은 loadFinished로 시도 할 때 작동한다. 정말 고마워요. 고맙습니다. – pr0gr4m