2025-06-17 13:40:20 +08:00
|
|
|
|
#coding:utf-8
|
|
|
|
|
|
|
|
|
|
|
|
import requests
|
|
|
|
|
|
import re
|
|
|
|
|
|
import pytesseract
|
|
|
|
|
|
from PIL import Image
|
|
|
|
|
|
from tempfile import NamedTemporaryFile
|
2026-03-16 23:36:00 +08:00
|
|
|
|
|
2025-06-17 13:40:20 +08:00
|
|
|
|
import redis
|
|
|
|
|
|
|
|
|
|
|
|
def vercode(cookie=None):
|
2026-03-16 23:36:00 +08:00
|
|
|
|
urls = 'https://cp.baycheer.com:4433/index.php?main=login&act=vercode'#图片链接(每秒更新,距离当前时间最近的时间戳最近为可使用图片)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-06-17 13:40:20 +08:00
|
|
|
|
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)
|
2026-03-16 23:36:00 +08:00
|
|
|
|
url="https://cp.baycheer.com/index.php?main=panel"#主页
|
2025-06-17 13:40:20 +08:00
|
|
|
|
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:
|
2026-03-16 23:36:00 +08:00
|
|
|
|
urls = 'https://cp.baycheer.com:4433/index.php?main=login&act=vercode'#图片链接(每秒更新,距离当前时间最近的时间戳最近为可使用图片)
|
2025-06-17 13:40:20 +08:00
|
|
|
|
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))#开始识别
|
2026-03-16 23:36:00 +08:00
|
|
|
|
url = 'https://cp.baycheer.com:4433/index.php?main=login&act=check'
|
2025-06-17 13:40:20 +08:00
|
|
|
|
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)
|
2026-03-16 23:36:00 +08:00
|
|
|
|
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'
|
2025-06-17 13:40:20 +08:00
|
|
|
|
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)
|