Перейти к содержимому

Фото
- - - - -

Нажатие кнопки на С#

Заплачу за помощь

  • Вы не можете создать новую тему
  • Please log in to reply
3 ответов в этой теме

#1 JanCarlo

JanCarlo
  • Постоялец
  • 607 сообщений

Отправлено 05 Май 2013 - 13:07

Здравствуйте,

Имеется такой вопрос, у меня есть программа на С# соответственно (netframework 3.5).работает на ядре ИЕ8 браузера (webbrowser), бот для браузерной игры. сайт открывается в программе уже. я приладил Антигейт, всё работает, ответ приходит.
Сложность заключается в том, что я не могу понять, как ввести четыре цифры полученные заранее, в поле ввода и далее нажать на Кнопку, именно на кнопку а не ссылку.

заплачу за помощь

это код страници с капчей
<FORM method=post name=rcode action=/game/robot-test.php target=game><B>Защита от роботов ("ботов").</B>
<P>Введите код, указанный на картинке (четыре цифры):<BR>
<TABLE border=0 cellSpacing=5 cellPadding=0>
<TBODY>
<TR>
<TD><IMG border=1 alt=код src="/game/robot-img.php?c=86331293aae16570d412d5fcd1218ea7&amp;1367424734"></TD>
<TD><INPUT name=code>
<P><INPUT value=Продолжить type=submit></P></TD></TR></TBODY></TABLE></FORM>
<SCRIPT>
document.forms.rcode.code.focus();
</SCRIPT>
</P></TD></TR></TBODY></TABLE></BODY></HTML>


где соответственно <TD><INPUT name=code> это поле для ввода
<INPUT value=Продолжить type=submit> а это кнопка сама

проблема в том, что я никак не могу ввести текст в поле, и нажать кнопку.
пробовал так:
AntiCaptcha anticap = new AntiCaptcha();
					 string textFromCaptcha = anticap.GetText(ACCOUNT_KEY, PATH_TO_CAPTCHA, 10000);
					 this.AddLog("Ответ:" + textFromCaptcha);

					 //this.Click("Продолжить", 200, false, false);
					 this.code.Enabled = true;
					 this.code.Interval = 300;
					 w.document.GetElementById("code").InnerText = "textFromCaptcha";
		 HtmlElementCollection allelements = w.document.All;
		 foreach (HtmlElement webpageelement in allelements)
		 {
			 if (webpageelement.InnerText == "Продолжить")
			 {
				 webpageelement.InvokeMember("click");
			 }

и так :
w.document.GetElementsByTagName("INPUT")["code"].InnerText = textFromCaptcha;
					 HtmlElementCollection allelements = w.document.All;
					 foreach (HtmlElement webpageelement in allelements)
					 {
						 if (webpageelement.InnerText == "Продолжить")
						 {
							 webpageelement.InvokeMember("click");
						 }
					 }

посоветовали еще использовать InnerHtml и OuterText только я не знаю как

Сообщение изменено: JanCarlo (05 Май 2013 - 13:09 )

  • 0

#2 skill-A

skill-A

    Huge Cojones

  • Постоялец
  • 6 710 сообщений

Отправлено 05 Май 2013 - 20:28

1) Для начала сделай HTML валидным.
Теги должны быть указаны маленькой буквы.
Значения атрибутов должны быть в скобках, то есть

<input name="code" value=""/>
<p><input value="Продолжить" type="submit"/></p>
Тег <form> должен быть элементом структуры документа


<!DOCTYPE>
<html>
<head>
</head>
<body>
<form>blala</form>
</body>
</html>
2) Поток проверь свой HTML на предмет наличия ошибок, если их нету то попробуй кликать снова.

http://validator.w3....lidate_by_input

3) Капчу я так понимаю ты уже подобрал?


4) w.document.GetElementById("code").value = "Капча";

попробуй так и проверь есть ли свойство value, я хз что ты для парсинга используешь. Походу WebBrowser


5) Поставь MessageBox.Show перед евентом клика чтобы знать что скрипт находит все верно и быть увереным в том что проблема состоит в том как подсунуть код в инпут

if (webpageelement.InnerText == "Продолжить")
{
webpageelement.InvokeMember("click");
}


6) Попробуй отправить форму не кликая

foreach (HtmlElement form in webBrowser1.document.Forms)
form.InvokeMember("submit");
  • 0

улыбнись


#3 JanCarlo

JanCarlo
  • Постоялец
  • 607 сообщений

Отправлено 05 Май 2013 - 23:09

skill-A,
Благодарю, попробую утром уже, да, капча уже разгаданная прилетает, всего 4 цифры. Использую webbrowser.
как попробую - обязательно отпишут, если сработает - то отблагодарю

Сообщение изменено: JanCarlo (05 Май 2013 - 23:53 )

  • 0

#4 skill-A

skill-A

    Huge Cojones

  • Постоялец
  • 6 710 сообщений

Отправлено 06 Май 2013 - 06:54

и ещё можно setAttribute попробовать для установки значения value

setAttribute("value","code");
  • 0

улыбнись