前言
我只是想算算每个月洗澡花了多少钱……
Selenium模拟登录
登录需要提交账号、密码、验证码
#实例化
browser=webdriver.Edge()
browser.implicitly_wait(10)
url1='http://card.cqu.edu.cn/'
browser.get(url1)
#学工号和密码
user_id='学号/工号'
user_psd='密码'
#输入学工号和密码
user_id_input=browser.find_element(By.XPATH,'/html/body/div[1]/div[4]/div/div/ul[2]/li[1]/input')
user_id_input.send_keys(user_id)
time.sleep(3)
user_psd_input=browser.find_element(By.XPATH,'/html/body/div[1]/div[4]/div/div/ul[2]/li[2]/input')
user_psd_input.send_keys(user_psd)
验证码会刷新,于是通过截图的方式获取验证码图片,并利用1超级鹰平台识别验证码
#获取验证码图片
def get_image(browser):
browser.save_screenshot('card.png')
img_page=Image.open('card.png')
img_element=browser.find_element(By.ID,'img_valiCode')
location=img_element.location
size=img_element.size
left=location['x']*1.5
top=location['y']*1.5
right=left+size['width']*1.5
bottom=top+size['height']*1.5
img_code=img_page.crop((left,top,right,bottom))
img_code.save('code.png')
pass
def chaojiying():
chaojiying = Chaojiying_Client('账户', '密码', '软件ID')
im = open('code.png', 'rb').read()
return chaojiying.PostPic(im, 1902)['pic_str']
#窗口最大化以便截图
browser.maximize_window()
登录并获取cookies
#识别验证码
get_image(browser)
res=chaojiying()
captcha_input=browser.find_element(By.XPATH,'/html/body/div[1]/div[4]/div/div/ul[2]/li[3]/span[1]/input')
captcha_input.send_keys(res)
#登录
actions=ActionChains(browser)
login_button=browser.find_element(By.XPATH,'/html/body/div[1]/div[4]/div/div/ul[2]/li[5]/button')
actions.click(login_button).perform()
#获取cookies
time.sleep(20)
cookies=browser.get_cookies()
browser.quit()
Requests获取json数据
F12分析知应使用post请求
url2='http://card.cqu.edu.cn/NcReport/GetPersonTrjn'
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36 Edg/117.0.2045.36'}
cookies_dict={cookie['name']:cookie['value'] for cookie in cookies}
month=input()
if len(month)==1:
month='0'+month
sdate=f"2023-{month}-01"
edate=f"2023-{month}-31"
rows="200"
data={"sdate":sdate,"edate":edate,"account":"2101870000225743","trancode":"01,02,03,13,14,15,17,18,21,23,25,39,40,41,42,43,44,45,49,A0,A1,A4,5A,5B","rows":rows}
response=requests.post(url=url2,headers=headers,cookies=cookies_dict,data=data).json()
#如果要获取的数据超过200条,重新提交请求
if int(response["total"])<int(rows):
data['rows']=response["total"]
response=requests.post(url=url2,headers=headers,data=data,cookies=cookies_dict).json()
处理获取的数据,计算一个月的热水消费
lines=response['rows']
tot=0
for line in lines:
if line['mchAcctName']=='重庆大学热水收费':
tot+=-line['tranAmt']/100
#print(line['tranDt'],line['tranAmt'],line['mchAcctName'])
print(round(tot,2))
标签:cookies,img,Selenium,json,user,input,div,Requests,browser
From: https://www.cnblogs.com/chenelm/p/17728655.html