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 @   一个小笨蛋  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示