logistics/login_for_cookie.py

285 lines
12 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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)