发一个手动输入验证码自动补充账号密码登录12306的东东[含源码]

geminizane 2012-01-05 05:13:48
如题……
非程序猿工作的业余爱好者……学了大半年没写点东西……
实现的效果是:手动输入验证码,不停的登录,以便登入订票后台……...
简单功能……高手见笑……

1.使用VS2010开发
2.需要引用MSHTML(Microsoft HTML Object Library)

源码链接:http://download.csdn.net/detail/geminizane/4001304

源码:

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 mshtml;

namespace winFormYZM
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private static int TestCount = 1;//尝试次数

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
textBox1.Text = webBrowser1.Document.Url.ToString();//文本框显示为当前地址
timer1.Start();//启动显示时间的计时器
textBox2.Focus();//每次提交后,页面都会重新载入,因此,将验证码的输入框获得焦点,以便输入
}

private void Form1_Load(object sender, EventArgs e)
{
webBrowser1.Navigate(new Uri("https://dynamic.12306.cn/otsweb/main.jsp"));//载入登录地址
}

private void textBox2_TextChanged(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(textBox3.Text) && !string.IsNullOrEmpty(textBox4.Text))
{
int intTxt = textBox2.Text.Length;
if (intTxt >= 5)//验证码为四位数,在输完四位数后,空格,增加一位,触发以下事件
{
string strCode = textBox2.Text.TrimEnd();//因为加了空格,所以去除末位的空格
webBrowser1.Document.Window.Frames[0].Document.GetElementById("UserName").SetAttribute("value", textBox3.Text);//账号输入框
webBrowser1.Document.Window.Frames[0].Document.GetElementById("password").SetAttribute("value", textBox4.Text);//密码输入框
webBrowser1.Document.Window.Frames[0].Document.GetElementById("randCode").SetAttribute("value", strCode);//验证码输入框
//webBrowser1.Document.Window.Frames[0].Document.InvokeScript("subForm();");
//webBrowser1.Document.Window.Frames[0].Document.GetElementById("subLink").InvokeMember("subForm");
HtmlElement str = webBrowser1.Document.Window.Frames[0].Document.GetElementById("subLink");//提交按钮
str.InvokeMember("click");//点击事件
textBox2.Text = "";//清空验证码文本框
label6.Text = "当前尝试次数:" + TestCount;//显示尝试次数
TestCount++;//尝试次数自增
}
}
else
{
MessageBox.Show("用户名/密码不能为空");
textBox2.Text = "";
}
}

private void pictureBox1_Click(object sender, EventArgs e)
{
webBrowser1.Refresh();//点击图片,刷新页面
}

private void button1_Click(object sender, EventArgs e)
{
webBrowser1.Refresh();//点击按钮,刷新页面
}

private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
if (checkBox1.Checked)//是否显示验证码
{
if (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
{
return;
}
//this.pictureBox1.Image = GetRegCodePic(ref webBrowser1, "img_rrand_code", null, null);
this.pictureBox1.Image = GetRegCodePic(ref webBrowser1, "img_rrand_code", null, null);
}
else
{
pictureBox1.Image = null;
}
}

private void timer1_Tick(object sender, EventArgs e)//显示当前时间的计时器
{
label5.Text ="当前时间:"+DateTime.Now.ToString();
}

//感谢.NET交流群(67784580)中的各位朋友的源码倾情提供
public static Image GetRegCodePic(ref WebBrowser webBrowser, String imgID, String imgSrc, String imgAlt)
{
//HTMLDocument doc = (HTMLDocument)webBrowser.Document.DomDocument;
HTMLDocument doc = (HTMLDocument)webBrowser.Document.Window.Frames[0].Document.DomDocument;
HTMLBody body = (HTMLBody)doc.body;
IHTMLControlRange rang = (IHTMLControlRange)body.createControlRange();
IHTMLControlElement img;

// 如果没有图片的ID,通过Src或Alt中的关键字来取
if (imgID.Length == 0)
{
Int32 ImgNum = GetPicIndex(ref webBrowser, ref imgSrc, ref imgAlt);

if (ImgNum == -1)
return null;
//img = (IHTMLControlElement)webBrowser.Document.Images[ImgNum].DomElement;
img = (IHTMLControlElement)webBrowser.Document.Window.Frames[0].Document.Images[ImgNum].DomElement;
}
else
{
//img = (IHTMLControlElement)webBrowser.Document.All[imgID].DomElement;
img = (IHTMLControlElement)webBrowser.Document.Window.Frames[0].Document.All[imgID].DomElement;
}

rang.add(img);
rang.execCommand("Copy", false, null);
Image regImg = Clipboard.GetImage();
Clipboard.Clear();
return regImg;
}

public static Int32 GetPicIndex(ref WebBrowser webBrowser, ref String imgSrc, ref String imgAlt)
{
IHTMLImgElement img;

// 获取所有的Image元素
//for (Int32 i = 0; i < webBrowser.Document.Images.Count; i++)
for (Int32 i = 0; i < webBrowser.Document.Window.Frames[0].Document.Images.Count; i++)
{
//img = (IHTMLImgElement)webBrowser.Document.Images[i].DomElement;
img = (IHTMLImgElement)webBrowser.Document.Window.Frames[0].Document.DomDocument;

if (imgAlt.Length == 0)
{
if (img.src.IndexOf(imgSrc) >= 0)
return i;
}
else
{
if (imgSrc.Length == 0)
{
// 当imgSrc为空时,只匹配imgAlt
if (img.alt.IndexOf(imgAlt) >= 0)
return i;
}
else
{
// 当imgSrc不为空时,匹配imgAlt和imgSrc任意一个
if (img.alt.IndexOf(imgAlt) >= 0 || img.src.IndexOf(imgSrc) >= 0)
return i;
}
}
}
return -1;
}
}
}

