不想看太多前情提要废话的,可以往下拉,第一张图片之后,开始讲技术正题——
故事开始,作为一个穷人呢,也要理财的,毕竟,哪怕是买点四大行的股票,也比直接存在银行来得划算呐~
虽然券商提供了很多渠道,比如我用的是招商证券的户,有微信渠道、有官方一户通APP、有PC端、有网页端……
但是,微信太臃肿,官方APP老是搞升级烦,PC端花里胡哨爱弹提示消息(时不时也提升级),网页端则一小会不操作就被踢下线得重新登陆,而且登陆需要短信验证、偏偏每天的短信验证数量是有上限的……
嗯,其实重新登陆这个问题APP和PC客户端也一样有,只不过网页版的更烦,虽然知道是为了安全考虑,但是,不爽啊……
于是乎,决定自己动手来搞定需求吧!
给我这个念头的,其实是上次跟我提SOCKIT的那位大佬,大佬表示这东西用得好,可以玩出各种花来
仔细想想,要做就做到底,早就看那些指数烦了,定制一套自己的数据和交易系统
千里之行,始于足下,首先,从搞定基本的界面、登陆、保持在线、以及最核心的订单处理功能开始。
这次用的是winform界面,虽然上次玩C#已经是去年年初的事情了,有点手生,但不得不说,正是因为手生,才显得VS的友好,太容易上手了!
以下是初步的半成品界面,也就是搭了个拙劣框架的样子——
中间那一大块的图表和数据处理功能其实还没做(三天打鱼、两天晒网的犯拖延病,还有犹豫症,也不知道啥时候能做好,明明是挺简单的……)
当然了,发这篇文自然不是为了晒张图,写这么多废话还没上代码,只是因为思考了一下,觉得意义不大,因为未必用的一个证券商的户
这里主要是说说思路,然后再夹杂一点细节——
正题开始了!
点一:操作账户,总要有个接口吧
抓包解析PC端、APP端接口之类的,对于我这种新手来讲,也太过扯淡了,网页版才是最优选项
原本我是想直接用http组件完成所有交互的,但是,比起分析那些杂乱的JS的请求与返回、编写又臭又长的处理代码,还是用webbrowser吧,调试也方面得多
Chrome打开券商官网,进入交易通道,从登陆界面开始按下F12,查找表单控件……
验证码图片套到界面上这一点,我是抄的代码:
HtmlElementCollection peg = webBrowser1.Document.GetElementsByTagName("img");
HTMLDocument doc = (HTMLDocument)webBrowser1.Document.DomDocument;
HTMLBody body = (HTMLBody)doc.body;
IHTMLControlRange rang = (IHTMLControlRange)body.createControlRange();
IHTMLControlElement Img = (IHTMLControlElement)peg[1].DomElement; //图片地址
Image oldImage = Clipboard.GetImage();
rang.add(Img);
rang.execCommand("Copy", false, null); //拷贝到内存
Image numImage = Clipboard.GetImage();
try
{
Clipboard.SetImage(oldImage);
}
catch {
}
pictureBox1.Image = numImage;
在登陆按钮的点击事件里,把下面的模拟输入代码循环一下,填入表单,再模拟点下网页上的登陆按钮,就可以获取完整COOKIE,从而使用http组件进行各种POST提交和请求数据了
private void setinput(int index,string str)
{
HtmlElementCollection hec = webBrowser1.Document.Body.GetElementsByTagName("input");
Console.WriteLine(hec.Count);
hec[index