# 开发时间 : 2022/6/24 10:23
import requests
import base64
import json#用于图鉴验证码识别
from lxml import etree
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep
from PIL import Image#图像 用于图像验证码抓取
def base64_api(uname, pwd, img, typeid):
with open(img, 'rb') as f:
base64_data = base64.b64encode(f.read())
b64 = base64_data.decode()
data = {"username": uname, "password": pwd, "typeid": typeid, "image": b64}
result = json.loads(requests.post("http://api.ttshitu.com/predict", json=data).text)
if result['success']:
return result["data"]["result"]
else:
return result["message"]
return ""
bro = webdriver.Chrome(r"E:UsersLenovoAppDataLocalGoogleChromeApplicationchromedriver.exe")
bro.get("https://so.gushiwen.cn/user/login.aspx?from=https%3A%2F%2Fwww.gushiwen.cn%2F")
use_name_tag = bro.find_element(By.ID,"email")
pass_word_tag = bro.find_element(By.ID,"pwd")
code_tag = bro.find_element(By.ID,"code")
img_tag =bro.find_element(By.ID,'imgCode')
log_button_tag = bro.find_element(By.ID,"denglu")
bro.save_screenshot("./aaa.png")
location = img_tag.location#储存验证码图片的左上角像素位置
print(location)
size = img_tag.size#验证码标签的长和宽
rangle = (int(location["x"])*1.25,int(location['y'])*1.25,(int(location['x']) +size['width'])*1.25,(int(location['y']) + size['height'])*1.25)
#由于大部分笔记本默认屏幕适配1.25倍,所以像素点统一*1.25
print(rangle)
#验证码位置已确定
i = Image.open("./aaa.png")#整张界面
code_img_name = "./code.png"
frame = i.crop(rangle)
frame.save(code_img_name)#截取界面
result = base64_api(uname='***********', pwd='***********', img=code_img_name, typeid=3)
use_name_tag.send_keys("**********")
sleep(2)
pass_word_tag.send_keys("***********")
sleep(2)
code_tag.send_keys(result)
sleep(2)
log_button_tag.click()
page_text = bro.page_source
print(page_text)
sleep(5)
bro.quit()