#coding:utf-8 import requests import re import pytesseract from PIL import Image from tempfile import NamedTemporaryFile import redis def vercode(cookie=None): urls = 'https://cp.baycheer.com:4433/index.php?main=login&act=vercode'#图片链接(每秒更新,距离当前时间最近的时间戳最近为可使用图片) if cookie is not None: haders = { 'Cookie': cookie #使用之前的图片链接Cooike } res = requests.post(url=urls,headers=haders) ress = re.findall('Cookie (.*?) for',str(res.cookies))#获取图片链接Cooike,图片Cooike必须和登录请求的Cooike保持一致 f1 = NamedTemporaryFile(mode='wb+',suffix='.png') f1.write(res.content)#导入文件路径(待处理图片) f1.seek(0) img = Image.open(f1)#未处理图片 lim = img.convert('L') threshold = 165 # 灰度阈值设为165(可调整),低于这个值的点全部填白色 table = [] for j in range(256): if j < threshold: table.append(1) else: table.append(0) bim = lim.point(table, '1')#连接各个且分片儿 f2 = NamedTemporaryFile(mode='wb+',suffix='.png') bim.save(f2)#处理完成导入 f2.seek(0) text = pytesseract.image_to_string(Image.open(f2))#开始识别 return text.replace('\n',''), def Vc(user='honghuayuan',pswd= 'a12345'): resetcookie = 0 try : r = redis.StrictRedis(host='192.168.100.44', port=7379, db=11,password="123456") viewcookie = r.get('cpmasosessid'+user) url="https://cp.baycheer.com/index.php?main=panel"#主页 header={'Cookie':viewcookie.decode('utf8')} resp = requests.get(url=url,headers=header) exists = re.findall(r'欢迎进入本公司后台管理系统',resp.text) if exists != []: return r.get('cpmasosessid'+user).decode('utf8') else : resetcookie = 1 except: resetcookie = 1 while resetcookie ==1: urls = 'https://cp.baycheer.com:4433/index.php?main=login&act=vercode'#图片链接(每秒更新,距离当前时间最近的时间戳最近为可使用图片) res = requests.post(url=urls) ress = re.findall('Cookie (.*?) for',str(res.cookies))#获取图片链接Cooike,图片Cooike必须和登录请求的Cooike保持一致 f1 = NamedTemporaryFile(mode='wb+',suffix='.png') f1.write(res.content)#导入文件路径(待处理图片) f1.seek(0) img = Image.open(f1)#未处理图片 lim = img.convert('L') threshold = 165 # 灰度阈值设为165(可调整),低于这个值的点全部填白色 table = [] for j in range(256): if j < threshold: table.append(1) else: table.append(0) bim = lim.point(table, '1')#连接各个且分片儿 f2 = NamedTemporaryFile(mode='wb+',suffix='.png') bim.save(f2)#处理完成导入 f2.seek(0) text = pytesseract.image_to_string(Image.open(f2))#开始识别 url = 'https://cp.baycheer.com:4433/index.php?main=login&act=check' haders = { 'Cookie': ress[0] #使用之前的图片链接Cooike } data = { 'user': user, 'pswd': pswd, 'vercode': text.replace('\n',''), #识别后的验证码结果 'issub': '0', 'subuser': '' } trylogin = requests.post(url=url,headers=haders,data=data).text# 尝试使用验证码登录 if trylogin != 'success': print('验证码错误正在尝试重新识别验证码') continue else: try: r.set("cpmasosessid"+user,ress[0]) except: pass resetcookie = 0 return ress[0] break def erp_cookie(type ='erp'): r = redis.StrictRedis(host='192.168.100.44', port=7379, db=11,password="123456") if type == 'erp': cookie=r.get('erpcookie').decode('utf-8') url = "https://erp.baycheer.com/" header = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36' } header['cookie']=cookie f = requests.get(url=url,headers=header) ned = re.findall('企业微信扫码登录',f.text) if ned == ['企业微信扫码登录']: mainUrl = "https://erp.baycheer.com/login/"#地址 service=Service( r'E:\chromedriver.exe')#谷歌驱动路劲 service.command_line_args() service.start() options = webdriver.ChromeOptions() options.add_argument('--headless') options.add_argument('ignore-certificate-errors') options.add_argument('--start-maximized') options.add_argument('--no-sandbox') options.add_argument('--disable-gpu') options.add_argument(' -port=9222') driver=webdriver.Remote(service.service_url,options=options) driver.file_detector = UselessFileDetector()################## driver.get(mainUrl) input_box=driver.find_element(By.ID,'uid') input_pswd=driver.find_element(By.ID,'password') login_box=driver.find_element(By.CLASS_NAME,'btn') input_box.send_keys('10818') input_pswd.send_keys('taaw0NCl') login_box.click() cookie ="sess=" + driver.get_cookie('sess')['value'] r.set('erpcookie',cookie) driver.close() elif type == 'bayshop': cookie=r.get('bayshopcookie').decode('utf-8') url = "https://shop.baycheer.com/" header = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36' } header['cookie']=cookie f = requests.get(url=url,headers=header) ned = re.findall('请通过公司系统漫游登录',f.text) if ned == ['请通过公司系统漫游登录']: mainUrl = "https://erp.baycheer.com/login/"#地址 ssoUrl ='https://erp.baycheer.com/sso' sceUrl = 'https://erp.baycheer.com/sso/remoteLogin?sso_site_id=3642' thrUrl = 'https://shop.baycheer.com/' service=Service('/usr/bin/chromedriver')#谷歌驱动路劲 service.command_line_args() service.start() options = webdriver.ChromeOptions() options.add_argument('--headless') options.add_argument('user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36') options.add_argument('ignore-certificate-errors') options.add_argument('--start-maximized') options.add_argument('--no-sandbox') options.add_argument('--disable-gpu') options.add_argument(' -port=9222') driver=webdriver.Remote(service.service_url,options=options) driver.file_detector = UselessFileDetector()################## driver.get(mainUrl) input_box=driver.find_element(By.ID,'uid') input_pswd=driver.find_element(By.ID,'password') login_box=driver.find_element(By.CLASS_NAME,'btn') input_box.send_keys('10818') input_pswd.send_keys('taaw0NCl') login_box.click() cookie ="sess=" + driver.get_cookie('sess')['value'] r.set('erpcookie',cookie) driver.get(ssoUrl) driver.get(sceUrl) import time time.sleep(5) driver.get(thrUrl) cookie ="sess=" + driver.get_cookie('sess')['value'] r.set('bayshopcookie',cookie) driver.quit() r.close() return cookie def zenid(): r = redis.StrictRedis(host='192.168.100.44', port=7379, db=11,password="123456") zenAdminID=r.get('zenAdminID').decode('utf-8') url = 'https://www.beautifulhalo.com/masodress/index.php' header = {'Cookie': "zenAdminID={};".format(zenAdminID)} res = requests.get(url=url, headers=header).text retry =0 if res == 'please use OA remote login this system. if you have any question, please contact with KING.' : retry =1 if 'Checking if the site connection is secure' in res: retry =1 if retry ==1: t=Vc()[7:] service=Service('/usr/bin/chromedriver') service.command_line_args() service.start() options = webdriver.ChromeOptions() options.add_argument('--headless') options.add_argument('--no-sandbox') options.add_argument('--disable-gpu') options.add_argument(' -port=9222') driver=webdriver.Remote(service.service_url,options=options) mainurl='http://cp.baycheer.com/index.php?main=main' panelUrl = "http://cp.baycheer.com/index.php?main=panel"#地址 remoteurl='http://cp.baycheer.com/index.php?main=sys_remote_login&act=remotelogin&id=303' driver.get(mainurl) driver.delete_all_cookies() driver.add_cookie({'name':'sessid','value':f'{t}'}) driver.get(panelUrl) driver.get(remoteurl) zenAdminID=re.findall(r'zenAdminID=(.*)$',driver.current_url)[0] driver.quit() r.set('zenAdminID',zenAdminID) return zenAdminID def twtoken(): """ 先获取ACCESS token 如果ACCESS TOKEN存在且过期时间没到,则不管他,如果到了则重新获取一次,考虑刷新机制 """ import sys import pendulum sys.path.append('E:/python/workspace/taotian') import iop from urllib.parse import quote import webbrowser appkey = '501176' appSecret = '9evPt00JW5Z63WXUsjOYlKjPqhkGkBjX' def escape_special_characters(url): return quote(url, safe=':/?&=') # 允许保留 :/?&= 这些符号 r = redis.StrictRedis(host='192.168.100.44', port=7379, db=11,password="123456") tokenbody = r.hgetall('twtoken') data = {k.decode('utf-8'): v.decode('utf-8') for k, v in tokenbody.items()} data['expire_date'] = "2024-05-25" if pendulum.parse(data['expire_date']) >= pendulum.now(): return data["access_token"] elif pendulum.parse(data['refresh_expire_date']) >= pendulum.now(): url = 'https://api.taobao.global/rest' client = iop.IopClient(url, appkey ,appSecret) request = iop.IopRequest('/auth/token/refresh') request.add_api_param('refresh_token', data['refresh_token']) response = client.execute(request) for key in response.body: if key in data: data[key] = response.body[key] return data['access_token'] else: """ 重新授权 """ redirect_uri = 'http://region-42.seetacloud.com:40555/post' original_url = f'https://api.taobao.global/oauth/authorize?response_type=code&redirect_uri={redirect_uri}&force_auth=true&client_id={appkey}' formatted_url = escape_special_characters(original_url) webbrowser.open_new(formatted_url) webbrowser.open_new_tab(formatted_url) print("账号: 贝勤国际有限公司:chanpin01\r\n密码: cp123456") code = input("输入获得的code:") request = iop.IopRequest('/auth/token/create') request.add_api_param('refresh_token', code) response = client.execute(request) data = response.body data['expire_date']=pendulum.now().add(seconds=int(data['expires_in'])).strftime("%Y-%m-%d") data['refresh_expire_date']=pendulum.now().add(seconds=int(data['refresh_expires_in'])).strftime("%Y-%m-%d") r.hmset('twtoken',data) return data['access_token'] if __name__=='__main__': s = vercode() print(s)