110,561
社区成员
发帖
与我相关
我的任务
分享
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
WebBrowser wb = new WebBrowser();
wb.Size = this.ClientSize;
Controls.Add(wb);
wb.Navigate("https://member.pchome.com.tw/login.html?ref=http%3A%2F%2Fmail.pchome.com.tw%2F");
wb.DocumentCompleted += AutoLogin;
}
void AutoLogin(object sender, WebBrowserDocumentCompletedEventArgs e)
{
WebBrowser wb = sender as WebBrowser;
var doc = wb.Document;
PictureBox pic = new PictureBox();
pic.Size = new System.Drawing.Size(276, 60);
string imgUrl = doc.All["submitLogin"].GetAttribute("src");
pic.Load(imgUrl);
Bitmap bmp = new Bitmap(pic.Image.Width, pic.Image.Height);
pic.DrawToBitmap(bmp, new Rectangle(0, 0, bmp.Width, bmp.Height));
Point pt = new Point();
for (int x = 0; x < bmp.Width; x++)
for (int y = 0; y < bmp.Height; y++)
if (bmp.GetPixel(x, y) == Color.FromArgb(0,1,5))
pt = new Point(x, y);
doc.GetElementById("userId").SetAttribute("value", "用户名"); //填用户名
doc.GetElementById("passwd").SetAttribute("value", "XXX"); //填密码
var idcheck = doc.GetElementById("idcheck");
idcheck.SetAttribute("action", "loginCheck.html?btnLoginX=" + pt.X + "&btnLoginY=" + pt.Y);
wb.DocumentCompleted -= AutoLogin;
idcheck.InvokeMember("submit");
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.IO;
using System.IO.Compression;
using System.Web;
using System.Collections;
namespace loginCSDN
{
public partial class Form1 : Form
{
CookieContainer cc = new CookieContainer();
string enc;
int x = 70, y = 20;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// 读取登录页面
byte[] bs = getBytes("https://member.pchome.com.tw/login.html?ref=http%3A%2F%2Fmail.pchome.com.tw%2F", cc, null);
string html = Encoding.UTF8.GetString(bs);
// 读取图片并确定x,y的值
string flagPic = "/loginButton.html?r=";
int begin = html.IndexOf(flagPic) + flagPic.Length;
int end = html.IndexOf("\"", begin);
enc = html.Substring(begin, end - begin); // 获取enc的值
bs = getBytes("https://member.pchome.com.tw/loginButton.html?r=" + enc, cc, null); // 获取图片
MemoryStream ms = new MemoryStream(bs);
Bitmap bmp = new Bitmap(ms);
for (int i = 0; i < 6; ++i)
{
if (bmp.GetPixel(x, y).ToArgb() != 0) break;
x += 70;
if (x > 210)
{
x = 70;
y += 20;
if (y > 40) break;
}
}
ms.Close();
}
// 用户登录
private void btnLogin_Click(object sender, EventArgs e)
{
try
{
string postData = "ref=http%3A%2F%2Fmail.pchome.com.tw%2F&fnn=&mredirect=&userId=sxldfang&passwd=943237&enc=" + HttpUtility.UrlEncode(enc) + "&x=" + x + "&y=" + y;
richTextBox1.Text = postData;
byte[] buffer = Encoding.Default.GetBytes(postData); // 要发送的数据
buffer = getBytes("https://member.pchome.com.tw/loginCheck.html", cc, buffer);
richTextBox1.Text = Encoding.UTF8.GetString(buffer); // 获取返回的页面内容
//buffer = getBytes("http://member.pchome.com.tw/login_ok.html?ref=http%3A%2F%2Fmail.pchome.com.tw%2F", cc, null);
//richTextBox1.Text = Encoding.UTF8.GetString(buffer);
//buffer = getBytes("http://mail.pchome.com.tw/mainpage", cc, null);
//richTextBox1.Text = Encoding.UTF8.GetString(buffer);
}
catch (Exception Err)
{
MessageBox.Show(Err.Message);
}
}
// 读取网络资源,返回字节数组
private static byte[] getBytes(string url, CookieContainer cookie, byte[] postData)
{
int c = url.IndexOf("/", 10);
byte[] data = null;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.AllowAutoRedirect = true;
if(cookie!=null)request.CookieContainer = cookie;
request.Referer = (c > 0 ? url.Substring(0, c) : url);
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)";
request.Headers[HttpRequestHeader.AcceptEncoding] = "gzip, deflate";
if (postData != null) // 需要 Post 数据
{
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = postData.Length;
Stream requestStream = request.GetRequestStream();
requestStream.Write(postData, 0, postData.Length);
requestStream.Close();
}
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
string ce = response.Headers[HttpResponseHeader.ContentEncoding];
int ContentLength = (int)response.ContentLength;
Stream s = response.GetResponseStream();
c = 1024 * 10;
if (ContentLength < 0) // 不能获取数据的长度
{
data = new byte[c];
MemoryStream ms = new MemoryStream();
int l = s.Read(data, 0, c);
while (l > 0)
{
ms.Write(data, 0, l);
l = s.Read(data, 0, c);
}
data = ms.ToArray();
ms.Close();
}
else // 数据长度已知
{
data = new byte[ContentLength];
int pos = 0;
while (ContentLength > 0)
{
int l = s.Read(data, pos, ContentLength);
pos += l;
ContentLength -= l;
}
}
s.Close();
response.Close();
if (ce == "gzip") // 若数据是压缩格式,则要进行解压
{
MemoryStream js = new MemoryStream(); // 解压后的流
MemoryStream ms = new MemoryStream(data); // 用于解压的流
GZipStream g = new GZipStream(ms, CompressionMode.Decompress);
byte[] buffer = new byte[c]; // 读数据缓冲区
int l = g.Read(buffer, 0, c); // 一次读 10K
while (l > 0)
{
js.Write(buffer, 0, l);
l = g.Read(buffer, 0, c);
}
g.Close();
ms.Close();
data = js.ToArray();
js.Close();
}
return data; // 返回字节数组
}
}
}