吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4360|回复: 12
上一主题 下一主题
收起左侧

[Python 转载] 用Python简单实现cookie登录网址

  [复制链接]
跳转到指定楼层
楼主
Test_dada 发表于 2020-3-24 10:33 回帖奖励
本帖最后由 Test_dada 于 2020-6-1 13:45 编辑

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

https://www.52pojie.cn/thread-1184495-1-1.html(出处: 吾爱破解论坛)

在我平时的工作中,总会频繁地登录网站去进行一些操作

然后最让人头疼的就是,输入验证码
所以今天给大家分享。如何绕过验证码
我们要做的就是拿到网站存储登录时的cookie,之后重新打开网页只要导入这个cookie就可以实现登录了

这里我用的是:python3.5+selenium+Chrome 版本 78.0.3904.108+对应Chrome驱动
需要分两个py文件,一个是存储cookie的,一个是导入自动登录的
话不多说,代码献上


[Python] 纯文本查看 复制代码
# 第一个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文件(====================================================================================================)
[Python] 纯文本查看 复制代码
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入门级别,大佬们见笑很多东西都会标注比较详细,有所冗余,见怪不怪

免费评分

参与人数 3吾爱币 +3 热心值 +2 收起 理由
kaif546 + 1 + 1 谢谢@Thanks!
ARondMan + 1 谢谢@Thanks!
众生平等 + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
yagiza 发表于 2020-3-24 11:44
代码部分高亮的看不清,帮你重新录入下

[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()
沙发
raykeyor 发表于 2020-3-24 10:52
4#
ienzoo 发表于 2020-3-24 12:47
5#
 楼主| Test_dada 发表于 2020-3-24 12:48 |楼主
yagiza 发表于 2020-3-24 11:44
代码部分高亮的看不清,帮你重新录入下

[mw_shl_code=python,true]from selenium import webdriver

第一次发帖,编辑的时候复制过来背景是正常的,发布后就这样了,想编辑又不太懂,谢谢啦
6#
yagiza 发表于 2020-3-24 13:11
Test_dada 发表于 2020-3-24 12:48
第一次发帖,编辑的时候复制过来背景是正常的,发布后就这样了,想编辑又不太懂,谢谢啦

不客气啦~~互相学习,互相帮助~~
7#
tydzjing 发表于 2020-3-24 14:53
这个不错,可以借鉴一下
8#
众生平等 发表于 2020-4-18 12:32
mark,技术贴!
9#
kaif546 发表于 2020-4-21 15:52
本帖最后由 kaif546 于 2020-4-21 16:37 编辑

有没有那种能一眼看出有多少个cookie的文本编辑器
notepad++ 和记事本就只有一行 ,谢谢大佬
10#
 楼主| Test_dada 发表于 2020-4-21 16:56 |楼主
本帖最后由 Test_dada 于 2020-4-21 17:05 编辑
kaif546 发表于 2020-4-21 15:52
有没有那种能一眼看出有多少个cookie的文本编辑器
notepad++ 和记事本就只有一行 ,谢谢大佬

要是这些cookie都有明显的分割字符的话,可以直接把该字符替换成换行,就可以看出有多少行cookie了,例如notepad++,替换换行符是\n,把目标字符替换成\n就可以了,记得选择正则表达式




您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 11:00

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表