У меня есть рабочий проект, который требует, чтобы я мог вводить информацию на веб-страницу, читать следующую страницу, на которую меня перенаправляют, а затем предпринимать дальнейшие действия. Упрощенный пример из реальной жизни - это что-то вроде перехода на google.com, ввода «Уловки кодирования» в качестве критерия поиска и чтения полученной страницы.
Небольшие примеры кодирования, подобные тем, на которые есть ссылки в http://www.csharp-station.com/HowTo/HttpWebFetch.aspx, рассказывают, как читать веб-страницу, но не как взаимодействовать с ней, отправляя информацию в форму и переходя к следующей странице.
Для справки, я не создаю вредоносный продукт и / или продукт, связанный со спамом.
Итак, как мне читать веб-страницы, которые требуют нескольких шагов обычного просмотра, чтобы открыть их сначала?





Что вам нужно сделать, так это продолжать извлекать и анализировать исходный код html для каждой страницы в цепочке. Для каждой страницы вам нужно выяснить, как будет выглядеть отправка формы, и отправить запрос, который будет соответствовать этому, чтобы получить следующую страницу в цепочке.
Что я делаю, так это создаю настраиваемый класс обертки System.Net.HttpWebRequest / HttpWebResponse, поэтому получение страниц так же просто, как использование System.Net.WebClient. Однако мой настраиваемый класс также сохраняет один и тот же контейнер cookie для всех запросов и упрощает отправку данных публикации, настройку пользовательского агента и т. д.
В зависимости от того, как работает веб-сайт, вы можете манипулировать URL-адресом для выполнения того, что хотите. например, чтобы найти слово "beatles", вы можете просто открыть запрос на google.com?q=beetles, а затем просто прочитать результаты.
В качестве альтернативы, если веб-сайт не использует значения строки запроса (url) для обработки действий страницы, вам нужно будет работать с веб-запросом, который вместо этого отправляет необходимые значения на веб-сайт. Поищите в Google для работы с WebRequest и веб-ответами.
Вы можете программно создать запрос Http и получить ответ:
string uri = "http://www.google.com/search";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
// encode the data to POST:
string postData = "q=searchterm&hl=en";
byte[] encodedData = new ASCIIEncoding().GetBytes(postData);
request.ContentLength = encodedData.Length;
Stream requestStream = request.GetRequestStream();
requestStream.Write(encodedData, 0, encodedData.Length);
// send the request and get the response
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
// Do something with the response stream. As an example, we'll
// stream the response to the console via a 256 character buffer
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
Char[] buffer = new Char[256];
int count = reader.Read(buffer, 0, 256);
while (count > 0)
{
Console.WriteLine(new String(buffer, 0, count));
count = reader.Read(buffer, 0, 256);
}
} // reader is disposed here
} // response is disposed here
Конечно, этот код вернет ошибку, поскольку Google для поисковых запросов использует GET, а не POST.
Этот метод будет работать, если вы имеете дело с конкретными веб-страницами, поскольку все URL-адреса и данные POST жестко запрограммированы. Если вам нужно что-то более динамичное, вам нужно:
FWIW, я думаю, что что-то вроде Perl или Python могло бы лучше подходить для такого рода задач.
изменить: x-www-form-urlencoded
Вы можете попробовать Селен. Запишите действия в Firefox с помощью Selenium IDE, сохраните сценарий в формате C#, а затем воспроизведите их с помощью оболочки Selenium RC C#. Как уже упоминалось, вы также можете использовать System.Net.HttpWebRequest или System.Net.WebClient. Если это настольное приложение, см. Также System.Windows.Forms.WebBrowser.
Приложение: Подобно Selenium IDE и Selenium RC, которые основаны на Java, Регистратор тестов WatiN и ВАТИНА основаны на .NET.