第一次使用selenium,對(duì)于很多方法理解也不是很完善,如有建議,咱評(píng)論區(qū)指正。
一、編程環(huán)境
編寫語(yǔ)言:python
瀏覽器:chrome(這邊Firefox也可以)
二、微博自動(dòng)登錄
因?yàn)槲沂怯梦⒉┙壎耸謾C(jī),因此每次登陸都需要發(fā)送手機(jī)驗(yàn)證碼,然后驗(yàn)證。
這就讓自動(dòng)登錄這一塊顯得十分困難。
因此,借鑒網(wǎng)上其他人的方法,發(fā)現(xiàn)可以通過(guò)保存cookies的方式,形成自動(dòng)登錄,不過(guò)經(jīng)過(guò)測(cè)試,cookies的有效期限最長(zhǎng)只有1天的時(shí)間,一天之后,就要重新刷新cookies了。
這也是我這個(gè)方法的一個(gè)缺點(diǎn)。
下面講一下思路
首先,經(jīng)過(guò)人工的操作,保存登陸微博后的cookies,這邊如果想要自己輸入賬號(hào)密碼,直接把中間幾行注釋掉就醒了,我自己是直接定義了user和password。
然后中間sleep了60秒,用于輸入驗(yàn)證碼。
# 保存cookies的文件
def get_cookies(self,test_url):
try:
file = 'cookies.json'
# 打開(kāi)需要獲取cookies的網(wǎng)站
driver.implicitly_wait(5)
driver.get(test_url)
driver.maximize_window()
# 網(wǎng)站打開(kāi)后,在時(shí)間內(nèi)手動(dòng)執(zhí)行登錄操作
time.sleep(random.randint(1, 3))
# 自動(dòng)輸入賬號(hào)密碼
driver.find_element_by_xpath("http://input[@id='loginname']").send_keys(self.user)
time.sleep(random.randint(1, 3))
driver.find_element_by_xpath("http://input[@name='password']").send_keys(self.password)
time.sleep(random.randint(1, 3))
driver.find_element_by_xpath("http://*[@node-type='submitBtn']").click()
time.sleep(60)
# 登錄成功后,獲取cookies并保存為json格式
cookies = driver.get_cookies()
fp = open(file,'w')
json.dump(cookies,fp)
fp.close()
# 關(guān)閉瀏覽器
driver.close()
這里就是在擁有cookies之后,直接向driver傳入cookies就能實(shí)現(xiàn)自動(dòng)登錄
# 向?yàn)g覽器添加保存的cookies
def add_cookies(self):
fp = open(file, 'r')
cookies = json.load(fp)
fp.close()
for cookie in cookies:
driver.add_cookie(cookie)
完整過(guò)程:
from selenium import webdriver
import json
import time
import random
class AutoLogin():
def __init__(self):
#自行填寫自己的微博賬號(hào)等
self.user = '******'
self.password = '********'
# 保存cookies的文件
def get_cookies(self,test_url):
try:
file = 'cookies.json'
# 打開(kāi)需要獲取cookies的網(wǎng)站
driver.implicitly_wait(5)
driver.get(test_url)
driver.maximize_window()
# 網(wǎng)站打開(kāi)后,在時(shí)間內(nèi)手動(dòng)執(zhí)行登錄操作
time.sleep(random.randint(1, 3))
# 自動(dòng)輸入賬號(hào)密碼
driver.find_element_by_xpath("http://input[@id='loginname']").send_keys(self.user)
time.sleep(random.randint(1, 3))
driver.find_element_by_xpath("http://input[@name='password']").send_keys(self.password)
time.sleep(random.randint(1, 3))
driver.find_element_by_xpath("http://*[@node-type='submitBtn']").click()
time.sleep(60)
# 登錄成功后,獲取cookies并保存為json格式
cookies = driver.get_cookies()
fp = open(file,'w')
json.dump(cookies,fp)
fp.close()
# 關(guān)閉瀏覽器
driver.close()
except Exception as e:
utils.logger2.debug('get cookies error[%s]: %s', e.__traceback__.tb_lineno, e)
driver.close()
time.sleep(random.randint(1, 3))
# 向?yàn)g覽器添加保存的cookies
def add_cookies(self):
fp = open(file, 'r')
cookies = json.load(fp)
fp.close()
for cookie in cookies:
driver.add_cookie(cookie)
# 打開(kāi)網(wǎng)址
def open_url(self,url):
driver.get(url)
driver.implicitly_wait(5)
driver.maximize_window()
time.sleep(5)
if __name__ == "__main__":
driver = webdriver.Chrome()
test_url = 'https://weibo.com/'
obj = AutoComment()
# 獲取登陸cookies
obj.get_cookies(test_url)
# obj.open_url(test_url)
# 添加cookies后刷新界面,實(shí)現(xiàn)免密登錄
# obj.add_cookies()
# driver.refresh()
time.sleep(3)