285 lines
12 KiB
Python
285 lines
12 KiB
Python
#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) |