selenium获取cookies并持久化登陆

需求背景:

​ 这几天需要写一个接口,用来批量上传数据,最开始考虑的是 UI 自动化,然后选值的时候自动化难以判别,最终选择 接口 自动化。

​ 然后操蛋的找了两天没找着该环境的登录接口,只能选择最笨的办法,selenium 模拟登陆,获取到cookie然后为 requests 所用。

我的思路是这样,听起来好像没啥难点,但还是卡了大晚上。

​ 主要遇到的问题是,我 selenium 模拟登陆是正常的,但到了requests cookie就是不对,左检查右检查,终于找到,犯了一个致命的错误:

​ 那我正常登陆后跳转到的是 index 页面,我从这里取cookies,那我取到的是 index 的cookies,虽然理论上他是一样的,但我也想不明白为啥就是不对

​ 最后的解决方案也很简单,在selenium 中在进行一次跳转,跳转到目标页面,然后再获取 cookies进行持久化操作,很幸运出来了。

逻辑代码大概如下:


options = webdriver.ChromeOptions()
# 忽略SSL验证
options.add_argument('--ignore-certificate-errors') # 忽略证书错误
options.add_argument('headless') # 隐藏窗口
#options.add_argument("--disable-gpu") # 规避BUG
driver = webdriver.Chrome(chrome_options=options)
# driver.implicitly_wait(30)
driver.get(u'https://tfssc.ynby.cn/CAS_Server/login?service=https://tfssc.ynby.cn/portal-web/login/casSuccess##')
driver.delete_all_cookies()
driver.find_element_by_id('username').send_keys('user')
driver.find_element_by_id('password').send_keys('pwd')
driver.find_element_by_name('submit').click()
driver.get('https:xxxxx')# 获取请求头
agent = driver.execute_script("return navigator.userAgent")
# 创建一个requests.session对象
session = requests.Session()
print(agent,type(agent))
# 获取登录cookies
saveCookies = driver.get_cookies()
c = saveCookies[0]['value']
print(saveCookies)
# 将cookies设置到session中
for cookie in saveCookies:
session.cookies.set(cookie['name'],cookie['value'])
print(session.cookies.values())
# cookies_value = saveCookies['name']
# 目标地址
url = "https:xxxxx"
driver.quit()
payload={'bizCategoryId': '12874',
'orgIds': ''} headers = {
'Accept': 'application/json, text/javascript, */*; q=0.01',
'User-Agent': agent ,
'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8',
#'Cookie': 'JSESSIONID='+c,
'Host': 'tfssc.ynby.cn'
}
print(headers)
response = session.request('POST', url, headers=headers, data=payload)

​ 又过了一坑。

鬼刀镇楼

最新文章

  1. 谈一谈NOSQL的应用,Redis/Mongo
  2. c#保留小数点后位数的方法
  3. linux shell重定向总结
  4. CentOS利用inotify+rsync实现文件同步
  5. Vector 和 ArrayList 区别
  6. Matlab Map
  7. bzoj1799: [Ahoi2009]self 同类分布
  8. 洛谷P3398 仓鼠找sugar
  9. github 使用教程初级版
  10. Nim游戏变种——取纽扣游戏
  11. jmeter接口测试教程
  12. 使用socket.io搭建聊天室
  13. c#调用带有安全认证的java webservice
  14. iOS-开发日志-UITextView介绍
  15. C iOcp
  16. javascript事件冒泡
  17. 03_OGNL
  18. Video for Linux Two API Specification
  19. 最全的jquery datatables api 使用详解
  20. vscode setting.jsonxx

热门文章

  1. 账号不允许远程访问服务器上的mysql数据库的解决办法host is not allowed to connect to this mysql
  2. 大小端(内存、寄存器、CPU)
  3. flutter 学习笔记
  4. IDEA 修改之前保存的git地址的账号和密码
  5. C++之面试题(4)
  6. CMake判断操作系统和编译器
  7. 【九度OJ】题目1113:二叉树 解题报告
  8. 【九度OJ】题目1198:a+b 解题报告
  9. 【LeetCode】959. Regions Cut By Slashes 由斜杠划分区域(Python)
  10. 记一次引入Elasticsearch的系统架构实战