脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - python模拟登陆网站的示例

python模拟登陆网站的示例

2021-09-23 00:17可爱的黑精灵 Python

这篇文章主要介绍了python模拟登陆网站的示例,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下

使用已有cookie登陆

使用浏览器登陆,获取浏览器中的cookie信息,来进行登陆。

我们以博客园为例,先登录博客园账号。我们访问随笔列表,在控制台我们可以看到我们登陆后浏览器的cookie

python模拟登陆网站的示例

剔除一些数据统计及分析的cookie,剩下的就是登陆可能需要的.CNBlogsCookie和.Cnblogs.AspNetCore.Cookies

  1. # _ga google分析 cookie
  2. # UM_distinctid 友盟cookie
  3. # CNZZxxx CNZZcookie
  4. # __utma,__utmc,__utmz google统计网站
  5. # Hm_lvt_xxx 百度统计网站
  1. import urllib.request
  2.  
  3. url = 'https://i.cnblogs.com/posts'
  4.  
  5. user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36'
  6.  
  7. #浏览器登录后得到的cookie,也就是刚才复制的字符串
  8. cookie_str = '.CNBlogsCookie=xxx; .Cnblogs.AspNetCore.Cookies=xxx'
  9.  
  10. headers = {
  11. 'User-Agent': user_agent,
  12. 'cookie':cookie_str
  13. }
  14.  
  15. req = urllib.request.Request(url,headers=headers)
  16. resp = urllib.request.urlopen(req).read().decode('utf-8')
  17.  
  18. print(resp)

python模拟登陆网站的示例

登陆获取cookie

登陆的表单一般是使用的form data,现在也有些表单使用request payload使用json格式传参。

form data如药智网

python模拟登陆网站的示例

request payload如博客园

python模拟登陆网站的示例

form data

博客园的登陆需要拖动验证所以略过。我们以药智网为例,我们打开控制台可以看到登陆需要传的表单参数,这里是使用的form data表单。我们模拟登陆后获取到登陆后的cookie,然后访问登录后的个人中心页面。

python模拟登陆网站的示例

  1. import urllib.request
  2. import http.cookiejar
  3.  
  4. url = 'https://www.yaozh.com/login'
  5.  
  6. user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36'
  7.  
  8. # formData数据
  9. data = {'username': '用户名',
  10. 'pwd': '密码',
  11. 'formhash': 'C3086BBA84',
  12. 'backurl': 'https%3A%2F%2Fwww.yaozh.com%2F'}
  13.  
  14. post_data = urllib.parse.urlencode(data).encode('utf-8')
  15.  
  16. # 请求头设置
  17. headers = {
  18. 'User-Agent': user_agent
  19. }
  20.  
  21. # 构造登陆请求
  22. req = urllib.request.Request(url, headers=headers, data=post_data)
  23.  
  24. # cookie
  25. cookie = http.cookiejar.CookieJar()
  26.  
  27. # 构造一个opener携带登录后的cookie
  28. opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cookie))
  29.  
  30. # 发送登陆请求
  31. resp = opener.open(req)
  32.  
  33. print(resp)
  34.  
  35. # 登录后个人中心
  36. url = 'https://www.yaozh.com/member/'
  37.  
  38. # 构造访问请求
  39. req = urllib.request.Request(url, headers=headers)
  40.  
  41. resp = opener.open(req).read().decode('utf-8')
  42.  
  43. print(resp)

python模拟登陆网站的示例

request payload

如果登陆需要request payload我们需要将参数转为json字符串并在头部设置Content-Type

  1. import json
  2. ...
  3.  
  4. data = {'loginType': '1',
  5. 'pwdOrVerifyCode': '密码',
  6. 'userIdentification': '账号',
  7. 'uaToken': '',
  8. 'webUmidToken':''}
  9.  
  10. headers = {
  11. 'Content-Type': 'application/json;charset=UTF-8',
  12. 'User-Agent': user_agent
  13. }
  14.  
  15. req = urllib.request.Request(url, headers=headers, data=json.dumps(data))
  16. ...

登陆后用session保持登陆状态

我们用requests模块的Session对象来保存回话信息

  1. import requests
  2.  
  3. url = 'https://www.yaozh.com/login'
  4.  
  5. user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36'
  6.  
  7. # formData数据
  8. data = {'username': 'chenjy1225',
  9. 'pwd': '19931225yjy',
  10. 'formhash': 'C3086BBA84',
  11. 'backurl': 'https%3A%2F%2Fwww.yaozh.com%2F'}
  12.  
  13. #构造Session
  14. session = requests.Session()
  15.  
  16. # 发送post请求
  17. resp = session.post(url, data)
  18.  
  19. # 登录后个人中心
  20. url = 'https://www.yaozh.com/member/'
  21.  
  22. # 发送请求访问个人中心
  23. resp = session.get(url).content.decode('utf-8')
  24.  
  25. print(resp)

python模拟登陆网站的示例

调用浏览器登陆

我们也可以在程序中调用一个浏览器来访问登陆网站。在python中使用Selenium库就能轻松实现调用浏览器,被控制的浏览器可以是chrome、firefox等。
以前较常用的还是PhantomJS但是PhantomJS被python弃用了。

UserWarning: Selenium support for PhantomJS has been deprecated, please use headless versions of Chrome or Firefox instead
warnings.warn('Selenium support for PhantomJS has been deprecated, please use headless '

firefox对应的geckodriver

chrome对应的chrnpm.taobao.org/mirrors/chromedriveromedriver

1.下载Selenium、firefox浏览器及firefox驱动。

2.将下载的firefox驱动geckodriver放在firefox浏览器安装目录

3.将firefox浏览器安装目录添加到path中

4.重启ide

我们找到需要登陆时候输入的元素id及登陆button id。

python模拟登陆网站的示例

  1. from selenium import webdriver
  2. import time
  3.  
  4. # 新建selenium浏览器对象,后面是geckodriver.exe下载后本地路径
  5. browser = webdriver.Firefox()
  6.  
  7. url = 'https://www.yaozh.com/login'
  8.  
  9. # 浏览器访问登录页面
  10. browser.get(url)
  11.  
  12. # 等待3s用于加载脚本文件
  13. browser.implicitly_wait(3)
  14.  
  15. # 输入用户名
  16. username = browser.find_element_by_id('username')
  17. username.send_keys('chenjy1225')
  18.  
  19. # 输入密码
  20. password = browser.find_element_by_id('pwd')
  21. password.send_keys('19931225yjy')
  22.  
  23. # 点击登录按钮
  24. login_button = browser.find_element_by_id('button')
  25. login_button.submit()
  26.  
  27. # 网页截图
  28. browser.save_screenshot('screenshot.png')
  29.  
  30. # 强制等待5s,等待登录后的跳转
  31. time.sleep(5)
  32.  
  33. url = 'https://www.yaozh.com/member/'
  34.  
  35. browser.get(url)
  36.  
  37. # 网页截图个人中心
  38. browser.save_screenshot('screenshot1.png')
  39.  
  40. # 关闭浏览器
  41. browser.quit()

screenshot.png:

python模拟登陆网站的示例

screenshot1.png:

python模拟登陆网站的示例

以上就是python模拟登陆网站的示例的详细内容,更多关于python模拟登陆网站的资料请关注服务器之家其它相关文章!

原文链接:https://www.cnblogs.com/chenjy1225/p/11758761.html

延伸 · 阅读

精彩推荐