Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi: Сети
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
TimSanchez
2 / 2 / 0
Регистрация: 01.04.2013
Сообщений: 46
#1

WebBrowser delphi. Ошибка заполнения формы

23.09.2014, 00:49. Просмотров 673. Ответов 8
Метки нет (Все метки)

Здравствуйте.
Столкнулся с такой проблемой, что при попытке передать значение в строку на сайте выводится ошибка.
php код строки ввода
PHP
1
<input class="f" type="text" name="set_bets[557522431]" size="12">
Так же имеется странный обьект рядом который скрыт
PHP
1
<input type="hidden" name="set_bets_id[0]" value="557522431">
Рабочий кусок кода программы

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
procedure TForm1.WebBrowser2DocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
  var
  f:  variant ;
  form:olevariant;
  i:integer;
begin
[COLOR="Silver"]edit11.Text:=webbrowser2.locationURL;
if (webbrowser2.LocationURL='https://betsbc.com/')or(webbrowser2.LocationURL='http://betsbc.com/') then
begin
  webbrowser1.Navigate(edit1.text);
  webbrowser2.Navigate('www.ya.ru');
  ch:=true;
  end;
  if webbrowser2.locationurl = 'http://betsbc.com/top.php' then
  webbrowser2.Navigate('www.betsbc.com/exit.php');[/COLOR]
If (webbrowser2.locationurl <>('https://betsbc.com/'))and (webbrowser2.locationurl <>('www.ya.ru')) then
begin
f:=webbrowser2.oleobject.document.getelementbyid('set_bets[557522431]');
f.value:='100';
 
end;
end;
Полный код страницы сайта
Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<html>
<head><title>BetCity.Ru</title>
    <link rel="stylesheet" href="/style.css" type="text/css" media="all"/>
    <style>
        tr.bshead td {
            text-align: center;
            background-color: #7BADD2;
            color: #ffffff;
            font-weight: bold;
        }
 
        tr.bsstr td {
            text-align: center;
            background-color: #EAF6FF;
        }
        .mt2{margin-top: 2px;}
    </style>
    <script language="JavaScript">
        top.frames['btop'].tabsh("mhistory");
        parent.left.location.href="/left.php?quick=1";  </script>
    <script language="JavaScript" src="jqueryc.js"></script>
    <script>
        jQuery(function() {
            jQuery('#basketform').submit(function() {
                jQuery('#basketform input[type=submit]').get(0).disabled = true;
            })
        })
    </script>
</head>
<body style="padding: 10px 4px 0 0;">
<table style="width:100%;border-spacing:0;border-collapse:collapse;">
<tr>
<td width="60%" valign="top">
<form method=post action=basket.php name=basket id=basketform>
<table width=100% cellspacing=2 cellpadding=3 border=0>
<tr class="bshead">
<td>события</td>
<td>ставка</td>
<td>кф</td>
<td>максимум</td>
<td>одиночная</td>
<td></td>
</tr>
<tr class="bsstr">
<td></td><td></td><td></td>
<td><b>сумма</b></td>
<td></td></tr>
<tr class="bsstr"><td><span >Лобос БУАП - Оахака</span></td>
<td>1</td>
<td>2.20</td>
<td>5000</td>
<td><input class="f" type=text name=set_bets[557522431] size=12>
<input type="hidden" name="set_bets_id[0]" value="557522431"></td>
<td><a href="basket.php?basketdel=557522431">
<img src="img/bet_del.gif" alt="удалить ставку" border=0></a>
</td></tr></table>
<br>
<input type="hidden" name="bid" value="149475058">
<table width=100% cellspacing=2 cellpadding=3 border=0><tr>
<td align=left></td>
<td align=right>
<input type="hidden" name="iid" value="b57e2533c33db2a52772ffce4fca3fee">
<input class="b2" type="submit" value="Оформить"></td>
<td></td></tr></table>
<br><a href="bets2.php"><font color=#006699>
<b>Вернуться в линию</b></font></a></td></form><td></td>
<td style="text-align:right;vertical-align:top;width:300px;">
<table width="300px" cellspacing="0" cellpadding="3" border=0  style="border: solid 1px #7BADD2;margin-top:2px;"><tr>
<td colspan=2 bgcolor="#7BADD2" class="basket-content" align=center>
<font color=#FFFFFF><b>Информация о Клиенте</b></td></tr>
<tr><td width=60% bgcolor="#EAF6FF" align=right><font color=#6B96B5>
<b>Ваш логин:</b></font></td>
<td width=40% bgcolor="#EAF6FF" valign=bottom><b>g 1904381</b></td></tr><tr><td bgcolor="#EAF6FF" align=right><font color=#6B96B5><b>Ваш счёт №:</b></font></td><td bgcolor="#EAF6FF" valign=bottom><b>5406068</b></td></tr><tr><td bgcolor="#EAF6FF" align=right><font color=#6B96B5><b>Доступный баланс:</b></font></td><td bgcolor="#EAF6FF" valign=bottom><font color=#CC3333><b>10000.00</b></font>&nbsp;<b>руб</b></td></tr></table></td></tr></table></body></html>

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Миниатюры
WebBrowser delphi. Ошибка заполнения формы  
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.09.2014, 00:49
Ответы с готовыми решениями:

Delphi WebBrowser Получить HTML сайта не отображая сайт в WebBrowser
На некоторых сайтах такую шляпу вешают, что они неприятны, но тем не менее...

WebBrowser Delphi
Захожу на сайт, используя TWebbrowser. Авторизацию прохожу используя procedure...

Delphi компонент Webbrowser
Всем привет! Создал маленький клиент, Использовал компонент TWebBrowser все...

Delphi. WebBrowser + Javascript
Доброго времени суток! Мне нужен код который будет нажимать на кнопку...

