php 绕过cookie验证码,升级版!绕过验证码自动化登录网址,添加判断过期机制...

[Python] 纯文本查看 复制代码# ******************

# 通过cookie登录网站

# ******************

from selenium import webdriver

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.common.by import By

from selenium.webdriver.support import expected_conditions as EC

import json

from time import sleep

from datetime import datetime

import os

class Test_loggin(object):

def __init__(self, log_url, home_url, cookie_path, cookie_name = 'cookie.txt', expiration_time = 30):

'''

:param log_url: 登录网址

:param home_url: 首页网址

:param cookie_path: cookie文件存放路径

:param cookie_path: 文件命名

:param expiration_time: cookie过期时间,默认30分钟

'''

self.log_url = log_url

self.home_url = home_url

self.cookie_path = cookie_path

self.cookie_name = cookie_name

self.expiration_time = expiration_time

def get_cookie(self):

'''手动登录获取cookie'''

driver = webdriver.Chrome()

driver.get(self.log_url)

driver.maximize_window()

# 显性等待1,当页面某个元素消失时就执行下列的操作

WebDriverWait(driver, 30, 2).until_not(lambda x: x.find_element_by_xpath("//button[@id='btnLogin']"))

print("登录成功")

# 显性等待2,当页面出现某个元素时就执行下列的操作

WebDriverWait(driver, 30, 2).until(lambda x: x.find_element_by_xpath("//div[@class='c_title']"))

print("进入主页验证1成功")

# 显性等待3,EC.presence_of_element_located会抛出异常

WebDriverWait(driver, 30, 2).until(EC.presence_of_element_located((By.XPATH, "//div[@class='c_title']")))

print("进入主页验证2成功")

with open(os.path.join(self.cookie_path, self.cookie_name), 'w') as cookief: # 创建文本覆盖保存cookie

# 将cookies保存为json格式

cookief.write(json.dumps(driver.get_cookies()))

print("cookie保存成功")

driver.close()

print("浏览器退出")

def pd_Cookie(self):

'''获取最新的cookie文件,判断是否过期'''

cookie_list = os.listdir(self.cookie_path) # 获取目录下所有文件

if not cookie_list: # 判断文件为空时,直接执行手动登录

self.get_cookie()

else:

cookie_list2 = sorted(cookie_list) # 升序排序文件,返回新列表;sort是对原列表进行排列

new_cookie = os.path.join(cookie_path, cookie_list2[-1]) # 获取最新cookie文件的全路径

file_time = os.path.getmtime(new_cookie) # 获取最新文件的修改时间,返回为时间戳1590113596.768411

t = datetime.fromtimestamp(file_time) # 时间戳转化为字符串日期时间

print('当前时间:', datetime.now().strftime("%H:%M:%S"))

print('最新cookie文件修改时间:', t.strftime("%H:%M:%S"))

date = (datetime.now() - t).seconds // 60 # 时间之差,seconds返回相距秒数//60,返回分数

print('相距分钟:{0}分钟'.format(date))

if date > self.expiration_time: # 默认判断大于30分钟,即重新手动登录获取cookie

print("cookie已经过期,请重新手动登录获取")

return self.get_cookie()

else:

print("cookie未过期")

def cookie_loggin(self):

'''自动登录操作'''

self.pd_Cookie() # 首先判断cookie是否已获取,是否过期

driver = webdriver.Chrome()

driver.get(self.log_url)

driver.delete_all_cookies() # 清除旧cookies

# with可以上下文管理上文进行设置部署,下文进行处理,然后把处理的结果赋值给变量(cookie)

with open(os.path.join(self.cookie_path, self.cookie_name),'r') as cookief:

#使用json读取cookies 注意读取的是文件 所以用load而不是loads

cookieslist = json.load(cookief)

for cookie in cookieslist:

#该字段有问题所以删除就可以 浏览器打开后记得刷新页面 有的网页注入cookie后仍需要刷新一下

if 'expiry' in cookie:

del cookie['expiry']

driver.add_cookie(cookie)

driver.maximize_window()

driver.get(self.home_url)

sleep(4)

driver.close()

if __name__ == "__main__":

# 注意:网址要改为自己的网址哟,不然运行不了的

log_url = 'http://www.test/Login.html' # 登录页面url

home_url = 'http://www.test/UserInfo' # 首页url

cookie_path = 'D:\python_file\python自动化用例\cookies' # 存放cookie的路径

test_loggin = Test_loggin(log_url, home_url, cookie_path)

test_loggin.cookie_loggin()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值