adm18/ntuh/submodule/ntuhgov.20230412/portal_spynner.py

853 lines
28 KiB
Python
Raw Permalink Normal View History

2025-09-16 05:20:19 +00:00
# -*- coding: utf-8 -*-
# import sys
# reload(sys)
# sys.setdefaultencoding('utf-8')
import calendar
import datetime
<<<<<<< HEAD
=======
import os
>>>>>>> 3b236beb1aca71c7ab0879d1ab01bf96f280d5ea
import re
import shelve
import time
import urllib
import urlparse
# import pyvirtualdisplay
# pyvirtualdisplay.Display().start()
<<<<<<< HEAD
from xvfbwrapper import Xvfb
vdisplay = Xvfb()
vdisplay.start()
=======
# from xvfbwrapper import Xvfb
# vdisplay = Xvfb()
# vdisplay.start()
myuid = os.getresuid()
import psutil
pXvfb = None
for p in psutil.process_iter():
# print p, p.name(), p.pid, myuid
if p.name() == "Xvfb" and p.uids() == myuid:
# print p, p.cmdline()
pXvfb = p
if pXvfb:
# print pXvfb
for cmd in pXvfb.cmdline():
# print cmd
if cmd[0]==':':
os.environ['DISPLAY'] = cmd
break
else:
import pyvirtualdisplay
pyvirtualdisplay.Display().start()
# print os.environ['DISPLAY']
>>>>>>> 3b236beb1aca71c7ab0879d1ab01bf96f280d5ea
import PyQt4
import pyquery
import spynner
SESSION = None
SESSION_TIMESTAMP = datetime.datetime.now()
SHELVE_FILE = '/tmp/session.shelve'
from myutil import *
def jprint(a):
import json
print json.dumps(a, ensure_ascii = False, indent=4, sort_keys=True)
def Browser():
browser = spynner.Browser()
# browser.debug_level=spynner.DEBUG
return browser
def Login():
global SESSION, SESSION_TIMESTAMP
d = shelve.open(SHELVE_FILE)
try:
SESSION = d['SESSION']
SESSION_TIMESTAMP = d['SESSION_TIMESTAMP']
except:
pass
d.close()
if SESSION and datetime.datetime.now() < SESSION_TIMESTAMP + datetime.timedelta(minutes = 10):
SESSION_TIMESTAMP = datetime.datetime.now()
d = shelve.open(SHELVE_FILE)
d['SESSION_TIMESTAMP'] = datetime.datetime.now()
d.close()
# print 'Use old SESSION: ', SESSION
return SESSION
browser = Browser()
# timeout when loading images
try:
browser.load("http://portal.ntuh.gov.tw/General/Login.aspx")
except:
pass
browser.wk_fill("#txtUserID", "004552")
browser.wk_fill("#txtPass", "n122119493")
browser.click("#rdblQuickMenu_0")
browser.click("#imgBtnSubmitNew", wait_load=True, timeout=9)
html = browser.html
browser.close()
pattern = "SESSION=(\w*)"
matches = re.findall(pattern, html)
SESSION = matches[0]
d = shelve.open(SHELVE_FILE)
d['SESSION'] = SESSION
d['SESSION_TIMESTAMP'] = datetime.datetime.now()
d.close()
print 'Use new SESSION: ', SESSION
return SESSION
def SimpleInfoShowUsingPlaceHolder(form):
# print form
url = form.attr.action
data = {}
headers = { "Content-Type": "application/x-www-form-urlencoded" }
req = PyQt4.QtNetwork.QNetworkRequest(PyQt4.QtCore.QUrl(url))
for k, v in headers.items():
req.setRawHeader(k, v)
for input in form.children('input'):
input = pyquery.PyQuery(input)
n = input.attr.name
v = input.attr.value.encode('utf8')
# print n, v
data[n] =v
browser = Browser()
browser.webframe.load(req, PyQt4.QtNetwork.QNetworkAccessManager.PostOperation, urllib.urlencode(data))
browser._wait_load()
data['html'] = unicode(browser.webframe.toHtml())
browser.close()
data['url'] = url
KeyCodeList = data['KeyCodeList'].split('|')
KeyNameList = data['KeyNameList'].split('|')
for i in range(len(KeyCodeList)):
if KeyCodeList[i] == data['AccountIDSE']:
data['KeyCode'] = KeyCodeList[i]
data['KeyName'] = KeyNameList[i]
# jprint(data)
# exit()
return data
def PatientMedicalRecordListQuery(Chart, AfterDate = None, SESSION = None):
# def PatientMedicalRecordListQuery(q, Chart, SESSION = None):
if not SESSION:
SESSION = Login()
Chart = str(Chart)
while len(Chart) < 7:
Chart = '0'+Chart
'''
病患就診紀錄
Show hospital visit
AfterDate: Also fetch medical record after Date
'''
url = "http://ihisaw.ntuh.gov.tw/WebApplication/OtherIndependentProj/PatientBasicInfoEdit/PatientMedicalRecordListQuery.aspx?QueryBySelf=N&SESSION=%s" % SESSION
browser = Browser()
browser.load(url)
browser.wk_fill('#NTUHWeb1_PatientBasicInfoQueryByIDAndName1 > input:nth-child(4)', Chart)
# browser.wk_click('#NTUHWeb1_PatientBasicInfoQueryByIDAndName1 > input[type="submit"]:nth-child(9)', wait_load=True, timeout=9)
# browser.wk_click('#NTUHWeb1_PatientBasicInfoQueryByIDAndName1 > input[type="submit"]:nth-child(9)', wait_load=True)
browser.wk_click('#NTUHWeb1_PatientBasicInfoQueryByIDAndName1 > input[type="submit"]:nth-child(13)', wait_load=True)
body = unicode(browser.webframe.toHtml())
# print type(body)
pqhtml = pyquery.PyQuery(body)
result = {}
#已死亡?
pattern = r'<span id="NTUHWeb1_PatAccountListRecord1_PatBasicDescription" .*?>(?P<name>.*?)\((?P<gender>.*?),(?P<birthday>.*?),(?P<age>.*?)\) (?P<extra> .*)? \((?P<branch>.*?)\)</span>'
r = re.compile(pattern)
d = [m.groupdict() for m in r.finditer(body)]
if d:
d[0]['dead'] = None
if d[0]['extra']:
matches = re.findall(ur'(..../../..) 已死亡', d[0]['extra'])
if matches:
d[0]['dead'] = matches[0]
result.update(d[0])
else:
result['dead'] = None
# if 'birthday' in result:
# result['birthday'] = datetime.datetime.strptime(result['birthday'], "%Y/%m/%d")
pattern = r'id="NTUHWeb1_PatAccountListRecord1_personidHidden" value="(?P<PersonID>.*?)"'
r = re.compile(pattern)
d = [m.groupdict() for m in r.finditer(body)]
if d:
result['PersonID'] = d[0]['PersonID']
# 住
InPatRecord = pqhtml('#NTUHWeb1_PatAccountListRecord1_GridViewInPatRecord')
InPat = []
for tr in pyquery.PyQuery(InPatRecord)('tr'):
r = {}
pqtr = pyquery.PyQuery(tr)
pqspan = pqtr('span')
if not len(pqspan):
continue
for span in pqspan:
key = span.attrib['id'].split('_')[-1][7:]
r[key] = span.text
OutDate = datetime.datetime.strptime(r['OutDate'], '%Y/%m/%d').date() if r['OutDate'] else None
if AfterDate and OutDate and OutDate >= AfterDate:
browser.click('#%s' % pqtr('input')[0].attrib['id'], wait_load=True)
pqclick = pyquery.PyQuery(unicode(browser.webframe.toHtml()))
form = pqclick('form[name=dischargenotelist]')
r.update(SimpleInfoShowUsingPlaceHolder(form))
# r['DischargeSummary'] = SimpleInfoShowUsingPlaceHolder(form)
InPat.append(r)
result['InPat'] = InPat
# 急
EmergencyContent = pqhtml('#NTUHWeb1_PatAccountListRecord1_GridViewEmergencyContent')
Emergency = []
for tr in pyquery.PyQuery(EmergencyContent)('tr'):
r = {}
pqtr = pyquery.PyQuery(tr)
pqspan = pqtr('span')
if not len(pqspan):
continue
for span in pqspan:
key = span.attrib['id'].split('_')[-1][9:]
r[key] = span.text
DischargeDate = datetime.datetime.strptime(r['DischargeDate'], '%Y/%m/%d').date() if r['DischargeDate'] else None
if AfterDate and DischargeDate and DischargeDate >= AfterDate:
browser.click('#%s' % pqtr('input')[0].attrib['id'], wait_load=True)
pqclick = pyquery.PyQuery(unicode(browser.webframe.toHtml()))
form = pqclick('form[name=emerrecordlist]')
r.update(SimpleInfoShowUsingPlaceHolder(form))
# r['EmerMedicalRecordList'] = SimpleInfoShowUsingPlaceHolder(form)
Emergency.append(r)
result['Emergency'] = Emergency
# 門
OutPatRecord = pqhtml('#NTUHWeb1_PatAccountListRecord1_GridViewOutPatRecord')
OutPat = []
for tr in pyquery.PyQuery(OutPatRecord)('tr'):
r = {}
pqtr = pyquery.PyQuery(tr)
pqspan = pqtr('span')
if not len(pqspan):
continue
for span in pqspan:
key = span.attrib['id'].split('_')[-1][5:]
r[key] = span.text
ComeClinicDate = datetime.datetime.strptime(r['ComeClinicDate'], '%Y/%m/%d').date() if r['ComeClinicDate'] else None
if AfterDate and ComeClinicDate and ComeClinicDate >= AfterDate:
browser.click('#%s' % pqtr('input')[0].attrib['id'], wait_load=True)
pqclick = pyquery.PyQuery(unicode(browser.webframe.toHtml()))
form = pqclick('form[name=dischargenotelist]')
r.update(SimpleInfoShowUsingPlaceHolder(form))
# r['Clinics'] = SimpleInfoShowUsingPlaceHolder(form)
OutPat.append(r)
result['OutPat'] = OutPat
browser.close()
return result
def OPNoteList(Chart, SESSION = None):
# def PatientMedicalRecordListQuery(q, Chart, SESSION = None):
if not SESSION:
SESSION = Login()
'''
手術紀錄
'''
url = "http://ihisaw.ntuh.gov.tw/WebApplication/OtherIndependentProj/PatientBasicInfoEdit/PatientMedicalRecordListQuery.aspx?QueryBySelf=N&SESSION=%s" % SESSION
browser = Browser()
browser.load(url)
browser.wk_fill('#NTUHWeb1_PatientBasicInfoQueryByIDAndName1 > input:nth-child(4)', Chart)
# browser.wk_click('#NTUHWeb1_PatientBasicInfoQueryByIDAndName1 > input[type="submit"]:nth-child(9)', wait_load=True, timeout=9)
browser.wk_click('#NTUHWeb1_PatientBasicInfoQueryByIDAndName1 > input[type="submit"]:nth-child(9)', wait_load=True)
browser.click('#NTUHWeb1_PatAccountListRecord1_ShowOperationList', wait_load=True)
match = re.search(r"'(http://ihisaw.ntuh.gov.tw/WebApplication/OtherIndependentProj/PatientBasicInfoEdit/SimpleInfoShowUsingPlaceHolder.aspx.+?)'", browser.html)
if match is None:
return []
url = match.group(1)
browser.load(url)
html =unicode(browser.webframe.toHtml())
pyhtml = pyquery.PyQuery(html)
list = []
for a in pyhtml('#TreeViewItem')('a'):
r = {}
id = a.attrib['id']
r['Item'] = id
r['KeyCode'] = a.attrib['href'].split(',')[-1].split("'")[1][1:]
r['KeyName'] = a.text
url = 'http://ihisaw.ntuh.gov.tw/WebApplication/OtherIndependentProj/PatientBasicInfoEdit/SimpleInfoShowUsingPlaceHolder.aspx?SESSION=%s' % SESSION
data = {
'KeyCodeList': r['KeyCode'],
'KeyNameList': r['KeyName'],
'Func' : 'OPNoteList',
}
posturl = '%s&%s' % (url, urllib.urlencode(data))
browser.load(posturl)
r['url'] = posturl
r['Report'] = unicode(browser.webframe.toHtml())
list.append(r)
browser.close()
return list
#病歷號/身分證號
def ReportPathology(ID, SESSION=None):
if not SESSION:
SESSION = Login()
browser = Browser()
url = 'http://ihisaw.ntuh.gov.tw/WebApplication/ElectronicMedicalReportViewer/MobileMasterPage.aspx?SESSION=%s' % SESSION
browser.load(url)
# print browser.url, len(browser.html)
# print browser.html
browser.fill("#txbIDInput", str(ID))
browser.click("#btnQueryAction")
browser.wait_load(timeout=30)
body = unicode(browser.webframe.toHtml())
# body = browser.html
d = pyquery.PyQuery(body)
d2 = d('div').filter(lambda i: pyquery.PyQuery(this).children('div').attr.reportgroup == u'病理')
# print d2
# SingleMedicalReport = []
report = []
for ri in d2('.reportitem'):
# print dir(ri)
# print ri.attrib['param']
pqri = pyquery.PyQuery(ri)
# # ignore item without ReportDate
# if pqri('td')[2].text.strip() == '*':
# continue
id = pqri('.linkrptbt').attr.id
browser.click("#%s"%id)
browser.wait_load()
ifrmURL = pyquery.PyQuery(browser.html)('#Reportifrm').attr.src
parse = urlparse.parse_qs(urlparse.urlparse(ifrmURL).query)
ChartNo = parse['ChartNo'][0]
ReportKey = parse['ReportKey'][0]
ReportCode = parse['ReportCode'][0]
PersonID = parse['PersonID'][0]
html = unicode(browser.webframe.childFrames()[0].toHtml())
browser.click("#backToHome")
browser.wait_load()
d = pyquery.PyQuery(html)
PathCode = d('#rReportTab_lsvReportBody_ctrl0_ctl00_lblPathCode').text()
SpecimenGetDate = d('#rReportTab_lsvReportBody_ctrl0_ctl00_lblSpecimenGetDate').text()
ReportDate = d('#rReportTab_lsvReportBody_ctrl0_ctl00_lblReportDate').text()
SpecimenCode = d('#rReportTab_lsvReportBody_ctrl0_ctl00_lblSpecimenCode').text()
DepCode = d('#rReportTab_lsvReportBody_ctrl0_ctl00_lblDepCode').text()
WardNoRoomCoBedNo = d('#rReportTab_lsvReportBody_ctrl0_ctl00_lblWardNoRoomCoBedNo').text()
Tissue = d('#rReportTab_lsvReportBody_ctrl0_ctl00_lblTissue').text()
BedDiagnosis = d('#rReportTab_lsvReportBody_ctrl0_ctl00_lblBedDiagnosis').text()
Result = d('#rReportTab_lsvReportBody_ctrl0_ctl00_lblResult').text()
ExamDoctorName = d('#rReportTab_lsvReportBody_ctrl0_ctl00_lblExamDoctorName').text()
InChargeDoctorName= d('#rReportTab_lsvReportBody_ctrl0_ctl00_lblInChargeDoctorName').text()
ReCheckDoctorName = d('#rReportTab_lsvReportBody_ctrl0_ctl00_lblReCheckDoctorName').text()
# ignore item without ReportDate
if ReportDate == '':
continue
report.append({'url': ifrmURL,
'html': html,
'ChartNo': ChartNo,
'ReportKey': ReportKey,
'ReportCode': ReportCode,
'PersonID': PersonID,
'PathCode': PathCode,
'SpecimenGetDate': SpecimenGetDate,
'ReportDate': ReportDate,
'SpecimenCode': SpecimenCode,
'DepCode': DepCode,
'WardNoRoomCoBedNo': WardNoRoomCoBedNo,
'Tissue': Tissue,
'BedDiagnosis': BedDiagnosis,
'Result': Result,
'ExamDoctorName': ExamDoctorName,
'InChargeDoctorName': InChargeDoctorName,
'ReCheckDoctorName': ReCheckDoctorName,
})
browser.close()
return report
#4th 報告
def ElectronicMedicalReportViewer(ID, SESSION=None):
if not SESSION:
SESSION = Login()
browser = Browser()
url = 'http://ihisaw.ntuh.gov.tw/WebApplication/ElectronicMedicalReportViewer/MobileMasterPage.aspx?SESSION=%s' % SESSION
browser.load(url)
browser.fill("#txbIDInput", str(ID))
browser.click("#btnQueryAction")
browser.wait_load(timeout=30)
body = unicode(browser.webframe.toHtml())
d = pyquery.PyQuery(body)
report = []
for ri in d('.reportitem'):
pqri = pyquery.PyQuery(ri)
r = {}
r['報告類別'] = pqri('td')[0].text.strip()
r['檢查日期'] = pqri('td')[1].text.strip()
r['報告日期'] = pqri('td')[2].text.strip()
# print ri.text_content()
id = pqri('.linkrptbt').attr.id
browser.click("#%s"%id, wait_load=True)
ifrmURL = pyquery.PyQuery(browser.html)('#Reportifrm').attr.src
# print ifrmURL
parse = urlparse.parse_qs(urlparse.urlparse(ifrmURL).query)
r['ChartNo'] = parse['ChartNo'][0]
r['ReportKey'] = parse['ReportKey'][0]
r['ReportCode'] = parse['ReportCode'][0]
r['PersonID'] = parse['PersonID'][0]
html = unicode(browser.webframe.childFrames()[0].toHtml())
r['url'] = ifrmURL
r['html'] = html
# print html
browser.click("#backToHome")
browser.wait_load()
# d2 = pyquery.PyQuery(html)('span').filter(lambda i: '_lbl' in pyquery.PyQuery(this).attr.id)
d2 = pyquery.PyQuery(html)('span')
# d2 = pyquery.PyQuery(html)('span').filter(lambda i: hasattr(pyquery.PyQuery(this), 'attrib') and 'id' in pyquery.PyQuery(this).attrib)
for lbl in d2:
if 'id' not in lbl.attrib:
continue
if '_lbl' not in lbl.attrib['id']:
continue
if 'Title' in lbl.attrib['id']:
continue
key = lbl.attrib['id'].split('_')[-1][3:]
value = lbl.text
r[key] = value
report.append(r)
browser.close()
return report
def QueryInPatientByDate(ID, begin, end, SESSION=None):
'''
病房作業
查詢條件輸入
依使用者
'''
if not SESSION:
SESSION = Login()
browser = Browser()
browser.load('http://ihisaw.ntuh.gov.tw/WebApplication/InPatient/Ward/OpenWard.aspx?SESSION=%s' % SESSION)
'''
jquery on these fields doesn't work
however, click does work
'''
browser.wk_fill('input[id="NTUHWeb1_QueryInPatientPersonAccountControl1_IDInputTextBox"]', ID)
browser.wk_fill('input[id="NTUHWeb1_QueryInPatientPersonAccountControl1_DateTextBoxYearMonthDayInputUI1_YearInput"]', begin.year)
browser.wk_fill('input[id="NTUHWeb1_QueryInPatientPersonAccountControl1_DateTextBoxYearMonthDayInputUI1_MonthInput"]', begin.month)
browser.wk_fill('input[id="NTUHWeb1_QueryInPatientPersonAccountControl1_DateTextBoxYearMonthDayInputUI1_DayInput"]', begin.day)
browser.wk_fill('input[id="NTUHWeb1_QueryInPatientPersonAccountControl1_DateTextBoxYearMonthDayInputUI2_YearInput"]', end.year)
browser.wk_fill('input[id="NTUHWeb1_QueryInPatientPersonAccountControl1_DateTextBoxYearMonthDayInputUI2_MonthInput"]', end.month)
browser.wk_fill('input[id="NTUHWeb1_QueryInPatientPersonAccountControl1_DateTextBoxYearMonthDayInputUI2_DayInput"]', end.day)
browser.click("#NTUHWeb1_QueryInPatientPersonAccountControl1_EmpNoCareQueryButton", wait_load=True)
browser.wk_check('input[id="NTUHWeb1_QueryInPatientPersonAccountControl1_CheckBoxShowDrMainColumn"]')
browser.click('#NTUHWeb1_QueryInPatientPersonAccountControl1_CheckBoxShowDrMainColumn', wait_load=True)
# browser.snapshot().save("webpage3.png")
html = unicode(browser.webframe.toHtml())
# print html
browser.close()
d = pyquery.PyQuery(html)
PatientList = []
for tr in d('#NTUHWeb1_QueryInPatientPersonAccountControl1_DataGridAccountList > tbody')('tr')[1:]:
d2 = pyquery.PyQuery(tr)
# print d2.text()
# print d2('span')
# return
Pat = {}
for s in d2('span')+d2('a'):
if 'id' in s.attrib:
key = s.attrib['id'].split('_')[-1]
Pat[key] = s.text
if 'title' in s.attrib:
Pat[key+'Title'] = s.attrib['title']
Pat['主治'] = d2('span')[7].text
Pat['住院'] = d2('span')[8].text
Pat[''] = d2('span')[9].text
Pat[''] = d2('span')[10].text
Pat['住院總天數'] = d2('span')[10].attrib['title'].split(':')[-1].strip()
Pat[''] = d2('span')[11].text
Pat['狀態'] = d2('span')[12].text
Pat['狀態2'] = d2('span')[13].text
Pat['id'] = '%s-%s'%(Pat[''], Pat['PatChartNo'])
PatientList.append(Pat)
return PatientList
def QueryInPatientByMonth(ID, year, month, SESSION=None):
'''
病房作業
查詢條件輸入
依使用者
'''
if not SESSION:
SESSION = Login()
weakday, number = calendar.monthrange(year, month)
# year = str(year)
# month = str(month)
# number = str(number)
return QueryInPatientByDate(ID, datetime.date(year, month, 1), datetime.date(year, month, number), SESSION)
def QueryOpScheduleByDate(ID, begin, end, SESSION=None):
'''
手術作業
主治查詢
'''
if not SESSION:
SESSION = Login()
browser = Browser()
browser.load('http://ihisaw.ntuh.gov.tw/WebApplication/InPatient/OPManagement/SimpleQueryOpSchedule.aspx?SESSION=%s' % SESSION)
browser.fill('#NTUHWeb1_QueryOPPatListCommon1_QueryDrIDInfoByDrName1_EmpNoQueryInput', str(ID))
browser.fill('#NTUHWeb1_QueryOPPatListCommon1_txbStartDate', begin.strftime('%Y/%m/%d'))
browser.fill('#NTUHWeb1_QueryOPPatListCommon1_txbEndDate', end.strftime('%Y/%m/%d'))
browser.click('#NTUHWeb1_QueryOPPatListCommon1_QueryByMainDrCode', wait_load=True)
pqhtml = pyquery.PyQuery(unicode(browser.webframe.toHtml()))
browser.close()
results = []
for tr in pqhtml('#NTUHWeb1_QueryOPPatListCommon1_OPScheduleShowDataGrid1_dgRecordData > tbody')('tr'):
r={}
d2 = pyquery.PyQuery(tr)
for child in d2('span') + d2('a'):
key = child.attrib['id'].split('_')[-1]
r[key] = child.text
if 'title' in child.attrib:
r[key+'Title'] = child.attrib['title'].strip()
<<<<<<< HEAD
if r['OPDateString'].count('/') != 2:
date = '%d/%s' % (datetime.date.today().year, r['OPDateString'])
=======
if r['OPDateString'].count('/') != 2:
date = '%d/%s' % (datetime.date.today().year, r['OPDateString'])
>>>>>>> 3b236beb1aca71c7ab0879d1ab01bf96f280d5ea
# date = '%d/%s' % (begin.year, r['OPDateString'])
# if begin.year != end.year and date < begin:
# date = '%d/%s' % (end.year, r['OPDateString'])
r['OPDateString'] = date
r['id'] = '%s-%s-%s-%s'%(r['OPDateString'], r['OpRoomNoShow'], r['OpSeqNoshow'], r['PatChartNo'])
# r['id'] = r['id'].replace('/', '').replace('-', '')
results.append(r)
return results
def WardQueryUncompletedChart(Start, End, DeptCode='SURG', SESSION=None):
'''
未完成病歷查詢
'''
if not SESSION:
SESSION = Login()
browser = Browser()
url = "http://ihisaw.ntuh.gov.tw/WebApplication/MedicalRecordManagement/WardQueryUncompletedChart.aspx?SESSION=%s" % SESSION
browser.load(url)
# print 123
# browser.runjs(r"setTimeout('__doPostBack(\'NTUHWeb1$RBOutDate\',\'\')', 0);")
# try:
# browser.submit('#NTUHWeb1_RBOutDate', timeout=1)
# except:
# pass
browser.click('#NTUHWeb1_RBOutDate')
while 'NTUHWeb1_ddlDeptCode' not in browser.html:
# print "wait"
browser.wait(1)
# ret = browser.runjs("console.log(typeof(jQuery));")
# browser.load_jquery(force=True)
# print 456
# exit()
# html = unicode(browser.webframe.toHtml())
# pqhtml = pyquery.PyQuery(html)
#
# print pqhtml('#NTUHWeb1_UpdateProgress1').attr('style')
#
# exit()
browser.wk_fill('select[id="NTUHWeb1_ddlDeptCode"]', DeptCode)
browser.wk_fill('input[id="NTUHWeb1_txtQStartDate"]', Start)
browser.wk_fill('input[id="NTUHWeb1_txtQEndDate"]', End)
browser.click('#NTUHWeb1_btn_QueryByDeptListAll')
# browser.browse()
for i in range(100):
browser.wait(1)
pqhtml = pyquery.PyQuery(unicode(browser.webframe.toHtml()))
print i, pqhtml('#NTUHWeb1_UpdateProgress1').attr('style')
if 'none' in pqhtml('#NTUHWeb1_UpdateProgress1').attr('style'):
break
# print unicode(browser.webframe.toHtml())
results = []
for tr in pqhtml('#NTUHWeb1_dgRecordData')('tr')[1:]:
tds = pyquery.PyQuery(tr)('td')
r = {
'': tds[0].text,
'病歷號': tds[1].text,
'帳號': tds[2].text.strip(),
'科部': tds[3].text,
'開始/手術日': tds[4].text,
'結束日': tds[5].text,
'姓名': tds[6].text,
'床號': tds[7].text,
'類別': tds[8].text.strip(),
'主治': tds[9].text,
'住院': tds[10].text,
'': tds[11].text,
'逾期': tds[12].text,
}
results.append(r)
return results
def SimpleQueryOpSchedule(DrCode, StartDate, EndDate, SESSION=None, NoCheck = []):
if not SESSION:
SESSION = Login()
today_year = datetime.date.today().year
browser = Browser()
url = "http://ihisaw.ntuh.gov.tw/WebApplication/InPatient/OPManagement/SimpleQueryOpSchedule.aspx?SESSION=%s" % SESSION
browser.load(url)
browser.wk_fill('#NTUHWeb1_QueryOPPatListCommon1_QueryDrIDInfoByDrName1_EmpNoQueryInput', DrCode)
browser.wk_fill('#NTUHWeb1_QueryOPPatListCommon1_txbStartDate', StartDate)
browser.wk_fill('#NTUHWeb1_QueryOPPatListCommon1_txbEndDate', EndDate)
browser.click('#NTUHWeb1_QueryOPPatListCommon1_QueryByMainDrCode', wait_load=True)
# print unicode(browser.webframe.toHtml())
pqhtml = pyquery.PyQuery(unicode(browser.webframe.toHtml()))
results = []
for tr in pqhtml('#NTUHWeb1_QueryOPPatListCommon1_OPScheduleShowDataGrid1_dgRecordData')('tr')[1:]:
r = {}
pqtr = pyquery.PyQuery(tr)
children = pqtr('span')+ pqtr('a')
for child in children:
# print dir(td)
# print td.text_content().strip()
key = child.attrib['id'].split('_')[-1]
r[key] = child.text
if 'title' in child.attrib:
r[key+'Title'] = child.attrib['title'].strip()
if r['OPDateString'].count('/') == 1:
r['OPDateString'] = '%s/%s' % (today_year, r['OPDateString'])
r['Complete'] = r['CompleteStatueName']
r['OPDate'] = r['OPDateString']
r['OpRoomNo'] = r['OpRoomNoShow']
r['OpSeqNo'] = r['OpSeqNoshow']
r['PatName'] = r['LinkPatName']
r['PatWard'] = r['PopupPatWardInfoWindow']
r['Anes'] = r['lbtPrintTitle']
r['StartTime'] = r['EstStartTimeShortString']
r['SpendTime'] = r['EstSpendTime']
print r['OPDateString'],
id = '%s-%s-%s-%s' % (r['OPDateString'], r['OpRoomNo'], r['OpSeqNo'],r['PatChartNo'])
print id
if r['CompleteStatueName'] != '完成' and id not in NoCheck:
# print "Investigate %s" % id
r['lbnSelect'] =pqtr('a')[0].attrib['id']
# print r['lbnSelect']
browser.click('#%s'%r['lbnSelect'], wait_load=True)
pqhtml2 = pyquery.PyQuery(unicode(browser.webframe.toHtml()))
# print unicode(browser.webframe.toHtml())
# print dir(pqhtml2('#NTUHWeb1_QueryOpSchedule1_txbRemark'))
r['Remark'] = pqhtml2('#NTUHWeb1_QueryOpSchedule1_txbRemark').attr['value']
r['MainOpMode'] = pqhtml2('#NTUHWeb1_QueryOpSchedule1_TextboxPrepareOPMode').attr['value']
browser.webpage.history().back()
browser.wait_load()
# print r['Remark'],
# print r['CompleteStatueName'],r
results.append(r)
return results
if __name__ == "__main__":
# a = PatientMedicalRecordListQuery(4525725, datetime.datetime(2014, 6, 1, 17, 15, 30))
# a = PatientMedicalRecordListQuery(2829917, None)
# a = PatientMedicalRecordListQuery(3009684)
# a = ReportPathology(3418370)
# a = ElectronicMedicalReportViewer(3009684)
# a = OPNoteList(2228813)
# a = QueryInPatientByMonth('004552', 2014, 11)
# a = WardQueryUncompletedChart('2014/12/01', '2014/12/02')
a = SimpleQueryOpSchedule('004552', '2014/12/01', '2015/02/01')
jprint(a)
print len(a)
# MyPrettyPrinter().pprint(a)
# print a['name']
# print a