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')
posted @ 2025-01-25 09:52  一个小笨蛋  阅读(33)  评论(0)    收藏  举报