Отправка формы в AngleSharp

359
28 мая 2018, 07:20

Пробую выполнять действия на сайте с помощью библиотеки AngleSharp. Остановился на эмуляции нажатия кнопки.

Часть html кода отвечающий за авторизацию на сайте.

<form action="login.php?do=login" method="post" onsubmit="md5hash(vb_login_password, vb_login_md5password, vb_login_md5password_utf, )"> 
 
  <input type="hidden" name="do" value="login" /> 
  <input type="hidden" name="url" value="/log-in.php" /> 
  <input type="hidden" name="vb_login_md5password" /> 
  <input type="hidden" name="vb_login_md5password_utf" /> 
  <input type="hidden" name="s" value="" /> 
  <input type="hidden" name="securitytoken" value="guest" /> 
 
  <table cellpadding="0" cellspacing="3" border="0" align="center"> 
   
    <tr> 
      <td>Email<br /><input type="text" class="bginput" name="vb_login_username" size="50" accesskey="u" tabindex="1" /></td> 
    </tr> 
     
    <tr> 
      <td>Pass<br /><input type="password" class="bginput" name="vb_login_password" size="50" tabindex="1" /></td> 
    </tr> 
     
    <tr> 
      <td align="right"> 
        <input type="submit" class="button" value="Вход" accesskey="s" tabindex="1" /> 
        <input type="reset" class="button" value="Сброс" accesskey="r" tabindex="1" /> 
      </td> 
    </tr> 
     
  </table> 
</form>

Начал с проверки нажатия кнопки "Сброс". Для этого заполнил поля ввода логина и пароля, и проверил заполнились ли они, да они заполнились.

Затем выполнил эмуляцию нажатия кнопки, но похоже она не сработала. Т.к потом еще раз прошелся по циклом по странице, но введенные значения логина и пароля остались, то есть нажатие на кнопку не сработало.

Что я делаю не так?

 foreach (IElement element in document.Body.QuerySelectorAll("div.panel > div > form > table > tbody > tr > td > input"))
        {
            if (element.GetAttribute("type") == "text")
            {
                element.SetAttribute("value", email);
                Console.WriteLine(element.GetAttribute("value")); // проверка, изменился ли атрибут value
            }
            else if (element.GetAttribute("type") == "password")
            {
                element.SetAttribute("value", pass);
                Console.WriteLine(element.GetAttribute("value"));
            }
            else if (element.GetAttribute("type") == "reset")
            {
                IHtmlElement div = (IHtmlElement)element;
                div.DoClick();
            }
        }
Answer 1

Потому что нужно делать submit form (отправку формы). Что-то в духе:

var document = browsingContext.Active.QuerySelector<IHtmlFormElement>("form#login").SubmitAsync(new
{
    do = "login",
    url = "/log-in.php",
}).Result;

Не очень удобно, что у вас форма не имеет id или класса - так что подбирайте селектор.

И проверить ваш пример не могу, так как не приведён пример сайта, а создавать код - долго, но у меня подобный код является вполне рабочим.

READ ALSO
Отслеживать изменения в реестре

Отслеживать изменения в реестре

Мне необходимо отслеживать некоторые изменения в реестре (HKLM, HKCU)Я пытался применить WMI RegistryKeyChangeEvent для решения данной проблемы, но он не поддерживает...

213
C# Process.Start не работает

C# Process.Start не работает

Использую библиотеку https://githubcom/SeppPenner/MoneroMiner Пытаюсь запустить по стандартному примеру, который также там есть

230
Global mouse hook в консоли

Global mouse hook в консоли

Пытаюсь познакомиться с работой WinAPI в C#Нужно сделать mouse hook, который будет следить за движением мыши по всему экрану и получать координаты...

231
Гарантированнная доставка сообщения по протоколу TCP

Гарантированнная доставка сообщения по протоколу TCP

Всем приветУже несколько дней ломаю голову над одной проблемой

276