第一次使用selenium,对于很多方法理解也不是很完善,如有建议,咱评论区指正。
一、编程环境
编写语言:python
浏览器:chrome(这边Firefox也可以)
二、微博自动登录
因为我是用微博绑定了手机,因此每次登陆都需要发送手机验证码,然后验证。
这就让自动登录这一块显得十分困难。
因此,借鉴网上其他人的方法,发现可以通过保存cookies的方式,形成自动登录,不过经过测试,cookies的有效期限最长只有1天的时间,一天之后,就要重新刷新cookies了。
这也是我这个方法的一个缺点。
下面讲一下思路
首先,经过人工的操作,保存登陆微博后的cookies,这边如果想要自己输入账号密码,直接把中间几行注释掉就醒了,我自己是直接定义了user和password。
然后中间sleep了60秒,用于输入验证码。
# 保存cookies的文件
def get_cookies(self,test_url):
try:
file = 'cookies.json'
# 打开需要获取cookies的网站
driver.implicitly_wait(5)
driver.get(test_url)
driver.maximize_window()
# 网站打开后,在时间内手动执行登录操作
time.sleep(random.randint(1, 3))
# 自动输入账号密码
driver.find_element_by_xpath("//input[@id='loginname']").send_keys(self.user)
time.sleep(random.randint(1, 3))
driver.find_element_by_xpath("//input[@name='password']").send_keys(self.password)
time.sleep(random.randint(1, 3))
driver.find_element_by_xpath("//*[@node-type='submitBtn']").click()
time.sleep(60)
# 登录成功后,获取cookies并保存为json格式
cookies = driver.get_cookies()
fp = open(file,'w')
json.dump(cookies,fp)
fp.close()
# 关闭浏览器
driver.close()
这里就是在拥有cookies之后,直接向driver传入cookies就能实现自动登录
# 向浏览器添加保存的cookies
def add_cookies(self):
fp = open(file, 'r')
cookies = json.load(fp)
fp.close()
for cookie in cookies:
driver.add_cookie(cookie)
完整过程:
from selenium import webdriver
import json
import time
import random
class AutoLogin():
def __init__(self):
#自行填写自己的微博账号等
self.user = '******'
self.password = '********'
# 保存cookies的文件
def get_cookies(self,test_url):
try:
file = 'cookies.json'
# 打开需要获取cookies的网站
driver.implicitly_wait(5)
driver.get(test_url)
driver.maximize_window()
# 网站打开后,在时间内手动执行登录操作
time.sleep(random.randint(1, 3))
# 自动输入账号密码
driver.find_element_by_xpath("//input[@id='loginname']").send_keys(self.user)
time.sleep(random.randint(1, 3))
driver.find_element_by_xpath("//input[@name='password']").send_keys(self.password)
time.sleep(random.randint(1, 3))
driver.find_element_by_xpath("//*[@node-type='submitBtn']").click()
time.sleep(60)
# 登录成功后,获取cookies并保存为json格式
cookies = driver.get_cookies()
fp = open(file,'w')
json.dump(cookies,fp)
fp.close()
# 关闭浏览器
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))
# 向浏览器添加保存的cookies
def add_cookies(self):
fp = open(file, 'r')
cookies = json.load(fp)
fp.close()
for cookie in cookies:
driver.add_cookie(cookie)
# 打开网址
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后刷新界面,实现免密登录
# obj.add_cookies()
# driver.refresh()
time.sleep(3)
网友评论