# 开发时间 : 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:\Users\Lenovo\AppData\Local\Google\Chrome\Application\chromedriver.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()
古诗文网selenium模拟登陆
于 2022-06-26 17:37:15 首次发布