Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: merke от Август 31, 2010, 17:06



Название: [Решено]WebView программно заполнить форму
Отправлено: merke от Август 31, 2010, 17:06
Всем привет!!!

В общем есть QWebView в него подгружается страничка, необходимо программно заполнить форму.
Пробую вот таким вот способом:

  
Код:
  QString str;
    str.append("document.getElementById('signup_email').value = \"%1\";").arg("merke20007@mail.ru");
    ui->webView->page()->mainFrame()->evaluateJavaScript(str);

Но тока результат нулевой! Ни чего не происходит!

Буду рад любой помощи.

С уважением, Александр!


Название: Re: WebView программно заполнить форму
Отправлено: serg_hd от Август 31, 2010, 17:21
Внедрять яваскрипт надо в слоте на loadFinished() например.
И
Код
C++ (Qt)
str.append("document.getElementById('signup_email').value = 'merke20007@mail.ru'");
 


Название: Re: WebView программно заполнить форму
Отправлено: merke от Август 31, 2010, 17:45
Ну приконектил я к сигналу loadFinished() свой слот вставил данные строки:

Код:
[code]   QString str;
    str.append("document.getElementById('signup_email').value = \"%1\";").arg("merke20007@mail.ru");
    ui->webView->page()->mainFrame()->evaluateJavaScript(str);
[/code]

И ни чего опять(((

Блин в чем же причина?


Название: Re: WebView программно заполнить форму
Отправлено: Denjs от Август 31, 2010, 17:59
а послать POST запрос через QHttp с полями которые соответсвуют полям вашей формы - нельзя?
(?Qhttp - не уверен, возможно его сейчас не рекомендуют... если надо - уточню - я это делал не так давно)

зачем лезть в форму жабоскриптом, если можно сразу сделать точто будет сделано в конеце? или там какая-то хитрая форма с интерактивными элементами?


Название: Re: WebView программно заполнить форму
Отправлено: merke от Август 31, 2010, 18:04
Про QHttp я знаю и что вместо него лучше использовать QNetworkAccessManager

Я бы использовал данный класс, но получается что в конце мне нужно ввести капчу и придется вводить её в ручную.

Распишу к чему я сейчас пришел. По запарке не заметил вот этот HTML код:     
Код:
<input name="signup_email" class="text" maxlength="70" size="40" type="text">

И получается что теперь надо изменить мой код на:
   
 
Код:
 QString str;
    str.append("document.getElementsByName('signup_email').value = 'merke20007@mail.ru'");
    ui->webView->page()->mainFrame()->evaluateJavaScript(str);

Т.е. менять getElementById на getElementsByName

Но опять же ни какого заполнения я не вижу.


Название: Re: WebView программно заполнить форму
Отправлено: serg_hd от Август 31, 2010, 21:34
getElementsByName возвращает массив насколько помнится. Поэтому
Код
C++ (Qt)
QString str("document.getElementsByName('signup_email')[0].value = 'merke20007@mail.ru'");
 
C id ситуация не может не работать, если яваскрипт внедряется вовремя.


Название: Re: WebView программно заполнить форму
Отправлено: merke от Сентябрь 01, 2010, 03:45
Ооо шикарно, спасибо!!! Заработало!))) ;D