首页 > 其他分享 >Selenium模拟登录(数字验证码)+Requests获取json数据

Selenium模拟登录(数字验证码)+Requests获取json数据

时间:2023-09-25 19:11:57浏览次数:49  
标签:cookies img Selenium json user input div Requests browser

前言

我只是想算算每个月洗澡花了多少钱……

Selenium模拟登录

image
登录需要提交账号、密码、验证码

#实例化
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数据

image
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

相关文章

  • Python的Selenium库:网页元素定位工具
    Selenium是一个用于自动化web应用测试的开源工具。通过Selenium,我们可以模拟真实用户的操作,如点击、输入、滚动页面等,来测试web应用的稳定性和可靠性。PythonSelenium库是Selenium的一个分支,可以方便地与Python语言结合使用。在PythonSelenium库中,元素定位是一项核心功能。通过......
  • 使用json+echarts实现数据库数据的可视化
    因为我上次是使用的另外一种方法实现的可视化,对json了解的不够,所以来补充一下这一块的知识点1、新建一个SpringBoot项目2、添加依赖<dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId></dependency><d......
  • Python爬虫基础(四):使用更方便的requests库
    文章目录系列文章索引一、requests库的使用1、官方文档2、安装requests库3、简单使用4、使用get请求5、使用post请求6、使用代理二、实战1、实战:实现古诗文网的登录(1)找到登录页面(2)登录操作需要的数据(3)获取隐藏域中的数据(4)获取验证码图片(5)登录操作(6)获取我的收藏2、实战:使用超级鹰验......
  • MySQL——处理JSON类型的数据
    MySQL对JSON类型数据的处理参考视频:快速学习MySQL8JSON注意,本文的键名也可以叫key,键值也可以叫value,意思是一样的1.字符串查询:JSON_EXTRACT假设我们有一个表叫做testDemo,其中有一个字段叫做details,类型为JSON,他的数据结构如下,我们就以这个结构为例(这是个例子,假设有很多行......
  • 14.JSON之间的相互转换
    Javascript中任何支持的类型都可以转换为JSON字符串对象{}数组【】所有的键值对key;valuevarasd={name:'猴王',age:123,nl:12234123}//对象转化为JSON字符串varaaa=JSON.stringify(asd);//JSON字符串转化为对象varabc=JSON.parse('{......
  • C#中使用Newtonsoft.Charp实现Json对象序列化与反序列化
    场景C#中使用Newtonsoft.Json实现对Json字符串的解析:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/105795048上面讲的对JSON字符串进行解析,实际就是JSON对象的反序列化。在与第三方进行交互时常需要封装对象,存储各种属性消息,然后将对象序列化为json字符串并进......
  • python 使用selenium 获取js渲染后的页面信息
    一、介绍二、代码三、问题 一、介绍现在的网站以及页面,一般都是js动态渲染,抓到的信息就与实际不符,所以需要加载js的工具,这里使用的就是seleniumSelenium是一个用于自动化测试的工具,可以模拟浏览器的行为来执行各种操作。在爬虫中,我们可以使用Selenium对网页进行......
  • python的配置文件 ini 类型/json类型
    ini类型会把所有的value都改成str类型,而json会保持原本value的类型不变。1.ini/cnf等类型配置文件cfg.cfg[mysql]host="10.12.7.154"port=31066user="root"password="xxx"charset="utf8"database="project_database"使用配置文件from......
  • PostgreSQL教程:JSON&JSONB类型
    JSON在MySQL8.x中也做了支持,但是MySQL支持的不好,因为JSON类型做查询时,基本无法给JSON字段做索引。PGSQL支持JSON类型以及JSONB类型。JSON和JSONB的使用基本没区别。撇去JSON类型,本质上JSON格式就是一个字符串,比如MySQL5.7不支持JSON的情况的下,使用text也可以,但是字符串类型无法校验......
  • 什么是 JSON Web Token
    JSONWebToken(JWT),又称为JSON令牌,是一种用于在网络应用之间安全地传输信息的开放标准(RFC7519)。它采用了一种紧凑的、自包含的方式来表示信息,通常用于身份验证和授权。JWT的设计目标是确保信息的完整性和安全性,同时具备易于使用和传输的特点。JWT的结构JWT由三个部分组成,它们之......