用Python简单实现cookie登录网址
本帖最后由 Test_dada 于 2020-6-1 13:45 编辑升级版!绕过验证码自动化登录网址,添加判断过期机制
https://www.52pojie.cn/thread-1184495-1-1.html(出处: 吾爱破解论坛)
在我平时的工作中,总会频繁地登录网站去进行一些操作
然后最让人头疼的就是,输入验证码{:1_926:}
所以今天给大家分享。如何绕过验证码
我们要做的就是拿到网站存储登录时的cookie,之后重新打开网页只要导入这个cookie就可以实现登录了
这里我用的是:python3.5+selenium+Chrome 版本 78.0.3904.108+对应Chrome驱动
需要分两个py文件,一个是存储cookie的,一个是导入自动登录的
话不多说,代码献上
# 第一个py文件,存储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
#登录网址
login_url = "http://www.test1_url.com" # 这里填目标网址
def get_cookie():
driver = webdriver.Chrome()
driver.get(login_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('cookies.txt','w') as cookief:
# 将cookies保存为json格式
cookief.write(json.dumps(driver.get_cookies()))
print("cookie保存成功")
driver.close()
print("浏览器退出")
if __name__ == "__main__":
get_cookie()
这里是另外一个导入自动登录的py文件(====================================================================================================)
from selenium import webdriver
import json
from time import sleep
# 记得写完整的url 包括http和httpsurl = 'http://www.test2_url.com' # 登录成功后的网址
driver = webdriver.Chrome()
driver.get(url)
#首先清除由于浏览器打开已有的cookies
driver.delete_all_cookies()
'''
说明一下,这里引号前面加一个字母 r 是为了确保在Windows系统中万无一失,故应该以原始字符串的方式指定路径,也就是在开头的引号前面加上r,
后面的r是只读的意思,还有rwa分别是:只能读不能覆盖,只能写会覆盖,只能写但是追加不会覆盖
'''
# with可以上下文管理上文进行设置部署,下文进行处理,然后把处理的结果赋值给变量(cookie)
with open(r'D:\python_file\python自动化用例\cookies.txt','r') as cookief: #使用json读取cookies 注意读取的是文件 所以用load而不是loads
cookieslist = json.load(cookief)
# 方法1删除该字段
for cookie in cookieslist:
#该字段有问题所以删除就可以浏览器打开后记得刷新页面 有的网页注入cookie后仍需要刷新一下
if 'expiry' in cookie:
del cookie['expiry']
driver.add_cookie(cookie)
'''
# 方法2 将expiry类型变为int
for cookie in cookieslist:
# 并不是所有cookie都含有expiry 所以要用dict的get方法来获取
# 字典.get('test1','test2') 若存在字典['test1']则返回字典['test1']的值。若不存在则返回值'test2'
# 字典要是没有该键,不用get就会报错
# 类型转换,type、isinstance(查看是否是某个类型,给出结果 True 或 False)
# type(num) isinstance(int_num,int)
if isinstance(cookie.get('expiry'), float): # 用isinstance判断键值是否为Flost
cookie['expiry'] = int(cookie['expiry'])
driver.add_cookie(cookie)
'''
driver.maximize_window()
# 要重新打开网站才会进入主页
driver.get(url)
# sleep(5)
# driver.quit()
本人也是python入门级别,大佬们见笑很多东西都会标注比较详细,有所冗余,见怪不怪 代码部分高亮的看不清,帮你重新录入下
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
#登录网址
login_url = "http://www.test1_url.com" # 这里填目标网址
def get_cookie():
driver = webdriver.Chrome()
driver.get(login_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('cookies.txt','w') as cookief:
# 将cookies保存为json格式
cookief.write(json.dumps(driver.get_cookies()))
print("cookie保存成功")
driver.close()
print("浏览器退出")
if __name__ == "__main__":
get_cookie()
这里是另外一个导入自动登录的py文件(====================================================================================================)
from selenium import webdriver
import json
from time import sleep
# 记得写完整的url 包括http和httpsurl = 'http://www.test2_url.com' # 登录成功后的网址
driver = webdriver.Chrome()
driver.get(url)
#首先清除由于浏览器打开已有的cookies
driver.delete_all_cookies()
'''
说明一下,这里引号前面加一个字母 r 是为了确保在Windows系统中万无一失,故应该以原始字符串的方式指定路径,也就是在开头的引号前面加上r,
后面的r是只读的意思,还有rwa分别是:只能读不能覆盖,只能写会覆盖,只能写但是追加不会覆盖
'''
# with可以上下文管理上文进行设置部署,下文进行处理,然后把处理的结果赋值给变量(cookie)
with open(r'D:\python_file\python自动化用例\cookies.txt','r') as cookief: #使用json读取cookies 注意读取的是文件 所以用load而不是loads
cookieslist = json.load(cookief)
# 方法1删除该字段
for cookie in cookieslist:
#该字段有问题所以删除就可以浏览器打开后记得刷新页面 有的网页注入cookie后仍需要刷新一下
if 'expiry' in cookie:
del cookie['expiry']
driver.add_cookie(cookie)
'''
# 方法2 将expiry类型变为int
for cookie in cookieslist:
# 并不是所有cookie都含有expiry 所以要用dict的get方法来获取
# 字典.get('test1','test2') 若存在字典['test1']则返回字典['test1']的值。若不存在则返回值'test2'
# 字典要是没有该键,不用get就会报错
# 类型转换,type、isinstance(查看是否是某个类型,给出结果 True 或 False)
# type(num) isinstance(int_num,int)
if isinstance(cookie.get('expiry'), float): # 用isinstance判断键值是否为Flost
cookie['expiry'] = int(cookie['expiry'])
driver.add_cookie(cookie)
'''
driver.maximize_window()
# 要重新打开网站才会进入主页
driver.get(url)
# sleep(5)
# driver.quit() 感谢分享。。。。。 感谢分享 yagiza 发表于 2020-3-24 11:44
代码部分高亮的看不清,帮你重新录入下
from selenium import webdriver
:handshake第一次发帖,编辑的时候复制过来背景是正常的,发布后就这样了,想编辑又不太懂,谢谢啦 Test_dada 发表于 2020-3-24 12:48
第一次发帖,编辑的时候复制过来背景是正常的,发布后就这样了,想编辑又不太懂,谢谢啦
不客气啦~~互相学习,互相帮助~~{:1_918:} 这个不错,可以借鉴一下 mark,技术贴! 本帖最后由 kaif546 于 2020-4-21 16:37 编辑
有没有那种能一眼看出有多少个cookie的文本编辑器
notepad++ 和记事本就只有一行 ,谢谢大佬 本帖最后由 Test_dada 于 2020-4-21 17:05 编辑
kaif546 发表于 2020-4-21 15:52
有没有那种能一眼看出有多少个cookie的文本编辑器
notepad++ 和记事本就只有一行 ,谢谢大佬
要是这些cookie都有明显的分割字符的话,可以直接把该字符替换成换行,就可以看出有多少行cookie了,例如notepad++,替换换行符是\n,把目标字符替换成\n就可以了,记得选择正则表达式
页:
[1]
2