...全文
2226 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
miyugulia 2012-09-27
  • 打赏
  • 举报
回复
大半年的话还是不错的!楼主加油哦
geminizane 2012-01-07
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 q6112345 的回复:]

引用 12 楼 geminizane 的回复:

引用 11 楼 bubuweiyin 的回复:

哪位发给我下呢 这个号没积分 有积分的上次泄漏帐号就消失了 请发307552041@qq.com,谢谢

我在#10L发了个Rel版的..
源码:http://i.minus.com/1325781244/QQAupKdZeiY8YLWSH7uJTA/db1Je321AvQCeY.r……
[/Quote]

可以下载的哈,有个DownLoad
EOS350D 2012-01-07
  • 打赏
  • 举报
回复
好东西啊 谢谢LZ 9号就要抢20号的票了
bianry 2012-01-07
  • 打赏
  • 举报
回复
下载地址进不去呀。。楼主给我发一个吧,万分感激。。
binarylove33@gmail.com
ppasoft 2012-01-07
  • 打赏
  • 举报
回复
连接无法打开,楼主给发一份
3Q
em295380@126.com
geminizane 2012-01-07
  • 打赏
  • 举报
回复
http://115.com/file/bhrr4rul#
传了份115的,需要的朋友下载吧,里边加了张使用说明
longlongagomm 2012-01-07
  • 打赏
  • 举报
回复
下载地址无法打开啊,我WIN7系统,楼主请发我一份好吗?谢谢了!215158015@qq.com
dengdai1223 2012-01-07
  • 打赏
  • 举报
回复
下载后,解压缩完了之后呢?
怎么用啊??
CalmOrz 2012-01-06
  • 打赏
  • 举报
回复
你妹的早点发啊、这样我也不至于订不到票了、、呜呜
xiaotiange 2012-01-06
  • 打赏
  • 举报
回复
不错 明天用
xingjibing 2012-01-06
  • 打赏
  • 举报
回复
这个可以有
q6112345 2012-01-06
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 geminizane 的回复:]

引用 11 楼 bubuweiyin 的回复:

哪位发给我下呢 这个号没积分 有积分的上次泄漏帐号就消失了 请发307552041@qq.com,谢谢

我在#10L发了个Rel版的..
源码:http://i.minus.com/1325781244/QQAupKdZeiY8YLWSH7uJTA/db1Je321AvQCeY.rar
[/Quote]
Rel版的这个地址下不了啊~
楼主能给发一个麽?q6112345@qq.com 灰常感谢
bubuweiyin 2012-01-06
  • 打赏
  • 举报
回复
谢谢20楼的朋友
Januray 2012-01-06
  • 打赏
  • 举报
回复
恳求大家指教初次入门c#的菜鸟要买什么书来看才能学懂C#.我深深体会到我有多菜。在学校学了一学期只从老师那学到一个宿舍管理系统。什么美化什么记住密码什么什么什么太多什么都不会啊啊啊啊 !痛定思痛。决定向楼主看齐。求各路高手指点下在下。如何入门、如何看懂源代码。
geminizane 2012-01-06
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 yy13xian 的回复:]

不行呀,下载了打不开。
[/Quote]

需要.net4.0的支持,win7下应该可以直接打开
在bin目录下有debug/rel两个exe可以使用
geminizane 2012-01-06
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 bubuweiyin 的回复:]

楼主 你是怎么获得页面上的控件名称的呢???验证码是什么控件,名称是什么?想整一个自动识别验证码的
[/Quote]

用Opera的检查元素或者IE的开发者工具
验证码图片的相应HTML为:
<img height="26" src="passCodeAction.do?rand=lrand" onclick="this.src=this.src+'&'+Math.random();" title="单击刷新验证码" id="img_rrand_code">
bubuweiyin 2012-01-06
  • 打赏
  • 举报
回复
楼主 你是怎么获得页面上的控件名称的呢???验证码是什么控件,名称是什么?想整一个自动识别验证码的
msvvan 2012-01-06
  • 打赏
  • 举报
回复
不行呀,下载了打不开。
geminizane 2012-01-05
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 bubuweiyin 的回复:]

哪位发给我下呢 这个号没积分 有积分的上次泄漏帐号就消失了 请发307552041@qq.com,谢谢
[/Quote]
我在#10L发了个Rel版的..
源码:http://i.minus.com/1325781244/QQAupKdZeiY8YLWSH7uJTA/db1Je321AvQCeY.rar
bubuweiyin 2012-01-05
  • 打赏
  • 举报
回复
哪位发给我下呢 这个号没积分 有积分的上次泄漏帐号就消失了 请发307552041@qq.com,谢谢
加载更多回复(7)

110,568

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