正则实战-论坛贴吧一键签到
本文由按键学院提供技术支持
按键学院交流群(1群已满):376122403
零基础学按键精灵群(2群):372671254
记得在第一篇正则系列院刊的时候就和童鞋们说过,正则和POST是一对好基 友。
因为通过POST和GET方法得到的网页全是源文件,想要得到里面的信息的话就需要配合正则表达式来提取(虽然也可以用len、mid之类的函数配合提取。但是太复杂繁琐)
而正则表达式最大的好处就在能够从庞大复杂的文本里,精确的提取出想要的信息。我们这里就已制作一个按键论坛的登录和签到的脚本并且获取账号部分信息为范例,给大家介绍下正则表达式的用法思路: 1、先使用POST方法在按键论坛上登录账号和密码 2、使用GET的方法进行签到 3、使用正则表达式,提取网页上的信息(既是账号的一些信息) |
1、使用POST方法进行登录账号- //先把需要登录的账号和密码进行赋值到变量
- 账号 = ""
- 密码 = ""
- //发送账号登录请求的地址,以及POST请求的内容
- 登录 = "http://bbs.anjian.com/member.php?mod=logging&action=login&loginsubmit=yes&infloat=yes&lssubmit=yes&inajax=1"
- 登陆头信息 = "username=" & 账号 & "&password=" & 密码 & "&quickforward=yes&handlekey=ls"
- Set http = CreateObject("WinHttp.WinHttpRequest.5.1") '创建对象
- http.open "POST", 登录, False
- http.setrequestheader "Content-Type","application/x-www-form-urlencoded" //加上2个header
- http.setrequestheader "Content-Length",len(登陆头信息) //用函数取字符串长度
- http.send 登陆头信息//发送请求,带着内容
复制代码上面这段代码就是通过POST的方法登录登录账号信息,但是想要完成登录还不止这一步,因为在登录之后论坛并不是直接进入了首页,而是需要经过一个跳转,这种跳转在使用POST的时候是不会自动进行的,所以我们需要使用GET方法再进一次首页
- http.open "GET", 首页, false
- http.send
- If instr(http.responsetext, 账号) Then
- MessageBox "登录成功"
- End If
复制代码进入首页后查找源代码中是否有需要登录的账号字符串,如果有,就说明已经成功的登录了。
2、签到部分
账号签到部分我们直接使用GET的方法,只要找到签到的请求链接就行了- 签到 = "http://bbs.anjian.com/plugin.php?id=dsu_amupper:pper&ppersubmit=true&formhash=97df5d05&infloat=yes&handlekey=dsu_amupper&inajax=1&ajaxtarget=fwin_content_dsu_amupper"
- http.open "GET", 签到, false
- http.send
复制代码使用GET方法获取一次这个签到链接之后,这个账号就签到完成了
3、接下来就是通过正则的方式,来获取到这个账号的相应的信息了这里已获取账号的用户组,还有积分为范例。
登录按键论坛首页后,右击网页,选择查看源代码,就能查看到这个网页的源码了。
接着我们找到和用户组相关的那段源码
在这段源码中我们真正需要提取的是“小学一年级” 这段字符,
那正则表达式就可以这样写
“showUpgradeinfo\)">(.+)” (.+) 这个就表示我们需要提取出来的字段。前面的showUpgradeinfo\)"> 以及后面的 部分,都是为了把他和整个页面的代码区服开来,防止获取到其他无关的部分。
获取到用户组之后,我们还可以获取下账号的积分
同样,我们找到他对应的源代码:
我们需要获取的是”积分: 6“ 这个字段,那这个表达式就比较好写了
正则表达式:
积分: \d+这样就能直接获取到这个账号的积分了。
现在已经把表达式分析出来,那只要套用上正则的代码,就可以输出这写信息了
- 登录 = "http://bbs.anjian.com/member.php?mod=logging&action=login&loginsubmit=yes&infloat=yes&lssubmit=yes&inajax=1"
- 首页 = "http://bbs.anjian.com/forum.php"
- 签到 = "http://bbs.anjian.com/plugin.php?id=dsu_amupper:pper&ppersubmit=true&formhash=97df5d05&infloat=yes&handlekey=dsu_amupper&inajax=1&ajaxtarget=fwin_content_dsu_amupper"
- 登陆头信息 = "username=" & 账号 & "&password=" & 密码 & "&quickforward=yes&handlekey=ls"
- //发送账号登录请求的地址,以及POST请求的内容
- Set http = CreateObject("WinHttp.WinHttpRequest.5.1") '创建对象
- http.open "POST", 登录, False
- http.setrequestheader "Content-Type","application/x-www-form-urlencoded" //加上2个header
- http.setrequestheader "Content-Length",len(登陆头信息) //用函数取字符串长度
- http.send 登陆头信息//发送请求,带着内容
- //打开首页
- http.open "GET", 首页, false
- http.send
- If instr(http.responsetext, 账号) Then
- MessageBox "登录成功"
- End If
- text = http.responsetext
- //进行签到
- http.open "GET", 签到, false
- http.send
- //使用正则匹配进行获取账号相关信息
- set regEx = New RegExp '创建一个RegExp对象
- regEx.[Global] = TRUE '设置全局可用性为TRUE,在需要更换此属性时,我会提醒你的。
- regEx.IgnoreCase = FALSE'设置区分大小写为FALSE,也就是不区分大小写了
- regEx.pattern = "showUpgradeinfo\)"">(.+)"'设置正则表达式
- Set matches = regEx.execute(text) '进行匹配
- For Each Match In Matches
- TracePrint "账号的用户组为:" & Match.SubMatches(0)
- Next
- regEx.pattern = "积分: \d+"
- Set matches = regEx.execute(text)'进行匹配
- For Each Match In Matches
- TracePrint "当前账号的积分为:" & Match
- Next
复制代码 正则和POST的结合用法还有很多,他们的用处也是非常大,只要是想实现不开网页就进行获取网站信息之类的操作,都是可以通过这两个方法结合来实现。
上面这个范例还只是实现了单个账号的登录和签到,童鞋们可以自行的进行扩展,批量登录、签到,百度贴吧的登录、签到等等正则表达式系列一:showtopic.aspx?topicid=571764&forumpage=1&page=1正则表达式系列二:showtopic.aspx?topicid=572284&forumpage=1&page=1院刊目录showtopic.aspx?topicid=549014&forumpage=1&page=1
谢谢大家阅读,记得给小编送支花花 ! 顺手点个赞
[tr=rgb(143, 188, 143)] | 按键精灵免费公开课 | 实战班:回合制通用教学火热报名 |
【听课对象】:对按键精灵感兴趣的同学们都可以来~ 【上课地点】:零基础学按键精灵群(372671254) 【上课时间】:周天晚上19:30-21:00 【上课内容】:按键精灵脚本基础经验谈——图色命令
| 本期重点:回合制游戏--神武 学习时效:终生有效 上课时间:周2、周4、周6的 20:00--22:00 导师:工程师07 技术支持:果儿(院刊编辑) |
点我进入按键学院报名啦 招生细节进群咨询招生办主任:2群-372671254(优先加入) 1群-376122403
|