Russian Qt Forum
Сентябрь 22, 2024, 18:22 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [Решено]WebView программно заполнить форму  (Прочитано 5349 раз)
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);

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

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

С уважением, Александр!
« Последнее редактирование: Сентябрь 01, 2010, 03:45 от Александр » Записан
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #1 : Август 31, 2010, 17:21 »

Внедрять яваскрипт надо в слоте на loadFinished() например.
И
Код
C++ (Qt)
str.append("document.getElementById('signup_email').value = 'merke20007@mail.ru'");
 
Записан

kubuntu/Win7/x64/NetBeans
merke
Гость
« Ответ #2 : Август 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]

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

Блин в чем же причина?
Записан
Denjs
Гость
« Ответ #3 : Август 31, 2010, 17:59 »

а послать POST запрос через QHttp с полями которые соответсвуют полям вашей формы - нельзя?
(?Qhttp - не уверен, возможно его сейчас не рекомендуют... если надо - уточню - я это делал не так давно)

зачем лезть в форму жабоскриптом, если можно сразу сделать точто будет сделано в конеце? или там какая-то хитрая форма с интерактивными элементами?
Записан
merke
Гость
« Ответ #4 : Август 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

Но опять же ни какого заполнения я не вижу.
Записан
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #5 : Август 31, 2010, 21:34 »

getElementsByName возвращает массив насколько помнится. Поэтому
Код
C++ (Qt)
QString str("document.getElementsByName('signup_email')[0].value = 'merke20007@mail.ru'");
 
C id ситуация не может не работать, если яваскрипт внедряется вовремя.
Записан

kubuntu/Win7/x64/NetBeans
merke
Гость
« Ответ #6 : Сентябрь 01, 2010, 03:45 »

Ооо шикарно, спасибо!!! Заработало!))) Смеющийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.083 секунд. Запросов: 23.