selenium操作cookies实现免密登录

一直想用selenium实现个小功能,比如发微博之类的,但是有的网站在登录会有验证码,没想到太好的方法解决,于是想到利用cookies来登录网站。

获取一个可用的cookies

获取的cookies会保存为一个json格式的文件。不过在打开网站后,登录操作需要自己手动进行一下,代码中有注释,大家可以注意一下,

代码如下:

#!/usr/bin/python
#coding=utf-8
     
 from selenium import webdriver
 import time
 import json
     
 def get_cookies(test_url):
     #保存cookies的文件
     file = 'cookies.json'
     #打开需要获取cookies的网站
     driver = webdriver.Firefox()
     driver.implicitly_wait(5)
     driver.get(test_url)
     driver.maximize_window()
     #网站打开后,在时间内手动执行登录操作
     time.sleep(60)
     #登录成功后,获取cookies并保存为json格式
     cookies = driver.get_cookies()
     fp = open(file,'w')
     json.dump(cookies,fp)
     fp.close()
     #关闭浏览器
     driver.close()
     
 if __name__ == "__main__":
     url = raw_input('please input url:')
     get_cookies(url)

利用cookies登录网站

先打开要登录的网站,然后将cookies从之前保存的json文件读取出来,然后添加到浏览器,刷新界面,即可实现登录,然后便可以进行发微博的操作,具体元素定位,请大家百度selenium的一些基本用法,此处不再赘述。代码中也给出了不打开浏览器的方式来实现功能。

代码如下:

    #!/usr/bin/python
    #coding=utf-8
     
    from selenium import webdriver
    import json
    import time
     
    file = 'cookies.json'
    #打开浏览器,若不想打开浏览器运行脚本,可以使用下面注释掉的方法
    driver = webdriver.Firefox()
     
    #以headless模式运行脚本,可以实现不打开浏览器对网站进行操作
    #option = webdriver.FirefoxOptions()
    #option.add_argument(argument='-headless')
    #driver = webdriver.Firefox(firefox_options=option)
     
    #打开网址
    def open_url(url):
        driver.get(url)
        driver.implicitly_wait(5)
        driver.maximize_window()
     
    #向浏览器添加保存的cookies
    def add_cookies():
        fp = open(file,'r')
        cookies = json.load(fp)
        fp.close()
        for cookie in cookies:
            driver.add_cookie(cookie)  
     
    if __name__ == "__main__":
        #输入要打开的网站并打开
        test_url = raw_input('please input url:')
        open_url(test_url)
        time.sleep(5)
        #添加cookies后刷新界面,实现免密登录
        add_cookies()
        driver.refresh()
        # 发送微博
        #定位到微博输入框,点击输入框
        driver.find_element_by_xpath("//textarea[@class='W_input']").click()
        time.sleep(2)
        #输入需要发送的内容
        driver.find_element_by_xpath("//textarea[@class='W_input']").send_keys('Test message')
        time.sleep(3)
        #点击发送按钮
        driver.find_element

你可能感兴趣的:(selenium操作cookies实现免密登录)