أتصور أنّه لن ينجح استخدام HttpWebRequest وأشباهه دومًا. وغالبًا ستعاني من بعض الصداع نتيجة ذلك .
أنصحك باستخدام المكوّن WebBrowser فهو الأفضل والأسلم، وهو ينجح دومًا. سيعمل هذا المكوّن على التعامل مع الموقع الذي ترغبه كما يتعامل أيّ متصفّح آخر مع ذلك الموقع، حيث يمكنك عند تحميل صفحة تسجيل الدخول، الوصول إلى مربعات النص الخاصة باسم المستخدم وكلمة المرور، فتعمل على تزويدها بهذه البيانات ثم تنقر زر تسجيل الدخول برمجيًّا!
انظر إلى الشيفرة التالي بلغة سي شارب والتي يمكن تعديلها بسهولة إلى لغة vb.net لتتوضّح لك الفكرة:
private void Form1_Load(object sender, EventArgs e)
{
webBrowser1.Navigate("https://mostaql.com/auth");
}
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
if(e.Url.AbsoluteUri != "https://mostaql.com/auth")
{
return;
}
HtmlElement userNameElement = webBrowser1.Document.GetElementById("identity");
HtmlElement passwordElement = webBrowser1.Document.GetElementById("password");
HtmlElementCollection buttons = webBrowser1.Document.GetElementsByTagName("button");
userNameElement.InnerText = "*******";
passwordElement.InnerText = "*****";
for(int i = 0; i < buttons.Count; i++)
{
var button = buttons[i];
if( button.InnerText.Trim() == "تسجيل دخول")
{
button.InvokeMember("click");
break;
}
}
}
يحوي المقطع السابق الشيفرة البرمجيّة اللازمة لتسجيل الدخول إلى موقع مستقل حيث يمكنك أن تعالج مستند HTML وعناصره بالطريقة التي تناسبك، فقط عليك أن تعرف معرّفات أو أنواع العناصر التي لديك في المستند والتي يمكن الحصول عليها بسهولة من خلال أدوات التطوير البرمجي الموجودة في المتصفحات.
لا يعني ذلك أنّك لا تستطيع تنفيذ ذلك باستخدام HttpWebRequest ولكن أتصوّر أنّ طريقتي أيسر. على العموم يمكنك الإطلاع على المزيد حول هذا الموضوع من الرابطين التاليين:
[Dev Tutorial] WebBrowser - Web Scraping
Multi Threaded WebScraping in C#