該模擬登錄的具體思路是通過輸入用戶名、密碼以及驗證碼的方式登錄到頁面。打印出登錄到的html頁面查看頁面是否是登錄成功的頁面。
當利用selenium進行模擬登錄時方法如下:
from selenium import webdriver
import time
import sys
import pickle
import requests
chrome_driver = 'C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe'
sel = webdriver.Chrome(executable_path=chrome_driver)
#登錄界面的url
loginurl = '登錄界面的url'
sel.get(loginurl)
time.sleep(10)
session = requests.session()
agent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36"
#header的內容在登錄界面按f12,network下即可找到其對應的host、Referer。
header = {
"HOST":"",
"Referer":"",
"User-Agent":agent
}
#獲取驗證碼圖片,並手動將其輸入
def get_captcha():
import time
t = str(int(time.time()*1000))
captcha_url = "xxxxxx"
t = session.get(captcha_url, headers=header)
with open("captcha.jpg","wb") as f:
f.write(t.content)
f.close()
from PIL import Image
try:
im = Image.open('captcha.jpg')
im.show()
im.close()
except:
pass
captcha = input("輸入驗證碼\n>")
return captcha
try:
sel.find_element_by_xpath("//*[@id='swy']").send_keys('用戶名')
print('user success!')
except:
print('user error')
time.sleep(1)
try:
sel.find_element_by_xpath("//*[@id='swm2']").send_keys('密碼')
print('pw success')
except:
print('pw error!')
time.sleep(1)
#驗證碼登錄
try:
sel.find_element_by_xpath("//*[@id='verifyCode']").send_keys(get_captcha())
print('verifyCode success')
except:
print('verifyCode error!')
time.sleep(1)
#點擊登錄頁面
try:
sel.find_element_by_xpath("//*[@id='submit']").click() # 用click模擬瀏覽器點擊
print('click success!')
except:
print('click error!')
time.sleep(3)
print(sel.page_source)
with open('index.html','wb')as f:
# 存入需要bytes格式 使用.endcode('utf-8)
f.write(sel.page_source.encode('utf-8'))
sel.close()
用這樣方式去登錄的時候發現我模擬登錄的登錄頁面驗證碼所在的url頁面的圖片是不斷變化的,它跟登錄頁面所出現的驗證碼圖片顯示的內容是不一樣的因此無法登錄到所在的頁面。可以通過將get_captcha()函數進行了修改,將登錄頁面截圖成一個圖片查看圖片內容將驗證碼輸入即可登錄到你想登錄的頁面。