262 lines
8.6 KiB
Python
262 lines
8.6 KiB
Python
from tkinter import N
|
|
from DrissionPage._base.chromium import Chromium
|
|
from DrissionPage._configs.chromium_options import ChromiumOptions
|
|
from DrissionPage._pages.mix_tab import MixTab
|
|
import time
|
|
|
|
class Sinopec_ewcc(object):
|
|
tab:MixTab
|
|
# browser:Chromium
|
|
|
|
def __init__(self):
|
|
self.url = 'https://ewcc.sinopec.com'
|
|
self.url_info= 'ewcc.sinopec'
|
|
self.browser_path= r'C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe'
|
|
self.co = ChromiumOptions().set_browser_path(self.browser_path)
|
|
#self.co.headless(True)
|
|
self.co.ignore_certificate_errors(True)
|
|
self.browser=Chromium(self.co)
|
|
self.tab=self.browser.latest_tab
|
|
|
|
def quit(self ):
|
|
self.browser.quit()
|
|
|
|
def init_cookies(self, cookies):
|
|
"""设置传入的cookies到浏览器
|
|
Args:
|
|
cookies: 要设置的cookies(可以是列表、字典或JSON字符串)
|
|
Returns:
|
|
bool: 设置成功返回True,失败返回False
|
|
"""
|
|
print('使用传入的cookies登录')
|
|
|
|
# 处理字符串类型的cookies
|
|
if isinstance(cookies, str):
|
|
try:
|
|
import json
|
|
# 尝试将字符串解析为JSON对象
|
|
parsed_cookies = json.loads(cookies)
|
|
print('成功将字符串cookies解析为JSON对象')
|
|
# 递归调用,使用解析后的数据
|
|
return self.init_cookies(parsed_cookies)
|
|
except json.JSONDecodeError as e:
|
|
print(f'字符串cookies解析失败: {str(e)}')
|
|
return False
|
|
|
|
# 处理字典类型的cookies
|
|
elif isinstance(cookies, dict):
|
|
try:
|
|
self.browser.set.cookies(cookies)
|
|
print('成功设置字典类型的cookies')
|
|
return True
|
|
except Exception as e:
|
|
print(f'设置字典类型的cookies失败: {str(e)}')
|
|
return False
|
|
|
|
# 处理列表类型的cookies
|
|
elif isinstance(cookies, list):
|
|
try:
|
|
for cookie in cookies:
|
|
self.browser.set.cookies(cookie)
|
|
print('成功设置列表类型的cookies')
|
|
return True
|
|
except Exception as e:
|
|
print(f'设置列表类型的cookies失败: {str(e)}')
|
|
return False
|
|
|
|
# 处理未知类型
|
|
else:
|
|
print(f'传入的cookies格式不正确,类型为: {type(cookies)},应为列表、字典或JSON字符串')
|
|
return False
|
|
|
|
def save_cookies(self):
|
|
"""获取并返回当前浏览器tab的cookies
|
|
Returns:
|
|
list: 当前浏览器tab的cookies列表
|
|
"""
|
|
# 保存当前 cookie
|
|
self.tab.refresh()
|
|
cookies = self.tab.cookies()
|
|
return cookies
|
|
|
|
def open_web(self,url=None):
|
|
if url is None:
|
|
url=self.url
|
|
self.browser.get_tab(url)
|
|
|
|
def new_tab(self,url=None):
|
|
if url is None:
|
|
url=self.url
|
|
self.tab=self.browser.new_tab(url)
|
|
|
|
|
|
def find_tab(self,url=None,title=None):
|
|
find_tab=None
|
|
if url is None:
|
|
url=self.url
|
|
if title is None:
|
|
title=self.url_info
|
|
|
|
try:
|
|
find_tab = self.browser.get_tab(url=url)
|
|
print("根据 url 找到标签")
|
|
except:
|
|
print("根据 url 没有找到标签")
|
|
|
|
if not find_tab:
|
|
try:
|
|
find_tab=self.browser.get_tab(title=title)
|
|
print("根据 标题名 找到 标签")
|
|
except :
|
|
print("根据 标题名 没有找到标签")
|
|
find_tab=None
|
|
|
|
return find_tab
|
|
|
|
def is_login(self):
|
|
if self.tab is None:
|
|
return False
|
|
time.sleep(2)
|
|
cur_login=False
|
|
### 判断是否有仍然发生的界面
|
|
try:
|
|
ele_process = self.tab.ele('#proceed-button')
|
|
ele_process.click()
|
|
time.sleep(3)
|
|
except Exception as e:
|
|
print(e)
|
|
|
|
try:
|
|
e=None
|
|
e=self.tab.ele("#userName")
|
|
print("找到登录成功的标志"+e.text)
|
|
cur_login=True
|
|
except Exception as e:
|
|
print('没有找到登录成功的标志')
|
|
print(f'{e}')
|
|
cur_login = False
|
|
return cur_login
|
|
|
|
|
|
def login(self,username=None,userpass=None,otp=None):
|
|
self.tab.get(self.url)
|
|
self.tab.wait.eles_loaded('xpath://*[@id="authen1Form"]/button')
|
|
time.sleep(5)
|
|
|
|
try:
|
|
ele_div=self.tab.ele('#tab3Con')
|
|
ele_div.ele('#fs3_username').set.value(username)
|
|
time.sleep(1)
|
|
ele_div.ele('#fs3_password').set.value(userpass)
|
|
time.sleep(1)
|
|
ele_div.ele('#fs3_otpOrSms').set.value(otp)
|
|
time.sleep(1)
|
|
ele_div.ele('@type=submit').click()
|
|
except Exception as e:
|
|
print(e)
|
|
time.sleep(3)
|
|
|
|
### 判断是否有仍然发生的界面
|
|
try:
|
|
ele_process = self.tab.ele('#proceed-button')
|
|
ele_process.click()
|
|
|
|
except Exception as e:
|
|
print(e)
|
|
|
|
time.sleep(3)
|
|
return True
|
|
|
|
def Autologin(self,username=None,userpass=None,otp=None,cookies=None):
|
|
# 1 查找现有的标签
|
|
print('<1> 查找 现有的标签')
|
|
if self.find_tab(): # 新增:查找标签页
|
|
print("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")
|
|
|
|
# 2 如果没有登录 ,则使用cookie登录
|
|
if not self.is_login():
|
|
print('<2> 找不到对应的网站,使用cookies尝试登录')
|
|
self.init_cookies(cookies)
|
|
self.tab.get(self.url)
|
|
self.tab.refresh()
|
|
time.sleep(3)
|
|
### 判断是否有仍然发生的界面
|
|
try:
|
|
ele_process = self.tab.ele('#proceed-button')
|
|
print("**********************************")
|
|
ele_process.click()
|
|
except Exception as e:
|
|
print(e)
|
|
|
|
# 3 判断是否登录,如果登录不成功,则使用帐号和密码登录
|
|
if not self.is_login():
|
|
print('<3> 找不对应的网站,使用帐号密码登录')
|
|
# 这里要注意12小时才可以登录一次。
|
|
# 这里显示登录界面,并等待输入一分钟
|
|
self.login(username=username,userpass=userpass,otp=otp)
|
|
|
|
# 4 判断是否登录 ,如果失败,则发送信息到微信上
|
|
if self.is_login():
|
|
self.tab.refresh()
|
|
self.save_cookies()
|
|
print(" 保存cookies")
|
|
return True
|
|
else:
|
|
self.send_message()
|
|
return False
|
|
|
|
def send_message(self):
|
|
pass
|
|
|
|
def query_car_info(self,plate_number=None,phone_number=None,additional_info=None):
|
|
print(plate_number)
|
|
print("ssssssssssssssssssssssssss")
|
|
self.tab.ele("@@tag()=li@@title=订单中心").click()
|
|
time.sleep(2)
|
|
self.tab.ele("@@tag()=a@@name=客户信息查询").click()
|
|
time.sleep(2)
|
|
myframe = self.tab.get_frame("iframeSOC_CSR_DETAIL")
|
|
### print(myframe.inner_html)
|
|
time.sleep(2)
|
|
|
|
### print("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")
|
|
ele = myframe.ele("#searchType")
|
|
### print(ele.inner_html)
|
|
|
|
myframe.ele("@@tag()=select@@id=searchType").select.by_text("车牌号")
|
|
myframe.ele('#searchValue').input(plate_number, clear=True)
|
|
|
|
myframe.listen.start('acc/getAccCsrInfo')
|
|
myframe.ele("@text()=查询").click()
|
|
DataPacket = myframe.listen.wait()
|
|
### print(DataPacket.response.body)
|
|
|
|
###print("ccccccccccccccccccccccccccccccccccccccc")
|
|
rtn={}
|
|
if DataPacket.response.body['success']:
|
|
total_num = DataPacket.response.body['data']['total']
|
|
# rtn['length']=total_num
|
|
# rtn['test']='aaa'
|
|
rtn=[]
|
|
eles = myframe.eles("@@name=客户信息详情界面@@text()=详情")
|
|
for ele in eles:
|
|
sele = self.tab.ele("@@text()^客户信息查询@@class:J_menuTab")
|
|
if sele:
|
|
sele.click()
|
|
self.tab.listen.start('getAccCsrInfoByCsrid')
|
|
ele.click()
|
|
DataPacket = self.tab.listen.wait()
|
|
### print(DataPacket.response.body)
|
|
rtn.append(DataPacket.response.body['data'])
|
|
self.tab.listen.stop()
|
|
### print(ele.inner_html)
|
|
|
|
return rtn
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|