python+selenium实现的QQ群自动签到! #!-*- coding:utf-8 -*- from pyvirtualdisplay import Display from selenium import webdriver import requests #要签到的QQ群号列表 groupid = [123456789,987654321] headers = {'Content-Type':'application/x-www-form-urlencoded','Host':'qiandao.qun.qq.com','Origin':'http://qiandao.qun.qq.com','Referer': 'http://qiandao.qun.qq.com','User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36'} #创建一个启动session的请求对象 s = requests.Session() def login(): try: #启动一个虚拟桌面 display = Display(visible=0, size=(1100,700)) display.start() driver = webdriver.Firefox() driver.set_window_position(20, 40) driver.set_window_size(1100,700) #打开QQ登录界面 准备登录 driver.get('http://qzone.qq.com') driver.switch_to_frame('login_frame') driver.find_element_by_id('switcher_plogin').click() driver.find_element_by_id('u').clear() #填写QQ账号 driver.find_element_by_id('u').send_keys('qq号') driver.find_element_by_id('p').clear() #填写QQ密码 driver.find_element_by_id('p').send_keys('********') #模拟点击登录按钮 执行登录 获取cookie driver.find_element_by_id('login_button').click() cookies = driver.get_cookies() #退出浏览器 driver.quit() display.stop() return cookies except: pass cookies = login() for cookie in cookies: if cookie['name'] == 'skey': skey = cookie['value'] s.cookies.set(cookie['name'], cookie['value']) #计算bkn并存入cookie e = 5381 for i in range(len(skey)): e = e + (e5)+ord(skey[i]) bkn = str(2147483647 & e) s.cookies.set('Gtk', bkn) #签到方法 def sign(groupid): for gid in groupid: response = s.post('http://qiandao.qun.qq.com/cgi-bin/sign', data={'gc':gid, 'is_sign':0, 'bkn':bkn}, headers=headers) responseJson = response.json() if responseJson.has_key('em') and responseJson['em'] == 'no login': break #开始签到 sign(groupid) 好了,这样就完成了一个自动签到的脚本,运行它便会自动启动浏览器、自动填上账号密码登录、循环签到。但它只执行一次,我们要把它加入到计划任务crontab中。 0 0 * * * python /root/QQsign.py #为了测试可以加个输出日志,如 0 0 * * * python /root/QQsign.py >/root/crontab-run.log 2>&1 以上任务郑晓是在root帐户中创建,定时于每天0点执行/root/目录下的QQsign.py脚本,输出日志到crontab-run.log文件中。 |
|