111,128
社区成员
发帖
与我相关
我的任务
分享
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
//网页加载完成,寻找签到html元素,并模拟单击事件
HtmlDocument doc = webBrowser1.Document; //获得webBrowser1当前显示的网页,即html文档
if (doc == null)
return ;
HtmlElement elem_signIn = doc.GetElementById("header-sin"); //找到“签到”的html元素
if (elem_signIn == null)
return ;
elem_signIn.FirstChild.InvokeMember("click"); //模拟单击“签到”按钮
//对弹出的”签到框“中的验证码截图,并保存
Bitmap captcha = new Bitmap(60, 20);
/* 截图操作省略 */
captcha.Save("C:\\Users\\Desktop\\1.jpg");
}
if (this.webBrowser1.InvokeRequired) //Timer thread calling
{
snapshot_delegate sd = new snapshot_delegate(Snapshot);
Invoke(sd);
}
else //委托主线程来帮忙执行
{
Bitmap b = new Bitmap(60, 20);
Point p_webBrowser = webBrowser1.PointToScreen(webBrowser1.Location); //thread-unsafe
Point p_target = new Point(p_webBrowser.X + webBrowser1.ClientSize.Width / 2 + 7, p_webBrowser.Y + webBrowser1.ClientSize.Height / 2 + 32); //X+ 7, Y +32
Graphics.FromImage(b).CopyFromScreen(p_target, new Point(0, 0), webBrowser1.ClientSize); //src, dst, size
//String filename = GlobalParameters.working_directory + @"\test.jpg"; //截图暂存
//b.Save(filename);
m_captcha = new CaptchaImage(b); //用截图得到的验证码图片,初始化CaptchaImage实例
m_captcha_numbers = m_captcha.GetCaptchaWrapper();
b.Dispose();
}
有类似问题的朋友主需要关心if-else这个结构就可以了,不需要细看代码。if是定时器线程执行,其中创建一个委托实例,而后委托主线程执行。