VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > temp > python入门教程 >
  • 对于Python selenium操作的总结(三)

## 一、思路 自动化登录网站的方式有三种:

与人机识别硬刚,这个比较有挑战性,如果有兴趣的话可以试一下

通过读取有本地记录的浏览器,直接进行cookies登录

通过读取本地存储的cookies,使用任意浏览器进行登录

其中第二项和第三项都差不多,都是由cookies登录,但是第二项是必须启动本地的浏览器才能正常登录,而第三项则通过存储的cookies直接在后续流程中任意启动的浏览器都可以直接登录了。 则我的思路就是:从本地浏览器中读取并存储cookies - - > 形成一个存储cookies的json文件 - - > 通过读取json文件给浏览器添加cookies以实现登录操作。


 

二、代码

理论成立,代码如下:

from selenium import webdriver
import json 
from selenium.webdriver.chrome.options import Options

#用json文件载入cookies值
def get_cookies_local(filename, driver):
    #启动chrome安装位置中的chrome.exe文件,默认的chrome文件的安装位置为:C:\Program Files\Google\Chrome\Application
    #若第一次运行则需要在cmd运行打开chrome的指令:D:\Application\Google\chrome.exe --remote-debugging-port=12306   
    print('\n\n\n\n  PLEASE PUT "D:\Application\Google\chrome.exe --remote-debugging-port=12306"\
    IN YOUR CMD \n\n\n')
    print("WAITTING FOR YOUR OPERATOR_____") 
    options = Options()
    options.add_experimental_option("debuggerAddress", "localhost:12306")
    setter = webdriver.Chrome(options=options)
    #读取本地浏览器上网址的cookies
    setter.get("https://www.bilibili.com/")
    cookies= setter.get_cookies()
    with open(filename, 'w') as f:
        json.dump(cookies, f)
    setter.close()
    #获取后直接导入cookies值
    use_option(filename, driver)


使用json文本的值
def use_option(filename, driver):
    #通过判断是否有对应的cookies文件来或cookies文件是否有值决定返回值
    try:
        with open(filename, 'r') as f:
            arr = json.load(f)
            #如果cookies文件不为空则读取并向浏览器添加cookies
            if arr != None:
                for i in range(len(arr)):
                    driver.add_cookie(arr[i])
                return True
            else:
                return False
    except Exception as e:
        return Falseif __name__ == '__main__':
    driver = webdriver.Chrome()
    driver.get("https://www.bilibili.com/")
    #通过判断use_option函数的返回值来决定是否重新写入json文件
    if not use_option('cookies.json', driver):
        get_cookies_local('cookies.json', driver)
    #登录
    driver.get("https://www.bilibili.com/")


 

三、运行

可以看到没有对应的存储cookies.json文件的,然后直接运行代码:
image

运行操作:点击运行后会直接弹出未记录本地的浏览器打开b站,然后通过运行提示,手动打开记录本地的浏览器(用于对cookies的提取与记录),程序关闭本地浏览器后,会发现多出一个cookies.json文件,自动将未记录本地的浏览器登录到相应的账号。第二次运行,由于已经存在cookies.json文件,通过这个文件可直接登录,不必再次打开本地浏览器。
image


 

四、总结

通过cookies自动化登录浏览器多少有点投机取巧,但是也是新手接触浏览器自动化的一种解决办法,希望可以在日后通过各种库的学习以及对opencv、机器学习的掌握,来解决人机识别难题,真正做到用户的操作简洁化。

出处:

https://www.cnblogs.com/lemon-cool/p/15857454.html


相关教程