Delphi WEBBROWSER. Захват нажатия на HYPERLINK.
Как в DELPHI можно взять обработку нажатия на гиперссылку в HTML документе в...

8
TooHot
71 / 60 / 26
Регистрация: 05.08.2014
Сообщений: 218
23.09.2014, 16:18 #2
Лучший ответ Сообщение было отмечено TimSanchez как решение

Решение

TimSanchez,

Delphi
1
webbrowser2.locationurl <>('www.ya.ru')
всегда будет правдой, полный URL должен содержать протокол.
Если нужно проверять часть URL, используйте POS и желательно приводите все в верхний или нижний регистр для проверки.

Delphi
1
ebbrowser2.oleobject.document.getelementbyid('set_bets[557522431]');
я не нашел на странице сайта элемента с таким id. Отсюда ошибка ivalid variant operation. Вы пытаетесь произвести манипуляцию с элементом, которого не существует.

Добавлено через 14 минут
HTML5
1
name="set_bets[557522431]"
это атрибут-имя элемента, но не его id. Ищите элемент по его имени. GetElementsByName для получения коллекции элементов с данным именем. Например, если заведомо известно, что элемент с таким именем всего один:
Delphi
1
2
3
4
  try
    WebBrowser1.OleObject.Document.GetElementsByName('set_bets[557522431]').Item(0).value:= 'la-la-la';
  except
  end;
если элементов с этим именем несколько, то нужно перебирать нашу коллекцию в цикле, и вычленять наш элемент по какому-либо значению из его атрибутов или на крайний случай использовать InnerText элемента.

Еще есть вариант получить коллекцию input'ов, если существуют разные элементы с одним именем:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
procedure TForm1.WebBrowser1DocumentComplete(ASender: TObject;
  const pDisp: IDispatch; const URL: OleVariant);
var
  inp: OleVariant;
  i: Integer;
begin
  inp:= WebBrowser1.OleObject.Document.GetElementsByTagName('input');
  for i:= 0 to inp.Length - 1 do
  begin
    if inp.Item(i).getAttribute('name') = 'искомое имя' then
    begin
      inp.Value:= 'la-la-la';
      Break;
    end;    
  end;
end;
1
TimSanchez
2 / 2 / 0
Регистрация: 01.04.2013
Сообщений: 46
23.09.2014, 22:00  [ТС] #3
К сожалению не выходит, ошибка к доступу адресса, тобишь не найден. Попробовал оба варианта. Что же за специфическое поле такое.
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
25728 / 17282 / 6865
Регистрация: 22.10.2011
Сообщений: 30,492
Записей в блоге: 6
23.09.2014, 22:15 #4
TimSanchez, вариант с GetElementsByName прекрасно заполняет поле ввода, проверено только что.
0
TimSanchez
2 / 2 / 0
Регистрация: 01.04.2013
Сообщений: 46
23.09.2014, 22:21  [ТС] #5
посмотрите пожалуйста, вроде бы все по феншую. Программа уже настроена, главное нажать кнопку начать.
0
Вложения
Тип файла: rar Новая папка (2).rar (194.5 Кб, 5 просмотров)
TooHot
71 / 60 / 26
Регистрация: 05.08.2014
Сообщений: 218
23.09.2014, 22:52 #6
TimSanchez, я бегло просмотрел код страницы. Там много фреймов, при чем вложенные тоже есть.
Вам необходимо освоить структуру DOM или хотя бы html верстку базово. Дело в том, что содержимое <frame></frame> - это тоже своего рода самостоятельная веб страница. И искать элемент нужно последовательно по дереву, например:

Delphi
1
 WbMain.OleObject.Document.Frames.Item(0).Document.Frames.Item(1).Document.GetElementsByName('имя').Item(0).Value:= 'bla-bla';
Поясняю, Document.Frames возвращает нам коллекцию фреймов в нашем главном документе. Нам к примеру нужен первый фрейм, поэтому берем ...Item(0) (думаю, знаете почему 0). Далее работаем с нашим фреймом как с обычным документом, в нем снова получаем коллекцию вложенных фреймов (если необходимо), выбираем второй, то есть Item(1). Далее, как вы уже поняли, работаем уже с документом этого вложенного фрейма и уже в нем ищем наш элемент по имени. Надеюсь, я понятно объяснил.
1
TimSanchez
2 / 2 / 0
Регистрация: 01.04.2013
Сообщений: 46
23.09.2014, 23:24  [ТС] #7
На самом сайте действительно много фреймов. Но я решил эту проблему, просто открыв фрейм в отдельное окно и тем самым получаю код страницы.
0
TooHot
71 / 60 / 26
Регистрация: 05.08.2014
Сообщений: 218
24.09.2014, 00:23 #8
TimSanchez, держите пример. У меня нету d7, но суть не меняется. Я не стал делать различные проверки на логин, прогрузку нужно контента и т.д.
1
Вложения
Тип файла: zip temptemp.zip (731.5 Кб, 9 просмотров)
TimSanchez
2 / 2 / 0
Регистрация: 01.04.2013
Сообщений: 46
24.09.2014, 14:49  [ТС] #9
Спасибо за помощь. Моя ошибка заключалась в том, что оказывается имя поля меняется каждый раз, поэтому функция не работала.
0
24.09.2014, 14:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.09.2014, 14:49

Как правильно парсить с WebBrowser в Delphi?
Уважаемые учасники форума помагите розобратса как парситить с WebBrowser в...

Нажать на элемент на странице WebBrowser Delphi
Как нажать на такой элемент? &lt;div class=&quot;container -up&quot;&gt;&lt;a...

Авторизация на сайте с формы без Webbrowser
Доброго времени суток! Скажите пожалуйста, возможно ли сделать авторизацию на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru