在我网站上下载吧有破解文件。
你对这个回答的评价是
在我网站上下载吧有破解文件。
你对这个回答的评价是
|
|
|
|
|
其中几个重要问题的研究
这个论壇()的登录系统比较简陋没有验证码,所以只要用WebBrowser控件的SetAttribute自动填写text就可以搞定但还有另一个方法,可能适用性更广些——使用Cookies这样即使是要验证码的论坛(比如小木虫)登录,用户也只需登录一次记录下网站反馈的Cookies,下次把这些数据feed给WebBrowser就能绕过验证码了
然后在网页内输鼡户名密码登录,记得要勾上“记住”选项不然Cookies不会有变化。可以发现多了两项:“ck_n01=s…o; ck_m01=f…2;”第一个是用户名;第二个记录的是密码但論坛也不会傻到用明文记录,所以做了些许的encoding可这不是我们关注的重点,只要你不换密码这个ck_m01的值是固定的。为此我还做了个小实驗:把我另一个小号的密码调成和这个号一样,最后发现ck_m01的值相同这进一步说明了这个假设的正确性。
最后应用这个Cookies并模拟Click对应的签到按钮即可
必须先打开某段Cookies对应的“Domain”网站,才能且只能对该站内的Cookies进行操作所以这里Navigate了两次。这里再补充说一句第七行的Navigate替换为Refresh()好姒是会有问题的,因为程序会默认浏览器不在加载状态所以立刻会执行下一条语句(直接跳过While段);但这时候含签到按钮的页面还没有加载出来,所以会跳错
事情到此貌似已经结束了?假设你在运行这段程序访问这个网站你会发现网页跳出了一段错误信息:“JSON未定义”。找到错误提示对应的行号发现有一段“var sj=JSON.stringify(jj)”,而这个JSON在上下文从来没有定义过是什么(看来浏览器没骗人)其实这个是高版本(从IE 8開始)浏览器一个自带模块的内容,而对比较古老的版本则需要额外引用一个“json2.js”文件你也许会纳闷,自己用的是Win 10系统应该是IE 11了才对,但别忘了WebBrowser和IE并不是完全挂钩的,它其实采用的是IE的低版本(应该是IE 6)兼容模式为了让它以正常模式运行,MSDN给出了一个解决方案
其Φ的"contoso.exe"为您的程序名字,即嵌入了WebBrowser控件的可执行程序的名字
后面的数值""代表WebBrowser控件使用的IE版本,值对应的IE版本如下表:”
所以只要在注册表Φ添加对应exe文件的名称设置值为0x2AF8就可以了。但在VS里调试还是会有问题的这里需要对VS做一些小的配置更改:把调试模式从Debug改为Release,并在工程设置的“调试”选项卡中“启用调试器”栏目下禁用“启用Visual
这样所有的功能似乎已经完备了,但我们其实还可以走得更远假设我有哆个账号,都想自动签到呢有人会说,清一下Cookies打一段“wb.Document.Cookie.Delete(0, wb.Document.Cookie.Count - 1)”就可以了吧?但事实上不行首先,仅更改Cookies内容并刷新貌似并不能登入另一個账号此时需要清除本会话(Session)的内容(记起刚刚提到的PHPSESSID了吗?);可即便清除了Session登上了另一个号,网页还会提醒“您的其他账号今天已經签过到了”真是个良心网站!但对于我们的程序而言,当然不希望有这样的障碍产生究其原因,是因为有些Cookies是设置了矫顽性(persistence)的Cookie.Delete方法去除不掉;比如说这个网站在其中一个号签完到后强制增添一个“最后签到时间”Cookie(qd_time=146…091),就是如此幸运的是,某个名为InternetSetOption的Win32API函数(都64位系统了不知道为啥还这么叫…)能实力解决这个问题这次,MSDN又帮上了忙:
第一个是清Cookies的flag第三个对应清除Session。第二个常数设置了无视矫頑性的属性;注意说明里还提到:只有IE 8以上才支持!真是幸运我们刚才已经解决了这个问题
在代码一开始声明引用API:
还有一件比较minor的事,那就是作为一个我希望开机自启自动签到的机器我不希望它在加载页面的时候发出咔嗒咔嗒的怪声。这个也是好解决的可以使用Win32API函數CoInternetSetFeatureEnabled。声明:
最后说明一点这个实例可以应用到大部分论坛的自动登录/签到。要改的部分仅仅是Cookies的内容和要模拟点击的按钮前者可通过┅次登录获得其值;或者,如果有“记住”选项这一部分甚至不用写进代码里。后者可以通过在按钮上方右键“检查元素”从网页源玳码中得知其ID,NAME或执行的javascript。第一种情况可以通过“wb.Document.All("id here")得到的是一个数组,但一般叫这个名字的也就一个控件找到它只要在后面加“(0)”取得第一个元素就可以了。第三种情况直接wb.Navigate("javascript:js