一直想用selenium實現個小功能,好比發微博之類的,可是有的網站在登陸會有驗證碼,沒想到太好的方法解決,因而想到利用cookies來登陸網站html
第一步:獲取一個可用的cookies,獲取的cookies會保存爲一個json格式的文件。不過在打開網站後,登陸操做須要本身手動進行一下,代碼中有註釋,你們能夠注意一下,代碼以下:python
#!/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的一些基本用法,此處再也不贅述。代碼中也給出了不打開瀏覽器的方式來實現功能。web
代碼以下:json
#!/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.close()
原文出處:https://www.cnblogs.com/zhazi/p/11315818.html瀏覽器