修改版,实现v2ex的每日签到,原版脚本是别人的,忘了是找的谁的了。
前几日突然发现,好好的签到功能不能使用了,分析了下v2ex的源码,发现原来是网站登录的时候用户名和密码两个input的name改成自动生成的了,遂有了如下的代码:
#/usr/bin/python # -*- coding : utf-8 -*- from bs4 import BeautifulSoup import requests import os username = 'xxx' # your v2ex username password = 'xxx' # your v2ex password login_url = 'https://v2ex.com/signin' home_page = 'https://www.v2ex.com' mission_url = 'http://www.v2ex.com/mission/daily' UA = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.152 Safari/537.36" headers = { "User-Agent" : UA, "Host" : "www.v2ex.com", "Referer" : "https://www.v2ex.com/signin", "Origin" : "https://www.v2ex.com" } v2ex_session = requests.Session() def make_soup(url,tag,name): page = v2ex_session.get(url,headers=headers,verify=True).text soup = BeautifulSoup(page) soup_result = soup.find(attrs = {tag:name}) # print soup_result return soup_result def getRespone(url): return v2ex_session.get(url,headers=headers,verify=True).text def _soup(text, tag, name): soup = BeautifulSoup(text) soup_result = soup.find(attrs = {tag:name}) # print soup_result return soup_result def _soup_all(text, tag, name): soup = BeautifulSoup(text) soup_result = soup.find_all(attrs = {tag:name}) # print soup_result return soup_result # get login parameter once_value response = getRespone(login_url) once_value = _soup(response,'name','once')['value'] print once_value # get login form' user and password name formNames = _soup_all(response,'class','sl') # print formNames print formNames[0]['name'] print formNames[1]['name'] post_info = { formNames[0]['name'] : username, formNames[1]['name'] : password, 'once' : once_value } resp = v2ex_session.post(login_url,data=post_info,headers=headers,verify=True) # get final sign url short_url = make_soup(mission_url, 'class', 'super normal button')["onclick"] print short_url # os._exit(0) first_quote = short_url.find("'") last_quote = short_url.find("'", first_quote+1) #str.find(str, beg=0 end=len(string)) final_url = home_page + short_url[first_quote+1:last_quote] print(final_url) # start sign page = v2ex_session.get(final_url,headers=headers,verify=True).content suceessful = make_soup(mission_url, 'class', 'fa fa-ok-sign') if suceessful: print ("Sucessful.") else: print ("Something wrong.")