ฉันจะคลิกปุ่มบนไซต์อื่นโดยทางโปรแกรมได้อย่างไร

ฉันต้องการเข้าสู่ไซต์อื่นด้วยโปรแกรมของฉัน (asp.net/C#)

  1. ฉันจะรวบรวมข้อมูลไซต์และค้นหากล่องข้อความชื่อผู้ใช้และรหัสผ่านและกรอกข้อมูลที่จำเป็นได้อย่างไร
  2. แล้วฉันจะกด/ยิงปุ่มเข้าสู่ระบบได้อย่างไร?

หมายเหตุ: ฉันรวบรวมข้อมูลไซต์ด้วย HtmlAgilityPack ก่อนหน้านี้ .. มีวิธีใดบ้างที่จะใช้ dll นี้หรือ dll อื่น ๆ

เช่น ชื่อผู้ใช้คือ : รหัสผ่านผู้ใช้คือ : รหัสผ่าน และรหัสปุ่มเข้าสู่ระบบคือ : กด ทำอย่างไร?


person Amin AmiriDarban    schedule 23.01.2013    source แหล่งที่มา
comment
คุณเพียงแค่ส่งคำขอโพสต์ที่สร้างขึ้นโดยเฉพาะสำหรับหน้าเข้าสู่ระบบของพวกเขา นั่นคือทั้งหมดที่การคลิกปุ่มมักจะเป็น   -  person Stefan H    schedule 23.01.2013
comment
ฉันไม่เข้าใจ...คุณช่วยแสดงโค้ดตัวอย่างให้ฉันหน่อยได้ไหม   -  person Amin AmiriDarban    schedule 23.01.2013
comment
ตัวอย่าง: http://stackoverflow.com/questions/4015324/http-request-with-post   -  person Stephen    schedule 23.01.2013
comment
การเข้าสู่การรวบรวมข้อมูลเว็บและพยายามขับเคลื่อนหน้าเว็บด้วยโค้ดจะทำให้คุณเข้าใจสิ่งที่เกิดขึ้นในโปรโตคอล HTTP เมื่อคุณนำทางไปยังเพจเป็นครั้งแรก นั่นคือคำขอ GET เมื่อคุณคลิกปุ่ม (หรือกิจกรรมอื่น ๆ ที่อาจเกิดขึ้น) เบราว์เซอร์ของคุณทำการ POST ไปที่เพจและส่งชุดพารามิเตอร์ (ดูที่แท็บเครือข่ายใต้เครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ใน Chrome ด้วย F12 เพื่อดูว่ามีอะไรถูกส่งเมื่อคุณกดส่งใน แบบฟอร์มหน้า)   -  person Stefan H    schedule 23.01.2013


คำตอบ (1)


คุณไม่ต้องการทำงานแบบนั้น คุณต้องจำลองว่าไซต์จะทำอะไรเมื่อส่งแบบฟอร์มนั้นพร้อมกับคำขอโพสต์ไปยังเซิร์ฟเวอร์โดยส่งค่าต่างๆ คุณสามารถประเมินว่าไซต์ทำอะไรได้บ้างโดยใช้ Fiddler2 และดำเนินการส่งแบบฟอร์มตามปกติ จากนั้นจึงสรุปได้ดังนี้:

HttpWebRequest request;
        HttpWebResponse response;
        var responseData = "";
        var strUrl = "https://auctions.godaddy.com/trpSearchResults.aspx";

        var postData = string.Format("action=review_selected_add&items={0}_B_{1}_1|&rnd={2}&JlPYXTX=347bde7", auctionRef, bid,
            randomDouble(0, 1).ToString("0.00000000000000000"));
        request = (HttpWebRequest)WebRequest.Create(strUrl);
        request.Method = "POST";
        request.ContentType = "application/x-www-form-urlencoded";
        request.ContentLength = postData.Length;
        request.Accept = "text/html, application/xhtml+xml, */*";
        request.Accept = "image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/msword, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/x-silverlight, application/x-silverlight-2-b2, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */*";
        request.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11";
        request.Headers.Add("Accept-Encoding", "deflate");
        request.Referer = "auctions.godaddy.com";
        request.Headers["my-header"] = "the-value";
        request.KeepAlive = true;
        request.CookieContainer = cookies;
        request.Timeout = Timeout.Infinite;

        var stOut = new StreamWriter(request.GetRequestStream());
        stOut.Write(postData);
        stOut.Flush();
        stOut.Close();
        stOut = null;

        response = (HttpWebResponse)request.GetResponse();
        response.Cookies = request.CookieContainer.GetCookies(request.RequestUri);
        var encoding = new System.Text.UTF8Encoding();
        var responseReader = new StreamReader(response.GetResponseStream(), encoding, true);

        encoding = new System.Text.UTF8Encoding();
        responseReader = new StreamReader(response.GetResponseStream(), encoding, true);

        responseData = responseReader.ReadToEnd();
        response.Close();
        responseReader.Close();

เพียงสร้างคลาสโดยใช้ข้อมูลข้างต้นเพื่อโพสต์ข้อมูลและส่งกลับ html

person Aaron Gibson    schedule 25.01.2013