网络编程
位置:首页>> 网络编程>> Python编程>> Python3+selenium实现cookie免密登录的示例代码

Python3+selenium实现cookie免密登录的示例代码

作者:不努力,谁会可怜你?  发布时间:2023-01-31 15:43:09 

标签:Python3,selenium,cookie,免密登录

进过两天的研究终于实现了cookie的免密登录,其实就是session。特别开心,因为在Python爬虫群里问那些大佬,可是他们的回答令我寒心,自己琢磨!!!

靠谁比如靠自己,为此我总结下经验,以免入门的小白再次踩这样的吭。其实网上很多博客写的都比较不详细甚

首先问题自己思考,不懂得去群里问问,然后最重要的要理解事物的本质,只有理解后才能运用它;最后在百度一下把所有相关的博客都点开,一条一条的看一遍总结下规律,比较喽的就舍弃,这样基本上都能得到启发作用。比如selenium的本质就是操作浏览器的,那么操作cookie也是操作浏览器的,并且用selenium打开浏览器时什么都没有,如果进入某个网站就会生成cookie先关信息。等待,那么我们可以用selenium打开网站之后让他清除所有cookie避免干扰,然后睡眠20秒以便等我们登陆,这是就会产生cookie,我们将它获取下来就可以实现登陆了。

下面直接上代码:


# 登录
def login_jd():
 # 登录前清除所有cookie
 browser.get('https://www.baidu.com/')
 browser.delete_all_cookies()

# 打印登录前的cookie
 cookieBefore = browser.get_cookies()
 print(cookieBefore)

print("------------------------------------------------------------------------")
 time.sleep(2)
 list_cookies = [
   {'domain': '.baidu.com', 'httpOnly': False, 'name': 'H_PS_PSSID', 'path': '/', 'secure': False, 'value': '1420_21120_29074_29237_2518_2909_29134_2832_28585_26350_2913'},
   {'domain': '.baidu.com', 'expiry': 159184274.325927, 'httpOnly': False, 'name': 'BAIDUID', 'path': '/', 'secure': False, 'value': 'FF789623EA1785FF0D55ED0401D057B2:FG=1'},
   {'domain': 'www.baidu.com', 'expiry': 1563289, 'httpOnly': False, 'name': 'BD_UPN', 'path': '/', 'secure': False, 'value': '123143'},
   {'domain': '.baidu.com', 'expiry': 1560354688.892916, 'httpOnly': False, 'name': 'BDORZ', 'path': '/', 'secure': False, 'value': 'B490B5BF6F3CD40255D22BCDA1598'},
   {'domain': '.baidu.com', 'expiry': 1819468287.471656, 'httpOnly': True, 'name': 'BDUSS', 'path': '/', 'secure': False, 'value': 'tGem1JzblNpOa1VVek0yLThmbWR6RxENWZtcVNwUThpT2hCLTVsUFBQUFBJCQAAAAAAAAAAAEAAAA4MdBAd3d3d2dnZ2dnZWVlZWUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALkI~1y5CP9cVm'},
   {'domain': '.baidu.com', 'expiry': 2569420288, 'httpOnly': False, 'name': 'BIDUPSID', 'path': '/', 'secure': False, 'value': '587A2695FCD6D043A5FE5139E4F'},
   {'domain': '.baidu.com', 'expiry': 3707755.819949, 'httpOnly': False, 'name': 'PSTM', 'path': '/', 'secure': False, 'value': '156027786'},
   {'domain': 'www.baidu.com', 'httpOnly': False, 'name': 'BD_HOME', 'path': '/', 'secure': False, 'value': '1'}
 ]

# 获取之后的cookie
 cookies = browser.get_cookies()
 print(browser.get_cookies())

# 将获取的的所有cookies添加到浏览器
 for cookie in list_cookies:
   browser.add_cookie(cookie)
   print(cookie)
 time.sleep(2)
 # 刷新页面即可更新cookie
 browser.refresh()
 time.sleep(505)
 browser.quit()

Python3+selenium实现cookie免密登录的示例代码

Python3+selenium实现cookie免密登录的示例代码

示例二:

首先使用用户名和账号,登录获取cookie


import json
import time
from selenium.webdriver.chrome.options import Options
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.common.exceptions import NoSuchElementException

class Crawler():
 def gather():
   chrome_options = Options()
   chrome_options.add_argument("window-size=1024,768")
   driver = webdriver.Chrome(chrome_options=chrome_options, executable_path='C:\devtool\Anaconda\Scripts\chromedriver')
   wait = WebDriverWait(driver, 1)
   ##登录百度知道
   logurl = 'https://zhidao.baidu.com/'
   #登录前清楚所有cookie
   driver.delete_all_cookies()
   driver.get(logurl)
   ##登录前打印cookie
   print(driver.get_cookies())

##点击登录按钮
   driver.find_element_by_xpath('//*[@id="userbar-login"]').click()
   # driver.find_element_by_id("userbar-login").click()
   time.sleep(2)
   ##首次尝试的 默认进入扫码登录的界面
   try:
     footerULoginBtn = driver.find_element_by_xpath('//*[@id="TANGRAM__PSP_10__footerULoginBtn"]')
     footerULoginBtn.click() #切换到用户名和密码登录
     footerULoginBtn_not_exist = False
   except:
     footerULoginBtn_not_exist = True

## 用户名跟密码的设置并点击提交
   user = driver.find_element_by_name('userName')
   user.clear()
   pwd = driver.find_element_by_name('password')
   pwd.clear()
   submit = driver.find_element_by_id('TANGRAM__PSP_10__submit')
   time.sleep(2)
   user.send_keys('用户名')
   pwd.send_keys('密码')
   time.sleep(1)
   submit.click()
   time.sleep(1)
   ## 发送手机验证码 验证
   ##点击发送按钮
   ###是否需要输入手机验证码
   try:
     driver.find_element_by_xpath('//*[@id="TANGRAM__28__button_send_mobile"]').click()
     time.sleep(10)
     ##使用shell交互式,接受验证码
     message = input("Tell me the captcha: ")
     ##输入验证码
     captcha = driver.find_element_by_xpath('//*[@id="TANGRAM__28__input_label_vcode"]')
     time.sleep(1)
     captcha.send_keys(message)
     time.sleep(1)
     ##点击提交
     driver.find_element_by_xpath('//*[@id="TANGRAM__28__button_submit"]').click()
     time.sleep(3)
   except:
     time.sleep(1)

### 获取cookie
   cookie = driver.get_cookies()
   print(cookie)
   jsonCookies = json.dumps(cookie)
   with open('vcyber.json', 'w') as f:
     f.write(jsonCookies)

time.sleep(30)

Crawler.gather()

获取cookie后,可以不用输入密码登录


import json
import time
from selenium.webdriver.chrome.options import Options
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.common.exceptions import NoSuchElementException

class Crawler():
 def gather():
   chrome_options = Options()

chrome_options.add_argument("window-size=1024,768")
   driver = webdriver.Chrome(chrome_options=chrome_options, executable_path='C:\devtool\Anaconda\Scripts\chromedriver')
   wait = WebDriverWait(driver, 1)

##登录百度知道
   logurl = 'https://zhidao.baidu.com/'

#登录前清楚所有cookie
   driver.delete_all_cookies()
   driver.get(logurl)

f1 = open('vcyber.json')
   cookie = f1.read()
   cookie = json.loads(cookie)
   for c in cookie:
     driver.add_cookie(c)
   # # 刷新页面
   driver.refresh()

Crawler.gather()

来源:https://blog.csdn.net/qq_32603969/article/details/91415487

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com