zoukankan      html  css  js  c++  java
  • selenium 添加cookie和token

    1、WebDriver相关的Cookies操作

    • get_cookies(): 获取当前会话中当前域名所有cookies
    • get_cookie(name): 获取当前会话中当前域名指定name对应的cookie值
    • delete_cookie(name): 删除指定cookie
    • delete_all_cookies(): 删除所有cookie
    • add_cookie(self, cookie_dict): 添加cookie

      1.1、添加Cookie时需要逐条添加,cookie_dict示例:

    • driver.add_cookie({'name' : 'foo', 'value' : 'bar'})
    • driver.add_cookie({'name' : 'foo', 'value' : 'bar', 'path' : '/'})
    • driver.add_cookie({'name' : 'foo', 'value' : 'bar', 'path' : '/', 'secure':True})"

    2、如何添加cookie实现绕过登录

    以百度为例

    1. 我们先登录百度为例,通过F12查看应用程序(Application),BDUSS就是cookie。
     

    从图中可以找出:name= "BDUSS",value = "3R-T21PamZseEJmLVlmQ1ZNS2ZRQ3VPeUJE"

    构造cookie字典

    cookie = {'name' : 'BDUSS', 'value' : '3R-T21PamZseEJmLVlmQ1ZNS2ZRQ3VPeUJEVUtXUE**'}

    然后调用:driver.add_cookie(cookie_dict=cookie)

    from selenium import webdriver
    import time
    
    driver = webdriver.Chrome()
    driver.maximize_window()
    time.sleep(1)
    cookie = {"name":"BDUSS", "value":"3R-T21PamZseEJmLVlmQ1ZNS2ZRQ3VPeUJEVUtXUEoxUkx2ODVTZ1REZmczOVZmSVFBQUFBJCQAAAAAAAAAAAEAAAA1p7iuyeTI1WluZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOBSrl~gUq5fb"}
    
    
    driver.add_cookie(cookie_dict=cookie)
    driver.get("https://www.baidu.com/")
    
    time.sleep(10)
    driver.quit()
    Traceback (most recent call last):
    
    File "I:/python/softwaredate/py_basics/1****/14 selenium cookie绕过登录.py", line 10, in <module>
    ​ driver.add_cookie(cookie_dict=cookie)
    File "D:\software\python38\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 894, in add_cookie
    ​ self.execute(Command.ADD_COOKIE, {'cookie': cookie_dict})
    File "D:\software\python38\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
    ​ self.error_handler.check_response(response)
    File "D:\software\python38\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    ​ raise exception_class(message, screen, stacktrace)
    selenium.common.exceptions.InvalidCookieDomainException: Message: invalid cookie domain
    (Session info: chrome=85.0.4183.102)**

    如发现如上报错怎么解决呢:
    只需要在添加cookie上方增加一个打开网页的地址即可

    from selenium import webdriver
    import time
    
    driver = webdriver.Chrome()
    driver.maximize_window()
    time.sleep(1)
    cookie = {"name":"BDUSS", "value":"3R-T21PamZseEJmLVlmQ1ZNS2ZRQ3VPeUJEVUtXUEoxUkx2ODVTZ1REZmczOVZmSVFBQUFBJCQAAAAAAAAAAAEAAAA1p7iuyeTI1WluZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOBSrl~gUq5fb"}
    
    driver.get("https://www.baidu.com/")  #添加这一行即可
    driver.add_cookie(cookie_dict=cookie)
    driver.get("https://www.baidu.com/")
    
    time.sleep(10)
    driver.quit()

    上面的方式就可以实现绕过登录,不过这要注意以下两点:

    • 生成 cookie 的账号不能有退出操作,否则 cookie 会失效。
    • 注意 cookie 的有效期(Expires/Max-Age列),可能需要定时更新 cookie

    3、接口登录获取cookie,构造成cookie_dict添加到add_cookie

    import requests
    from selenium import webdriver
    from time import sleep
    
    def get_cookie(username, password):
        login_url = 'http://****/newecshop/admin/privilege.php'
        data = dict(username=username,password=password, act='signin')
        res = requests.post(login_url, data=data, allow_redirects=False)
        esscp_id = res.cookies.get('ECSCP_ID')
        cookie = dict(name='ECSCP_ID',value=esscp_id)
        return cookie
    
    admin_url = 'http://****/newecshop/admin/index.php'
    
    driver = webdriver.Chrome()
    driver.get(admin_url)  
    cookie = get_cookie(****, ****)
    driver.add_cookie(cookie)
    driver.get('http://***/newecshop/admin/order.php?act=list')
    
    sleep(3)
    driver.quit()

    4、 启动 Chrome 浏览器绕过登录

    我们每次打开浏览器做相应操作时,对应的缓存和 cookie 会保存到浏览器默认的路径下,我们先查看个人资料路径,以 chrome 为例,我们在地址栏输入chrome://version/

     

     

    图中的个人资料路径就是我们需要的,我们去掉后面的 \Default,然后在路径前加上「–user-data-dir=」就拼接出我们要的路径了。

    profile_directory = r'--user-data-dir=C:\Users\xxx\AppData\Local\Google\Chrome\User Data'

    接下来,我们启动浏览器的时候采用带选项时的启动,这种方式启动浏览器需要注意,运行代码前需要关闭所有的正在运行 chrome 程序,不然会报错。全部代码如下。

    from selenium import webdriver
    import time
    import os,platform
    if platform.system() =="Windows":
        os.system("taskkill -im chrome* -f")  # 把chrome开头的进程都杀掉
    else:
        os.system("killall -9 chrome*")
    # 获取用户目录
    my_dir = os.path.expanduser("~")
    
    profile_directory = r'--user-data-dir={}\AppData\Local\Google\Chrome\User Data'.format(my_dir)
    print(profile_directory)
    option = webdriver.ChromeOptions()
    option.add_argument(profile_directory)
    
    driver = webdriver.Chrome(chrome_options=option)
    driver.get("https://www.baidu.com/")
    time.sleep(2)

    selenium 自动化启动浏览器后我们会发现我之前保存的书签完整在浏览器上方,baidu 账号也是登录的状态。

     

     

    5、绕过图形验证码的网站

    文中第一个图是简书登录时的图形验证码,我们登录简书后(cookie 有一定的时效,貌似有 10 天半个月左右),把上面代码中的链接换成简书的,再用上面的方法觉可以实现绕过登录页的图形验证码。



    原文链接:
    链接:https://www.jianshu.com/p/d442a3cbef3a

  • 相关阅读:
    IE8发送ajax请求无效
    Qt 桌面服务 QDesktopServices
    Qt 排序 QSort
    使用ehcache缓存可变对象时的注意事项
    Golang微服务入门到精通之路-1-Go之初体验
    机械革命 Code01 笔记本激活 Win10 方法
    IM技术分享:万人群聊消息投递方案的思考和实践
    零基础入门:基于开源WebRTC,从0到1实现实时音视频聊天功能
    剑指 Offer 28. 对称的二叉树
    idea使用
  • 原文地址:https://www.cnblogs.com/superbaby11/p/15737539.html
Copyright © 2011-2022 走看看