Форум программистов, компьютерный форум, киберфорум
Наши страницы

Delphi и сети

Войти
Регистрация
Восстановить пароль
 
TimSanchez
2 / 2 / 0
Регистрация: 01.04.2013
Сообщений: 46
#1

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

23.09.2014, 00:49. Просмотров 621. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос WebBrowser delphi. Ошибка заполнения формы (Delphi):

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

WebBrowser Delphi - Delphi
Захожу на сайт, используя TWebbrowser. Авторизацию прохожу используя procedure TForm1.SpeedButton1Click(Sender: TObject); var i:integer; ...

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

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

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

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

8
TooHot
71 / 60 / 22
Регистрация: 05.08.2014
Сообщений: 218
23.09.2014, 16:18 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
24028 / 16009 / 4847
Регистрация: 22.10.2011
Сообщений: 28,332
Записей в блоге: 5
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 / 22
Регистрация: 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 / 22
Регистрация: 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 - Delphi
Как нажать на такой элемент? &lt;div class=&quot;container -up&quot;&gt;&lt;a href=&quot;javascript:;&quot; data-test=&quot;deal-button-up&quot;&gt;&lt;svg class=&quot;svg&quot;&gt;&lt;use...

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

Webbrowser и автозаполнение. Проблема с нажатием кнопки формы - Delphi
использую webbrowser для автозаполнения и пердачи данных на сайте, проблема с нажатием кнопки формы, т.к. id и name у кнопки нет, а...

WebBrowser: перейти на страничку при открытии новой формы - Delphi
как сделать - я перехожу на новую форму, а WebBrouser сразу подгружает страничку, сразу с открытием этой формы???? Добавлено через 35...


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

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

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