本次使用BeautifulSoup查找验证码tag信息,redis查找验证码,然后使用selenium登录
使用selenium有时候很讨厌登录逻辑,但是登录逻辑又绕不开,本次只是一个举例,理论上讲模拟登录只要了解登录实现逻辑基本上就解决一大半了。
简单说一下实现逻辑:登录逻辑前后端分离,前端生成随机参数发起请求后端生成验证码存在redis并生成图片让前端下载。那么我们这次只需要找到tag并通过它查询redis即可获取验证码,查找网页tag在图片地址中,这样真是就太简单了。
上代码:
from seleniumimport webdriver
from timeimport sleep
from bs4import BeautifulSoup
from selenium.webdriver.common.action_chainsimport ActionChains
import redis
chromedriver =r"C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe"
driver = webdriver.Chrome (chromedriver)
driver.get("http://192.168.0.86:xxxx")
#定位输入账号密码
driver.find_elements_by_class_name("el-input__inner")[0].send_keys("seeta")
driver.find_elements_by_class_name("el-input__inner")[1].send_keys("seeta110")
sleep(2)固定等待
#点击两次隐藏按钮
driver.find_element_by_xpath('//*[@id="app"]/div/div/div/form/div[2]/div/div[1]/span[2]/span/i').click()
driver.find_element_by_xpath('//*[@id="app"]/div/div/div/form/div[2]/div/div[1]/span[2]/span/i').click()
sleep(3)
#搜索验证码的tag
html = driver.page_source
soup = BeautifulSoup(html,"html.parser")
find_img_1 =str(soup.find_all(class_="el-tooltip"))
#分割到需要的tag
x = find_img_1.split('tag=',1 )[1]
x = x.split('"',1)[0]
#连接redis
conn = redis.Redis(host='192.168.0.148',port=6388,password='makenosense',db=0)#创建连接redis
#查找tag对应的验证码tag
code = conn.get("ai_building:"+x)
code = code.decode()
driver.find_elements_by_class_name("el-input__inner")[2].send_keys(code)
#双击登录按钮
actions=ActionChains(driver)
actions.double_click(driver.find_element_by_id("login-bt"))
#退出
driver.quit()
- 本来我希望通过实现登录逻辑进行登录,登录逻辑涉及 AES +RSA(这部分我后面贴上来),后来在反复确定之后发现有更简便的方法。