Как на сайте имитировать щелчёк мыши по кнопке, а после этого получить новуй страницу и записать её html в переменную?

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

Есть некоторый сайт. Зайдя на который, мне нужно сначала щелкнуть мышкой на одну из кнопок расположенных на web-странице. После этого сервер сайта выдаст мне новую web-страницу. Далее мне нужно получить html-код полученной с сервера страницы (в качестве строки).

То есть последовательность действий такая (повторюсь):
1) Загрузить некоторый сайт
2) Щелкнуть мышкой по кнопке, на сайте
3) После загрузки новой страницы, полученной от сервера, скопировать весь html в строковую переменную

Как это можно реализовать в C#.NET с использованием сторонних библиотек (или без сторонних библиотек)?

P.S. Встречал фреймворк WatiN, позволяющий имитировать щелчок мыши на кнопку на сайте. А дальше я не знаю как действовать.
  • Вопрос задан
  • 593 просмотра
Решения вопроса 2
EreminD
@EreminD
Кое-что умею
Вот: https://bitbucket.org/rflechner/scrapysharp/wiki/Home
А вот пример использования https://habrahabr.ru/post/323202/
Ответ написан
Комментировать
tomnolane
@tomnolane
профессиональный разработчик
сразу быстро не ответишь.. есть несколько вариантов и вам рекомендую начать с самого простого:
посмотреть какие запросы отправляются при нажатии на кнопку и этот запрос воссоздать через HttpWebRequest и HttpWebResponse:

string urlAddress = "http://google.com";

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlAddress);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();

if (response.StatusCode == HttpStatusCode.OK)
{
  Stream receiveStream = response.GetResponseStream();
  StreamReader readStream = null;

  if (response.CharacterSet == null)
  {
     readStream = new StreamReader(receiveStream);
  }
  else
  {
     readStream = new StreamReader(receiveStream, Encoding.GetEncoding(response.CharacterSet));
  }

  string data = readStream.ReadToEnd();

  response.Close();
  readStream.Close();
}


или так:
using System.Net;

using (WebClient client = new WebClient())
{
    client .QueryString.Add("ключ", "значение"); //для get
    string htmlCode = client.DownloadString("http://somesite.com/index.html");
}

//post запрос:
string url = "http://site.com/";

            using (var webClient = new WebClient())
            {
                // Создаём коллекцию параметров
                var pars = new NameValueCollection();

                // Добавляем необходимые параметры в виде пар ключ, значение
                pars.Add("ключ", "значение");

                // Посылаем параметры на сервер
                // Может быть ответ в виде массива байт
                var response = webClient.UploadValues(url, pars); 
            }


если не удастся так сделать, то выход через COM библиотеку MSHTML (для этого добавьте её "references" -> "COM" -> «Microsoft HTML object library»
далее using mshtml;
тут пример использования

где полученный html вы передаёте в
HTMLDocument doc = new HTMLDocument();
                IHTMLDocument2 doc2 = (IHTMLDocument2)doc;
                doc2.clear();
                doc2.write(//тут html-код (string));
 
                IHTMLDocument3 doc3 = (IHTMLDocument3)doc2;
                IHTMLElement btns = doc3.getElementById("YouId or ne YouId");

далее находите кнопку:
IHTMLElementCollection buttons = btns.all;
 
                foreach (IHTMLElement element in buttons )
                { 
                        element.click(); 
                 }


далее опять парсим страницу.
(п.с.с. примерно так)

можно через webbrowser выполнить javascript
тык и тык
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Astrohas
@Astrohas
Python/Django Developer
Знаете ли возможно я могу ошибаться, но яб тупо загрузил в WebBrowser сайт, добавив пару строчек javascripta через .DocumentText и после апдейта брал бы этот .DocumentText
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы