本次使用BeautifulSoup查找驗證碼tag信息,redis查找驗證碼,然后使用selenium登錄
使用selenium有時候很討厭登錄邏輯,但是登錄邏輯又繞不開,本次只是一個舉例,理論上講模擬登錄只要了解登錄實現邏輯基本上就解決一大半了。
簡單說一下實現邏輯:登錄邏輯前后端分離,前端生成隨機參數發(fā)起請求后端生成驗證碼存在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)#創(chuàng)建連接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(這部分我后面貼上來),后來在反復確定之后發(fā)現有更簡便的方法。