Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.09.2015, 23:57   #1
vovaza29
Пользователь
 
Регистрация: 10.07.2015
Сообщений: 40
По умолчанию InvokeMember WebBrowser

При вызове InvokeMember для input type="image" происходит обновление страницы вместо перехода по ссылке формы. В чём проблема?
Код:
 HtmlElementCollection ContButtonCol = webbrowser1.Document.GetElementsByTagName("input");
HtmlElement ContButton = null;
foreach (HtmlElement heTemp1Btn in ContButtonCol)
      if (heTemp1Btn.Name=="fwd")
      {
               ContButton = heTemp1Btn;
               break;
       }
if (ContButton!=null)
{
       ContButton.InvokeMember("Click");
}
vovaza29 вне форума Ответить с цитированием
Старый 05.09.2015, 13:29   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А я бы HtmlElement заменил на другой класс, более подходящий кнопке.
Конечно же поискал бы что-то типа HtmlElementInput. Или класс с методом Click.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.09.2015, 13:33   #3
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

А я бы Selenium взял и не парился с веббраузером если он нужен только для автоматизации действий, а не для взаимодействия пользователя с ним. Для автоматизации Selenium в 100500 раз проще и удобнее.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 05.09.2015, 21:50   #4
vovaza29
Пользователь
 
Регистрация: 10.07.2015
Сообщений: 40
По умолчанию

В ходе долгих мучений с кодом я выявил одну штуку: InvokeMember("click") имитирует не клик мышкой по элементу, а нажатие Enter-а. На всех страницах кроме одной на тестируемом сайте инвок проходит успешно, а на одной из них кнопкой Enter вызывается перезагрузка страницы. Всё было проверено через SendKeys.Send("{ENTER}"); . Что ещё в таком случае можно накопать?
vovaza29 вне форума Ответить с цитированием
Старый 05.09.2015, 22:08   #5
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

.click() через JS.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 05.09.2015, 22:18   #6
vovaza29
Пользователь
 
Регистрация: 10.07.2015
Сообщений: 40
По умолчанию

Попробовал. Видно, что кнопка нажимается (анимация), но загрузка страницы не происходит. Есть ли в JS какая-нибудь функция вызова события submit?
Вот то, что я использовал с click():
Код:
webBrowser1.Document.InvokeScript("document.getElementById('tempCL').click();");
Попробовал ещё mshtml - тоже не прошло...
Код:
IHTMLElement nativeElement = hec[i].DomElement as IHTMLElement;
                    nativeElement.click();

Последний раз редактировалось Stilet; 06.09.2015 в 10:34.
vovaza29 вне форума Ответить с цитированием
Старый 05.09.2015, 22:38   #7
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

submit() и есть у формы. И у элементов вроде есть свойство form
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 05.09.2015, 22:47   #8
vovaza29
Пользователь
 
Регистрация: 10.07.2015
Сообщений: 40
По умолчанию

и ещё: может ли всё это не работать из-за того, что форма находится во фрейме?
vovaza29 вне форума Ответить с цитированием
Старый 05.09.2015, 22:58   #9
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

В фрейме б вы вроде не нашли бы элемент через просто document.getElementById без указания фрейма.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 05.09.2015, 23:09   #10
vovaza29
Пользователь
 
Регистрация: 10.07.2015
Сообщений: 40
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
В фрейме б вы вроде не нашли бы элемент через просто document.getElementById без указания фрейма.
Я немного ступил... Я загружаю сразу ту страницу, которую должен был фрейм подгрузить...
vovaza29 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
параметр binder в InvokeMember well-well C# (си шарп) 0 13.11.2011 16:33
использование InvokeMember Timer32 C# (си шарп) 9 13.09.2011 16:52
webbrowser Arsenx777 Работа с сетью в Delphi 1 11.08.2011 14:22
WebBrowser rabbitsnew Общие вопросы Delphi 1 23.09.2010 18:05
WebBrowser Druid-druid Работа с сетью в Delphi 1 12.12.2007 13:23