当前位置:   article > 正文

selenium获取cookie并携带模拟登录_driver cookie expiry

driver cookie expiry

前言:

有小伙伴可能会觉得明明F12在开发者选项里面就能获取到cookie信息为啥还要专门写一个程序去获取,这不多此一举嘛其实并不是哟,首先呢一般你直接登录之后得cookie信息都是不完整得只有一条而且大部分都是加密过得,哪怕我们假设它是完整得你直接复制之后selenium也接受不了,因为直接复制得格式不是selenium要求的你再去转换格式不得很麻烦呀

不多废话哈切入正题,这次测试得目标网站为QQ空间     https://mail.qq.com/

1、获取cookie信息 

先定义前面代码

  1. from selenium import webdriver
  2. from selenium.webdriver import ChromeOptions #这个包用来规避被检测的风险
  3. import time #延迟
  4. option = ChromeOptions()
  5. option.add_experimental_option('excludeSwitches',['enable-automation'])
  6. driver_path=r'驱动的路径' #定义好路径
  7. driver=webdriver.Chrome(executable_path=driver_path,options=option) #初始化路径+规避检测

其实吧,QQ空间没啥好注意的地方,唯一需要注意的是这个登录框是在iframe里面,也就是嵌套得网页,如果你直接在原本的QQ空间网页定位元素是发现定位不到的。比如,我定位的账号输入框 :

 

 这个时候我们需要切换到iframe去操作代码如下,如果不知道怎么切换的话可以看这位博主写的文章简单易懂好吧!(26条消息) selenium之 定位以及切换frame(iframe)_灰蓝-CSDN博客_selenium切换iframehttps://blog.csdn.net/huilan_same/article/details/52200586

  1. def denglv():
  2. driver.get('https://mail.qq.com/')
  3. driver.implicitly_wait(10) #避免加载太久报错
  4. time.sleep(1)
  5. driver.switch_to_frame("login_frame") #切换到iframe去操作元素

能看到这里的我觉得就不用讲咋定位元素了,如果有实在不懂的小伙伴可以搜索一下有很多博主写的都很好的,我这里直接贴后面的代码

  1. def denglv():
  2. driver.get('https://mail.qq.com/')
  3. driver.implicitly_wait(10)
  4. time.sleep(1)
  5. driver.switch_to_frame("login_frame")
  6. zhanghao=driver.find_element_by_xpath('//input[@class="inputstyle"]').send_keys('QQ账号') #输入账号
  7. time.sleep(2)
  8. mima=driver.find_element_by_xpath('//input[@type="password"]').send_keys('QQ密码') #密码
  9. # time.sleep(15)
  10. denglvs= driver.find_element_by_xpath('//input[@type="submit"]').click() #点击登录按钮
  11. time.sleep(4)
  12. driver.refresh() #刷新网页
  13. time.sleep(4)
  14. cookie=driver.get_cookies() #获取cookie信息
  15. print(cookie) #打印cookie信息

可以看到返回的cookie信息如下: 

好了,怎么获取说到这里接下来就是怎么登录了

2、携带cookie信息达到已登录的状态

我直接贴代码,我都是有写注释的小伙伴自己看下哈

  1. def denglv2():
  2. driver.get('https://mail.qq.com/')
  3. driver.implicitly_wait(10) # 如果网页没有加载完,避免出现加载超时得报错最多让他加载十秒
  4. # driver.delete_all_cookies() #清空之前得cookie信息
  5. cookies = #这里直接复制上面获取到得cookie信息粘贴就行了
  6. for cookie in cookies:
  7. if 'expiry' in cookie: # 有的cookie里面有这个参数,有的没有。有的话,需要做处理。
  8. del cookie['expiry']
  9. driver.add_cookie(cookie) # 传入cookie
  10. driver.refresh() # 刷新页面
  11. driver.get('https://mail.qq.com/') #重新请求页面

这里我说一下,为什么要对expiry做处理,因为有些网站是判断这个值看下是否过期,过期了就没法登录,还有的需要为切换为整形才可以,具体什么原因嘛,暂时我也不是很清楚,有懂的朋友可以说一下

最后也是 登录成功呀

完整源代码如下:

  1. from selenium import webdriver
  2. from selenium.webdriver import ChromeOptions #这个包用来规避被检测的风险
  3. import time #延
  4. option = webdriver.ChromeOptions()
  5. option.add_experimental_option('useAutomationExtension', False)
  6. option.add_experimental_option('excludeSwitches', ['enable-automation'])
  7. driver_path = r'驱动路径' # 定义好路径
  8. driver = webdriver.Chrome(executable_path=driver_path,options=option) # 初始化路径+规避检测
  9. driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
  10. "source": """
  11. Object.defineProperty(navigator, 'webdriver', {
  12. get: () => undefined
  13. })
  14. """
  15. })
  16. def denglv():
  17. driver.get('https://mail.qq.com/')
  18. driver.implicitly_wait(10)
  19. time.sleep(1)
  20. driver.switch_to_frame("login_frame")
  21. zhanghao=driver.find_element_by_xpath('//input[@class="inputstyle"]').send_keys('QQ账号') #输入账号
  22. time.sleep(2)
  23. mima=driver.find_element_by_xpath('//input[@type="password"]').send_keys('QQ密码') #密码
  24. # time.sleep(15)
  25. denglvs= driver.find_element_by_xpath('//input[@type="submit"]').click() #点击登录按钮
  26. time.sleep(4)
  27. driver.refresh() #刷新网页
  28. time.sleep(4)
  29. cookie=driver.get_cookies() #获取cookie信息
  30. print(cookie) #打印cookie信息
  31. def denglv2():
  32. driver.get('https://mail.qq.com/')
  33. driver.implicitly_wait(10) # 如果网页没有加载完,避免出现加载超时得报错最多让他加载十秒
  34. # driver.delete_all_cookies() #清空之前得cookie信息
  35. cookies = # 这里直接复制上面获取到得cookie信息粘贴就行了
  36. for cookie in cookies:
  37. if 'expiry' in cookie: # 有的cookie里面有这个参数,有的没有。有的话,需要做处理。
  38. del cookie['expiry']
  39. driver.add_cookie(cookie) # 传入cookie
  40. driver.refresh() # 刷新页面
  41. driver.get('https://mail.qq.com/')
  42. if __name__ == '__main__':
  43. denglv() #调用函数
  44. # denglv2()

声明

本文仅限于做技术交流学习,请勿用作任何非法商用!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/384311
推荐阅读
相关标签
  

闽ICP备14008679号