Files
QueryCarInfo2/ewcc2.py
T
2025-09-23 08:17:10 +08:00

253 lines
7.9 KiB
Python

from DrissionPage._base.chromium import Chromium
from DrissionPage._configs.chromium_options import ChromiumOptions
from DrissionPage._pages.mix_tab import MixTab
from cssselect.parser import parse_simple_selector
from config import ConfigManager # 新增导入
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.ignore_certificate_errors(True)
self.browser=Chromium(self.co)
self.config_manager = ConfigManager() # 新增配置管理器实例
self.ewcc_config = self.config_manager.app_config.get('ewcc', {}) # 修改为通过类访问
def quit(self ):
self.browser.quit()
def load_cookies(self):
cookies = self.ewcc_config.get('cookies', {})
print('使用保存的cookies登录')
for cookie in cookies:
self.browser.set.cookies(cookie)
### print(cookie)
def save_cookies(self):
# 保存当前 cookie
self.tab.refresh()
cookies = self.tab.cookies()
### print(cookies)
self.ewcc_config['cookies'] = cookies
self.ewcc_config['savetime'] = time.time()
print("--------------------")
self.config_manager.app_config['ewcc'] = self.ewcc_config # 修改为通过类访问
self.config_manager.save_config() # 修改为调用类方法
def test(self ):
# print(self.browser as Chromium.version )
pass
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):
if url is None:
url=self.url
if title is None:
title=self.url_info
try:
self.tab= self.browser.get_tab(url=url)
print("根据 url 找到标签")
except:
print("根据 url 没有找到标签")
self.tab=None
if not self.tab:
try:
self.tab=self.browser.get_tab(title=title)
print("根据 标题名 找到 标签")
except :
print("根据 标题名 没有找到标签")
self.tab=None
return self.tab
def is_login(self):
if self.tab is None:
return False
time.sleep(2)
cur_login=False
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
# 判断是否登录 ,如果没有登录 ,则提示十次,间断5秒
i = 1
time.sleep(2)
while i <= 10:
cur_login = False
try:
e = None
e = self.tab.ele('@@tag()=span@@text()^忘记密码')
### print(e.value)
print(f'需要登录 <{i}> :')
time.sleep(5)
except Exception as e:
print('已经登录')
print(f'{e}')
cur_login = True
if cur_login:
break
i += 1
if not cur_login:
print('登录 失败,强制退出。')
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(self.ewcc_config.get('username','pengf332.hnsy'))
time.sleep(1)
ele_div.ele('#fs3_password').set.value(self.ewcc_config.get('password','Pf7842158c'))
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 show_login(self):
self.tab.get(self.url)
self.tab.wait.eles_loaded('xpath://*[@id="authen1Form"]/button')
time.sleep(3)
try:
ele_div=self.tab.ele('#tab3Con')
ele_div.ele('#fs3_username').set.value(self.ewcc_config.get('username','pengf332.hnsy'))
ele_div.ele('#fs3_password').set.value(self.ewcc_config.get('password','Pf7842158b'))
ele_div.ele('#fs3_otpOrSms').set.value(self.ewcc_config.get('otpOrSms','129727'))
# ele_div.ele('@type=submit').click()
except Exception as e:
print(e)
time.sleep(60)
return True
def send_message(self):
pass
def query_car_info(self,plate_number=None,phone_number=None,additional_info=None):
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
if __name__ == "__main__":
ewcc = Sinopec_ewcc()
# 1 查找现有的标签
print('<1> 查找 现有的标签')
ewcc.find_tab() # 新增:查找标签页
# 2 如果没有登录 ,则使用cookie登录
if not ewcc.is_login():
print('<2> 找不到对应的网站,使用cookies尝试登录')
ewcc.load_cookies()
ewcc.new_tab()
# 3 判断是否登录,如果登录不成功,则使用帐号和密码登录
if not ewcc.is_login():
print('<3> 找不对应的网站,使用帐号密码登录')
# 这里要注意12小时才可以登录一次。
# 这里显示登录界面,并等待输入一分钟
ewcc.show_login()
# 4 判断是否登录 ,如果失败,则发送信息到微信上
if ewcc.is_login():
ewcc.tab.refresh()
ewcc.save_cookies()
print(" 保存cookies")
else:
ewcc.send_message()
# ewcc.query_car_info()
ewcc.quit()