Python 自动登录签-《后厂造》
基础环境
python 3.10
selenium
ddddocr
直接上代码
- pom.py
import time from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.remote.webelement import WebElement from selenium.webdriver.support.wait import WebDriverWait """ step 1:https://www.selenium.dev/ 下载对应浏览器驱动,放在浏览器根目录 例如:C:\Program Files (x86)\Microsoft\Edge\Application\msedgedriver.exe step 2: 下载包 pip install selenium step 3: 引入pom.py """ # 技类 class BasePage: def __init__(self,driver:webdriver,url:str,fullMax:bool=False): self.driver = driver self.url = url # print(driver) if not driver: self.driver = webdriver.Edge() if fullMax: self.driver.maximize_window() driver.get(url) def lazyload(self, by:By, value)->WebElement: """ 显性加载 :param by: 定位元素的方式 :param value: 表达式 :return: -> WebElement """ return WebDriverWait(self.driver, 10).until(lambda x:x.find_element(by, value)) def down_base64_png(self,srcStr:str, file_name:str='code.png')->None: """ 下载验证码 :return: """ import base64 img_data = srcStr.split(',')[1] img_data = base64.b64decode(img_data) with open(file_name, 'wb') as f: f.write(img_data) def quit(self): self.driver.quit()
- HCZPage
import time from selenium import webdriver from selenium.webdriver import ActionChains from selenium.webdriver.common.by import By from pom import BasePage URL ='https://passport.houchangzao.com/' class HCZPage(BasePage): def __init__(self,driver:webdriver.Edge,url): super().__init__(driver,url,True) self.driver = driver self.driver.get(url) def login(self,u_name,u_pwd): self.lazyload(By.CSS_SELECTOR,'.login-way-name').click() self.lazyload(By.XPATH,'//*[@id="app"]/div/div[2]/div/div[2]/form/div[1]/div/div/input').send_keys(u_name) self.lazyload(By.XPATH,'//*[@id="app"]/div/div[2]/div/div[2]/form/div[2]/div/div/input').send_keys(u_pwd) # pngData = self.lazyload(By.XPATH, '//*[@id="app"]/div/div[2]/div/div[2]/form/div[3]/div/div/span/span/div/img').screenshot_as_png() src = self.lazyload(By.XPATH,'//*[@id="app"]/div/div[2]/div/div[2]/form/div[3]/div/div/span/span/div/img').get_attribute("src") self.down_base64_png(src,'code.png') result =prase_img('code.png') self.lazyload(By.XPATH,'//*[@id="app"]/div/div[2]/div/div[2]/form/div[3]/div/div/input').send_keys(result) self.lazyload(By.XPATH,'//*[@id="app"]/div/div[2]/div/div[2]/form/div[5]/button').click() # 点击登录 # input('请输入验证码') el_x = self.lazyload(By.XPATH,'//*[@id="__layout"]/div/div[1]/div/div[3]/div[4]/div/div') action =ActionChains(self.driver) # 解决下拉用户选项 action.move_to_element(el_x).perform() # input('请输入验证码') time.sleep(1) self.lazyload(By.XPATH,'//*[@id="__layout"]/div/div[1]/div/div[3]/div[4]/ul/li[4]').click() self.lazyload(By.XPATH,'//*[@id="__layout"]/div/div[2]/div[1]/div[2]/div[2]/div/div[6]/div[3]/div').click() time.sleep(5) self.quit() # 根据传入的数学符号计算对应的值 def calc(symbol,num1,num2): print(symbol,num1,num2) if symbol == '+': return num1 + num2 elif symbol == '-': return num1 - num2 elif symbol == '*': return num1 * num2 elif symbol == '/' or symbol == '1' or symbol == '7': return num1 / num2 else: # raise ValueError('Invalid symbol') return num1+num2 def prase_img2(imgData): #ocr识别图中的文本 import ddddocr ocr = ddddocr.DdddOcr() res = ocr.classification(imgData) return calc(res[1],int(res[0]),int(res[2])) def prase_img(file_path): import ddddocr ocr = ddddocr.DdddOcr() with open(file_path,'rb') as f: res = ocr.classification(f.read()) print(res) return calc(res[1],int(res[0]),int(res[2])) if __name__ == '__main__': hcPage = HCZPage(webdriver.Edge(),URL) hcPage.login('158xxxxxxxx','xaijsxjisji')
本文来自博客园,作者:一个小笨蛋,转载请注明原文链接:https://www.cnblogs.com/paylove/p/18690720
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】