2024-12-11 04:46:09 +00:00
|
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
|
|
|
|
|
from __future__ import unicode_literals
|
|
|
|
|
|
|
|
|
|
import atexit
|
|
|
|
|
import base64
|
|
|
|
|
import calendar
|
|
|
|
|
import datetime
|
|
|
|
|
import getpass
|
|
|
|
|
import os
|
|
|
|
|
import re
|
|
|
|
|
# import shelve
|
|
|
|
|
import six
|
|
|
|
|
import time
|
|
|
|
|
import uuid
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import logging
|
|
|
|
|
FORMAT = '%(asctime)s %(levelname)s %(message)s'
|
|
|
|
|
logging.basicConfig(format=FORMAT, level=logging.INFO)
|
|
|
|
|
|
|
|
|
|
if six.PY2:
|
|
|
|
|
import sys
|
|
|
|
|
reload(sys)
|
|
|
|
|
sys.setdefaultencoding('utf-8')
|
|
|
|
|
from urlparse import parse_qs, urlparse
|
|
|
|
|
else:
|
|
|
|
|
from urllib.parse import parse_qs, urlparse
|
|
|
|
|
|
|
|
|
|
import pyquery
|
|
|
|
|
|
|
|
|
|
from pymongo import MongoClient
|
|
|
|
|
|
|
|
|
|
from lxml import etree
|
|
|
|
|
|
|
|
|
|
from selenium import webdriver
|
|
|
|
|
from selenium.common.exceptions import (
|
|
|
|
|
NoSuchElementException,
|
|
|
|
|
StaleElementReferenceException,
|
|
|
|
|
)
|
|
|
|
|
from selenium.webdriver.common.by import By
|
|
|
|
|
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
|
|
|
|
|
from selenium.webdriver.common.keys import Keys
|
|
|
|
|
from selenium.webdriver.support import expected_conditions
|
|
|
|
|
from selenium.webdriver.support import expected_conditions as EC
|
|
|
|
|
from selenium.webdriver.support.ui import Select
|
|
|
|
|
from selenium.webdriver.support.wait import WebDriverWait
|
|
|
|
|
|
|
|
|
|
import lxml
|
|
|
|
|
|
|
|
|
|
# solve captcha
|
|
|
|
|
import cv2
|
|
|
|
|
import pytesseract
|
|
|
|
|
|
|
|
|
|
# from xvfbwrapper import Xvfb
|
|
|
|
|
|
|
|
|
|
from .myutil import *
|
|
|
|
|
from .settings import USER_ID, PASSWORD
|
|
|
|
|
DefaultUserID = USER_ID
|
|
|
|
|
DefaultPassword = PASSWORD
|
|
|
|
|
|
|
|
|
|
# if __name__ == "__main__":
|
|
|
|
|
# from myutil import *
|
|
|
|
|
# else:
|
|
|
|
|
# from .myutil import *
|
|
|
|
|
|
|
|
|
|
SESSION = None
|
|
|
|
|
SESSION_TIMESTAMP = datetime.datetime.now()
|
|
|
|
|
SESSION_CREATED = datetime.datetime.now()
|
|
|
|
|
|
|
|
|
|
# SHELVE_FILE = '/tmp/session.shelve'
|
|
|
|
|
SHELVE_FILE = "/tmp/%d.shelve" % os.getppid()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
options = webdriver.chrome.options.Options()
|
|
|
|
|
options.add_argument("--headless")
|
|
|
|
|
options.add_argument('--no-sandbox')
|
|
|
|
|
options.add_argument('--disable-dev-shm-usage')
|
|
|
|
|
options.add_argument("--disable-gpu") # Last I checked this was necessary.
|
|
|
|
|
driver = webdriver.Chrome(
|
|
|
|
|
# chrome_options=options,
|
|
|
|
|
options=options,
|
2024-12-12 04:01:43 +00:00
|
|
|
|
# service_log_path="/tmp/selenium-%s.log" % getpass.getuser(),
|
2024-12-11 04:46:09 +00:00
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def close_driver():
|
|
|
|
|
driver.close()
|
|
|
|
|
driver.quit()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
atexit.register(close_driver)
|
|
|
|
|
|
|
|
|
|
# driver.implicitly_wait(10)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def CloseOtherWindows(current):
|
|
|
|
|
for h in driver.window_handles:
|
|
|
|
|
if h != current:
|
|
|
|
|
driver.switch_to.window(h)
|
|
|
|
|
driver.close()
|
|
|
|
|
driver.switch_to.window(current)
|
|
|
|
|
|
|
|
|
|
def LogWebDriver(prefix = ''):
|
|
|
|
|
with open('/tmp/%spage_source.html'%prefix, 'w') as out_file:
|
|
|
|
|
out_file.write(driver.page_source)
|
|
|
|
|
driver.get_screenshot_as_file('/tmp/%sscreenshot.png'%prefix)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def Login(UserID=DefaultUserID, Pass=DefaultPassword, NewSession=False):
|
|
|
|
|
global SESSION, SESSION_CREATED, SESSION_TIMESTAMP
|
|
|
|
|
|
|
|
|
|
node = uuid.getnode()
|
|
|
|
|
NOW = datetime.datetime.utcnow()
|
|
|
|
|
# print (NOW)
|
|
|
|
|
|
|
|
|
|
if (UserID==DefaultUserID) and not NewSession:
|
|
|
|
|
|
|
|
|
|
c = None
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
# client = MongoClient("mongodb.xiao.tw")
|
|
|
|
|
client = MongoClient("mongodb+srv://ntuhuser:0223123456@cluster0.kfeql.mongodb.net/dbname?retryWrites=true&w=majority")
|
|
|
|
|
# db = client.test
|
|
|
|
|
db = client.portal
|
|
|
|
|
collection = db.SESSION
|
|
|
|
|
collection.find_one()
|
|
|
|
|
c = collection.find_one({"node": node}, sort=[("SESSION_TIMESTAMP", -1)])
|
|
|
|
|
SESSION = c["SESSION"]
|
|
|
|
|
SESSION_CREATED = c["SESSION_CREATED"]
|
|
|
|
|
SESSION_TIMESTAMP = c["SESSION_TIMESTAMP"]
|
|
|
|
|
except:
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
'''
|
|
|
|
|
if c is None:
|
|
|
|
|
d = shelve.open(SHELVE_FILE)
|
|
|
|
|
try:
|
|
|
|
|
SESSION = d["SESSION"]
|
|
|
|
|
SESSION_CREATED = d["SESSION_CREATED"]
|
|
|
|
|
SESSION_TIMESTAMP = d["SESSION_TIMESTAMP"]
|
|
|
|
|
except:
|
|
|
|
|
pass
|
|
|
|
|
d.close()
|
|
|
|
|
'''
|
|
|
|
|
|
|
|
|
|
if SESSION and NOW < SESSION_TIMESTAMP + datetime.timedelta(minutes=10) and NOW < SESSION_CREATED + datetime.timedelta(hours=9):
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
collection.update_one(
|
|
|
|
|
{"_id": c["_id"]}, {"$set": {"SESSION_TIMESTAMP": NOW}}
|
|
|
|
|
)
|
|
|
|
|
client.close()
|
|
|
|
|
except:
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
'''
|
|
|
|
|
d = shelve.open(SHELVE_FILE)
|
|
|
|
|
d[str("SESSION_TIMESTAMP")] = NOW
|
|
|
|
|
d.close()
|
|
|
|
|
'''
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# print ('Use old SESSION: ', SESSION)
|
|
|
|
|
# return SESSION
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Make sure the SESSION works
|
|
|
|
|
url = (
|
|
|
|
|
# "http://hisaw.ntuh.gov.tw/WebApplication/OutPatientAdministration/QueryModifyPatBase.aspx?SESSION=%s"
|
|
|
|
|
"http://portal.ntuh.gov.tw/General/NewRedirect.aspx?SESSION=%s"
|
|
|
|
|
% SESSION
|
|
|
|
|
)
|
|
|
|
|
driver.get(url)
|
|
|
|
|
if 'txtVerifyCode' not in driver.page_source:
|
|
|
|
|
# print ('Use old SESSION: ', SESSION)
|
|
|
|
|
return SESSION
|
|
|
|
|
|
|
|
|
|
# with Xvfb() as xvfb:
|
|
|
|
|
|
|
|
|
|
SESSION = None
|
|
|
|
|
session_pattern = r"SESSION=(\w+)"
|
|
|
|
|
|
|
|
|
|
CAPTCHA_FILE = "/tmp/captcha-%s.gif" % getpass.getuser()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
retries=0
|
|
|
|
|
|
|
|
|
|
while SESSION is None:
|
|
|
|
|
retries += 1
|
|
|
|
|
# print(retries)
|
|
|
|
|
# driver = webdriver.Firefox()
|
|
|
|
|
# driver = webdriver.PhantomJS()
|
|
|
|
|
# driver = WebDriver()
|
|
|
|
|
current_window = driver.window_handles[0]
|
|
|
|
|
|
|
|
|
|
driver.get("http://portal.ntuh.gov.tw/General/Login.aspx")
|
|
|
|
|
# # LogWebDriver('login1-')
|
|
|
|
|
# print(driver.page_source)
|
|
|
|
|
# matches = re.findall(session_pattern, driver.page_source)
|
|
|
|
|
# print(matches)
|
|
|
|
|
# if len(matches):
|
|
|
|
|
# SESSION = matches[0]
|
|
|
|
|
# CloseOtherWindows(current_window)
|
|
|
|
|
# break
|
|
|
|
|
|
|
|
|
|
# imgVerifyCode
|
|
|
|
|
# ele_captcha = driver.find_element(By.ID, "imgVerifyCode")
|
|
|
|
|
ele_captcha = driver.find_element(By.ID, 'imgVerifyCode')
|
|
|
|
|
img_captcha_base64 = driver.execute_async_script(
|
|
|
|
|
"""
|
|
|
|
|
var ele = arguments[0], callback = arguments[1];
|
|
|
|
|
ele.addEventListener('load', function fn(){
|
|
|
|
|
ele.removeEventListener('load', fn, false);
|
|
|
|
|
var cnv = document.createElement('canvas');
|
|
|
|
|
cnv.width = this.width; cnv.height = this.height;
|
|
|
|
|
cnv.getContext('2d').drawImage(this, 0, 0);
|
|
|
|
|
callback(cnv.toDataURL('image/jpeg').substring(22));
|
|
|
|
|
}, false);
|
|
|
|
|
ele.dispatchEvent(new Event('load'));
|
|
|
|
|
""",
|
|
|
|
|
ele_captcha,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
# save the captcha to a file
|
|
|
|
|
with open(CAPTCHA_FILE, "wb") as f:
|
|
|
|
|
f.write(base64.b64decode(img_captcha_base64))
|
|
|
|
|
|
|
|
|
|
img = cv2.imread(CAPTCHA_FILE, 0)
|
|
|
|
|
# img = cv2.imread(CAPTCHA_FILE)
|
|
|
|
|
VerifyCode = pytesseract.image_to_string(img).strip()
|
|
|
|
|
# print('---%s---'%VerifyCode)
|
|
|
|
|
|
|
|
|
|
# print(VerifyCode)
|
|
|
|
|
# exit()
|
|
|
|
|
|
|
|
|
|
elem = driver.find_element(By.ID, "txtUserID")
|
|
|
|
|
elem.send_keys(UserID)
|
|
|
|
|
elem = driver.find_element(By.ID, "txtPass")
|
|
|
|
|
# elem.click()
|
|
|
|
|
elem.send_keys(Pass)
|
|
|
|
|
elem = driver.find_element(By.ID, "txtVerifyCode")
|
|
|
|
|
# elem.click()
|
|
|
|
|
elem.send_keys(VerifyCode)
|
|
|
|
|
# time.sleep(1)
|
|
|
|
|
# LogWebDriver('login2-')
|
|
|
|
|
elem = driver.find_element(By.ID, "rdblQuickMenu_0")
|
|
|
|
|
elem.click()
|
|
|
|
|
elem = driver.find_element(By.ID, "imgBtnSubmitNew")
|
|
|
|
|
# time.sleep(1)
|
|
|
|
|
elem.click()
|
|
|
|
|
# time.sleep(1)
|
|
|
|
|
# print(type(driver))
|
|
|
|
|
# print(dir(driver))
|
|
|
|
|
# LogWebDriver('login3-')
|
|
|
|
|
# driver.get_screenshot_as_file('screenshot.png')
|
|
|
|
|
|
|
|
|
|
html = driver.page_source
|
|
|
|
|
|
|
|
|
|
# try:
|
|
|
|
|
# html = driver.page_source
|
|
|
|
|
# except UnexpectedAlertPresentException as e:
|
|
|
|
|
# driver.switch_to.alert.accept()
|
|
|
|
|
# html = driver.page_source
|
|
|
|
|
|
|
|
|
|
# html = driver.execute_script("return document.documentElement.outerHTML;")
|
|
|
|
|
|
|
|
|
|
CloseOtherWindows(current_window)
|
|
|
|
|
# print driver.current_url
|
|
|
|
|
# driver.close()
|
|
|
|
|
|
|
|
|
|
matches = re.findall(session_pattern, html)
|
|
|
|
|
if len(matches):
|
|
|
|
|
SESSION = matches[0]
|
|
|
|
|
|
|
|
|
|
# pattern = "SESSION=(\w*)"
|
|
|
|
|
# matches = re.findall(pattern, html)
|
|
|
|
|
# SESSION = matches[0]
|
|
|
|
|
|
|
|
|
|
if UserID==DefaultUserID:
|
|
|
|
|
try:
|
|
|
|
|
c = {
|
|
|
|
|
"node": node,
|
|
|
|
|
"SESSION": SESSION,
|
|
|
|
|
"SESSION_CREATED": NOW,
|
|
|
|
|
"SESSION_TIMESTAMP": NOW,
|
|
|
|
|
}
|
|
|
|
|
collection.insert_one(c)
|
|
|
|
|
collection.create_index("node")
|
|
|
|
|
collection.create_index("SESSION_CREATED")
|
|
|
|
|
client.close()
|
|
|
|
|
except:
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
'''
|
|
|
|
|
d = shelve.open(SHELVE_FILE)
|
|
|
|
|
d["SESSION"] = SESSION
|
|
|
|
|
d["SESSION_CREATED"] = NOW
|
|
|
|
|
d["SESSION_TIMESTAMP"] = NOW
|
|
|
|
|
d.close()
|
|
|
|
|
'''
|
|
|
|
|
|
|
|
|
|
# print ('Use new SESSION: ', SESSION)
|
|
|
|
|
return SESSION
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# http://hisaw.ntuh.gov.tw/WebApplication/OutPatientAdministration/QueryModifyPatBase.aspx?SESSION=FFC71ED5896A4887BDEE7FD258D4738F
|
|
|
|
|
def QueryModifyPatBase(request, SESSION=None):
|
|
|
|
|
|
|
|
|
|
# print(1)
|
|
|
|
|
if not SESSION:
|
|
|
|
|
SESSION = Login()
|
|
|
|
|
# print(2)
|
|
|
|
|
url = (
|
|
|
|
|
"http://hisaw.ntuh.gov.tw/WebApplication/OutPatientAdministration/QueryModifyPatBase.aspx?SESSION=%s"
|
|
|
|
|
% SESSION
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
# print(url)
|
|
|
|
|
|
|
|
|
|
# with Xvfb() as xvfb:
|
|
|
|
|
if True:
|
|
|
|
|
|
|
|
|
|
# driver = webdriver.Firefox()
|
|
|
|
|
# driver = WebDriver()
|
|
|
|
|
driver.get(url)
|
|
|
|
|
LogWebDriver()
|
|
|
|
|
|
|
|
|
|
if "IdNo" in request and len(request["IdNo"]):
|
|
|
|
|
elem = driver.find_element(By.ID, "NTUHWeb1_txtIdNo")
|
|
|
|
|
elem.send_keys(request["IdNo"])
|
|
|
|
|
elem = driver.find_element(By.ID, "NTUHWeb1_btnQuery")
|
|
|
|
|
elem.click()
|
|
|
|
|
elif "ChartNo" in request and len(request["ChartNo"]):
|
|
|
|
|
elem = driver.find_element(By.ID, "NTUHWeb1_txtChartNo")
|
|
|
|
|
elem.send_keys(request["ChartNo"])
|
|
|
|
|
elem = driver.find_element(By.ID, "NTUHWeb1_btnQuery")
|
|
|
|
|
elem.click()
|
|
|
|
|
else:
|
|
|
|
|
return None
|
|
|
|
|
|
|
|
|
|
# print(4)
|
|
|
|
|
html = driver.page_source
|
|
|
|
|
# driver.close()
|
|
|
|
|
|
|
|
|
|
if "查無此病歷資料" in html:
|
|
|
|
|
return None
|
|
|
|
|
|
|
|
|
|
pqhtml = pyquery.PyQuery(html)
|
|
|
|
|
|
|
|
|
|
r = {}
|
|
|
|
|
|
|
|
|
|
r["ChartNo"] = pqhtml("#NTUHWeb1_labCartNo").text()
|
|
|
|
|
r["SpecialCase"] = pqhtml("#NTUHWeb1_drpPatBaseSpecialCase option:selected").text()
|
|
|
|
|
|
|
|
|
|
r["IdNo"] = pqhtml("#NTUHWeb1_txtPatBaseIdNo").val()
|
|
|
|
|
|
|
|
|
|
r["ChtName"] = xstr(pqhtml("#NTUHWeb1_txtPatBaseFChtName").val()) + xstr(
|
|
|
|
|
pqhtml("#NTUHWeb1_txtPatBaseGChtName").val()
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
r["EngName"] = (
|
|
|
|
|
xstr(pqhtml("#NTUHWeb1_txtPatBaseFEngName").val())
|
|
|
|
|
+ " "
|
|
|
|
|
+ xstr(pqhtml("#NTUHWeb1_txtPatBaseGEngName").val())
|
|
|
|
|
+ " "
|
|
|
|
|
+ xstr(pqhtml("#NTUHWeb1_txtPatBaseLEngName").val())
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
r["Sex"] = pqhtml("#NTUHWeb1_drpPatBaseSexCode option:selected").text()
|
|
|
|
|
|
|
|
|
|
r["Birth"] = datetime.date(
|
|
|
|
|
int(pqhtml("#NTUHWeb1_txtPatBaseBirthYear").val()),
|
|
|
|
|
int(pqhtml("#NTUHWeb1_txtPatBaseBirthMonth").val()),
|
|
|
|
|
int(pqhtml("#NTUHWeb1_txtPatBaseBirthDay").val()),
|
|
|
|
|
).isoformat()
|
|
|
|
|
|
|
|
|
|
r["BirthCity"] = pqhtml("#NTUHWeb1_drpPatBaseBirthCity option:selected").text()
|
|
|
|
|
r["Nation"] = pqhtml("#NTUHWeb1_drpPatBaseNation option:selected").text()
|
|
|
|
|
|
|
|
|
|
r["AddressControl1"] = (
|
|
|
|
|
pqhtml("#NTUHWeb1_AddressControl1_ddlZipCity option:selected").text()
|
|
|
|
|
+ pqhtml("#NTUHWeb1_AddressControl1_ddlZipArea option:selected").text()
|
|
|
|
|
+ xstr(pqhtml("#NTUHWeb1_AddressControl1_txtZipCode").val())
|
|
|
|
|
+ xstr(pqhtml("#NTUHWeb1_AddressControl1_txtAddressRoad").val())
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
r["AddressControl2"] = (
|
|
|
|
|
pqhtml("#NTUHWeb1_AddressControl2_ddlZipCity option:selected").text()
|
|
|
|
|
+ pqhtml("#NTUHWeb1_AddressControl2_ddlZipArea option:selected").text()
|
|
|
|
|
+ xstr(pqhtml("#NTUHWeb1_AddressControl2_txtZipCode").val())
|
|
|
|
|
+ xstr(pqhtml("#NTUHWeb1_AddressControl2_txtAddressRoad").val())
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
r["ContTel"] = xstr(pqhtml("#NTUHWeb1_txtPatBaseContTelAreaCode").val()) + xstr(
|
|
|
|
|
pqhtml("#NTUHWeb1_txtPatBaseContTelNo").val()
|
|
|
|
|
)
|
|
|
|
|
r["Mobile"] = pqhtml("#NTUHWeb1_txtPatBaseMobile").val()
|
|
|
|
|
|
|
|
|
|
r["Contacter"] = xstr(pqhtml("#NTUHWeb1_txtPatBaseContacterFname").val()) + xstr(
|
|
|
|
|
pqhtml("#NTUHWeb1_txtPatBaseContacterGname").val()
|
|
|
|
|
)
|
|
|
|
|
r["ContacterRelation"] = pqhtml(
|
|
|
|
|
"#NTUHWeb1_drpPatBaseContacterRelation option:selected"
|
|
|
|
|
).text()
|
|
|
|
|
r["ContacterTel"] = xstr(
|
|
|
|
|
pqhtml("#NTUHWeb1_txtPatBaseContacterTelArea").val()
|
|
|
|
|
) + xstr(pqhtml("#NTUHWeb1_txtPatBaseContacterTel").val())
|
|
|
|
|
r["ContacterMobile"] = pqhtml("#NTUHWeb1_txtPatBaseContacterMobile").val()
|
|
|
|
|
r["AddressControl3"] = (
|
|
|
|
|
pqhtml("#NTUHWeb1_AddressControl3_ddlZipCity option:selected").text()
|
|
|
|
|
+ pqhtml("#NTUHWeb1_AddressControl3_ddlZipArea option:selected").text()
|
|
|
|
|
+ xstr(pqhtml("#NTUHWeb1_AddressControl3_txtZipCode").val())
|
|
|
|
|
+ xstr(pqhtml("#NTUHWeb1_AddressControl3_txtAddressRoad").val())
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
# print dir(pqhtml('#NTUHWeb1_drpPatBaseSexCode'))
|
|
|
|
|
# print type(pqhtml('#NTUHWeb1_drpPatBaseSexCode'))
|
|
|
|
|
|
|
|
|
|
return r
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def PACSImageShowList(PersonID, SESSION=None):
|
|
|
|
|
"""
|
|
|
|
|
Show list of PACS Image
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
if SESSION is None:
|
|
|
|
|
SESSION = Login()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# url = "http://ihisaw.ntuh.gov.tw/WebApplication/OtherIndependentProj/PatientBasicInfoEdit/PACSImageShowList.aspx?SESSION=%s&PatClass=I&AccountIDSE=10T01921636&PersonID=%s&Hosp=T0&Seed=20100915175850&EMRPop=Y" % (SESSION,PersonID)
|
|
|
|
|
url = (
|
|
|
|
|
"http://ihisaw.ntuh.gov.tw/WebApplication/OtherIndependentProj/PatientBasicInfoEdit/PACSImageShowList.aspx?SESSION=%s&PatClass=I&PersonID=%s&Hosp=T0&EMRPop=Y"
|
|
|
|
|
% (SESSION, PersonID)
|
|
|
|
|
)
|
|
|
|
|
# print url
|
|
|
|
|
|
|
|
|
|
driver.get(url)
|
|
|
|
|
html = driver.page_source
|
|
|
|
|
pqhtml = pyquery.PyQuery(html)
|
|
|
|
|
|
|
|
|
|
pattern = "(BloodCallRecordDataGrid_ctl.*)_PatChartNo"
|
|
|
|
|
matches = re.findall(pattern, html)
|
|
|
|
|
|
|
|
|
|
results = []
|
|
|
|
|
for match in matches:
|
|
|
|
|
# print match
|
|
|
|
|
# print pqhtml('#%s_PatChartNo'%match).text()
|
|
|
|
|
r = {}
|
|
|
|
|
r["PatChartNo"] = remove_space(pqhtml("#%s_PatChartNo" % match).text())
|
|
|
|
|
r["RequestSheetNo"] = remove_space(pqhtml("#%s_RequestSheetNo" % match).text())
|
|
|
|
|
r["ExamDate"] = remove_space(pqhtml("#%s_ExamDate" % match).text())
|
|
|
|
|
r["LinkOrderName"] = remove_space(pqhtml("#%s_LinkOrderNameNew" % match).text())
|
|
|
|
|
r["Modality"] = remove_space(pqhtml("#%s_Modality" % match).text())
|
|
|
|
|
r["VerifiedStateString"] = remove_space(
|
|
|
|
|
pqhtml("#%s_VerifiedStateString" % match).text()
|
|
|
|
|
)
|
|
|
|
|
results.append(r)
|
|
|
|
|
|
|
|
|
|
return results
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 4th 報告
|
|
|
|
|
def ElectronicMedicalReportViewer(ID, startswith='', excluded=[], SESSION=None):
|
|
|
|
|
if not SESSION:
|
|
|
|
|
SESSION = Login()
|
|
|
|
|
|
|
|
|
|
# url = 'http://ihisaw.ntuh.gov.tw/WebApplication/ElectronicMedicalReportViewer/MobileMasterPage.aspx'
|
|
|
|
|
url = (
|
|
|
|
|
"http://ihisaw.ntuh.gov.tw/WebApplication/ElectronicMedicalReportViewer/MobileMasterPage.aspx?SESSION=%s"
|
|
|
|
|
% SESSION
|
|
|
|
|
)
|
|
|
|
|
driver.get(url)
|
|
|
|
|
elem = driver.find_element(By.ID, "txbIDInput")
|
|
|
|
|
elem.send_keys(ID)
|
|
|
|
|
elem = driver.find_element(By.ID, "btnQueryAction")
|
|
|
|
|
elem.click()
|
|
|
|
|
|
|
|
|
|
for elem in driver.find_elements_by_class_name("groupHeader"):
|
|
|
|
|
# print dir(elem)
|
|
|
|
|
if "groupHeader-close" not in elem.get_attribute("class"):
|
|
|
|
|
elem.click()
|
|
|
|
|
|
|
|
|
|
body = driver.page_source
|
|
|
|
|
|
|
|
|
|
d = pyquery.PyQuery(body)
|
|
|
|
|
|
|
|
|
|
report = []
|
|
|
|
|
|
|
|
|
|
for ri in d(".reportitem").remove_namespaces():
|
|
|
|
|
|
|
|
|
|
# remove_namespaces is required for pyquery to parse tr
|
|
|
|
|
# ri = etree.tostring(ri).replace('xmlns="http://www.w3.org/1999/xhtml"', '')
|
|
|
|
|
|
|
|
|
|
# print(dir(ri))
|
|
|
|
|
# print(ri.attrib['param'])
|
|
|
|
|
# exit()
|
|
|
|
|
|
|
|
|
|
pqri = pyquery.PyQuery(ri)
|
|
|
|
|
|
|
|
|
|
r = {}
|
|
|
|
|
|
|
|
|
|
r['param'] = ri.attrib['param']
|
|
|
|
|
r["報告類別"] = pqri("td")[0].text.strip()
|
|
|
|
|
r["檢查日期"] = pqri("td")[1].text.strip()
|
|
|
|
|
r["報告日期"] = pqri("td")[2].text.strip()
|
|
|
|
|
|
|
|
|
|
if startswith and not r['param'].startswith(startswith):
|
|
|
|
|
continue
|
|
|
|
|
|
|
|
|
|
if r['param'] in excluded:
|
|
|
|
|
continue
|
|
|
|
|
|
|
|
|
|
if r["檢查日期"] == '*' or r["報告日期"] == '*':
|
|
|
|
|
continue
|
|
|
|
|
|
|
|
|
|
id = pqri(".linkrptbt").attr.id
|
|
|
|
|
# print id
|
|
|
|
|
elem = driver.find_element(By.ID, id)
|
|
|
|
|
# print id
|
|
|
|
|
elem.click()
|
|
|
|
|
|
|
|
|
|
ifrmURL = pyquery.PyQuery(driver.page_source)("#Reportifrm").attr.src
|
|
|
|
|
|
|
|
|
|
# print ifrmURL
|
|
|
|
|
|
|
|
|
|
parse = parse_qs(urlparse(ifrmURL).query)
|
|
|
|
|
|
|
|
|
|
r["ChartNo"] = parse["ChartNo"][0]
|
|
|
|
|
r["ReportKey"] = parse["ReportKey"][0]
|
|
|
|
|
r["ReportCode"] = parse["ReportCode"][0]
|
|
|
|
|
r["PersonID"] = parse["PersonID"][0]
|
|
|
|
|
|
|
|
|
|
driver.switch_to_frame(driver.find_element(By.ID, "Reportifrm"))
|
|
|
|
|
html = driver.page_source
|
|
|
|
|
driver.switch_to_default_content()
|
|
|
|
|
|
|
|
|
|
r["url"] = ifrmURL
|
|
|
|
|
r["html"] = html
|
|
|
|
|
# print html
|
|
|
|
|
|
|
|
|
|
elem = driver.find_element(By.ID, "backToHome")
|
|
|
|
|
elem.click()
|
|
|
|
|
|
|
|
|
|
# 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)
|
|
|
|
|
|
|
|
|
|
# break
|
|
|
|
|
|
|
|
|
|
return report
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def SimpleInfoShowUsingPlaceHolder(form_name):
|
|
|
|
|
|
|
|
|
|
# print driver.window_handles
|
|
|
|
|
|
|
|
|
|
# driver.save_screenshot('screenshot1.png')
|
|
|
|
|
|
|
|
|
|
data = {}
|
|
|
|
|
|
|
|
|
|
form = driver.find_element_by_name(form_name)
|
|
|
|
|
for input in form.find_elements_by_css_selector("input"):
|
|
|
|
|
data[input.get_attribute("name")] = input.get_attribute("value")
|
|
|
|
|
|
|
|
|
|
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]
|
|
|
|
|
|
|
|
|
|
old_window = driver.window_handles[0]
|
|
|
|
|
new_window = driver.window_handles[-1]
|
|
|
|
|
# logging.info((len(driver.window_handles), old_window, new_window))
|
|
|
|
|
driver.switch_to.window(new_window)
|
|
|
|
|
# driver.save_screenshot('screenshot2.png')
|
|
|
|
|
|
|
|
|
|
data["html"] = driver.page_source
|
|
|
|
|
data["url"] = driver.current_url
|
|
|
|
|
driver.close()
|
|
|
|
|
driver.switch_to.window(old_window)
|
|
|
|
|
# driver.save_screenshot('screenshot3.png')
|
|
|
|
|
|
|
|
|
|
driver.back()
|
|
|
|
|
# driver.save_screenshot('screenshot4.png')
|
|
|
|
|
|
|
|
|
|
# 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
|
|
|
|
|
)
|
|
|
|
|
# print url
|
|
|
|
|
driver.get(url)
|
|
|
|
|
|
|
|
|
|
elem = driver.find_element_by_css_selector("input.textBoxShort:nth-child(4)")
|
|
|
|
|
elem.send_keys(Chart)
|
|
|
|
|
elem = driver.find_element_by_css_selector(
|
|
|
|
|
"#NTUHWeb1_PatientBasicInfoQueryByIDAndName1 > input:nth-child(13)"
|
|
|
|
|
)
|
|
|
|
|
elem.click()
|
|
|
|
|
|
|
|
|
|
body = driver.page_source
|
|
|
|
|
# print 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)
|
|
|
|
|
m = r.search(body)
|
|
|
|
|
if m:
|
|
|
|
|
result["Description"] = m.group(0)
|
|
|
|
|
# exit()
|
|
|
|
|
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'])
|
|
|
|
|
matches = re.findall(r"(..../../..) 已死亡", d[0]["extra"])
|
|
|
|
|
if matches:
|
|
|
|
|
d[0]["dead"] = matches[0].replace("/", "-")
|
|
|
|
|
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:
|
|
|
|
|
elem = driver.find_element(By.ID, pqtr("input")[0].attrib["id"])
|
|
|
|
|
elem.click()
|
|
|
|
|
r.update(SimpleInfoShowUsingPlaceHolder("dischargenotelist"))
|
|
|
|
|
|
|
|
|
|
r["InDate"] = r["InDate"].replace("/", "-")
|
|
|
|
|
if r["OutDate"]:
|
|
|
|
|
r["OutDate"] = r["OutDate"].replace("/", "-")
|
|
|
|
|
|
|
|
|
|
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:
|
|
|
|
|
elem = driver.find_element(By.ID, pqtr("input")[0].attrib["id"])
|
|
|
|
|
elem.click()
|
|
|
|
|
r.update(SimpleInfoShowUsingPlaceHolder("emerrecordlist"))
|
|
|
|
|
|
|
|
|
|
r["ComeClinicDate"] = r["ComeClinicDate"].replace("/", "-")
|
|
|
|
|
if r["DischargeDate"]:
|
|
|
|
|
r["DischargeDate"] = r["DischargeDate"].replace("/", "-")
|
|
|
|
|
|
|
|
|
|
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:
|
|
|
|
|
elem = driver.find_element(By.ID, pqtr("input")[0].attrib["id"])
|
|
|
|
|
elem.click()
|
|
|
|
|
logging.info(r)
|
|
|
|
|
r.update(SimpleInfoShowUsingPlaceHolder("dischargenotelist"))
|
|
|
|
|
|
|
|
|
|
r["ComeClinicDate"] = r["ComeClinicDate"].replace("/", "-")
|
|
|
|
|
|
|
|
|
|
OutPat.append(r)
|
|
|
|
|
result["OutPat"] = OutPat
|
|
|
|
|
|
|
|
|
|
return result
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# import pprint
|
|
|
|
|
|
|
|
|
|
# class MyPrettyPrinter(pprint.PrettyPrinter):
|
|
|
|
|
# def format(self, object, context, maxlevels, level):
|
|
|
|
|
# if isinstance(object, unicode):
|
|
|
|
|
# return (object.encode('utf8'), True, False)
|
|
|
|
|
# return pprint.PrettyPrinter.format(self, object, context, maxlevels, level)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def SimpleQueryOpSchedule(DrCode, StartDate, EndDate, SESSION=None, NoCheck=[]):
|
|
|
|
|
if not SESSION:
|
|
|
|
|
SESSION = Login()
|
|
|
|
|
|
|
|
|
|
today_year = datetime.date.today().year
|
|
|
|
|
|
|
|
|
|
url = (
|
|
|
|
|
"http://ihisaw.ntuh.gov.tw/WebApplication/InPatient/OPManagement/SimpleQueryOpSchedule.aspx?SESSION=%s"
|
|
|
|
|
% SESSION
|
|
|
|
|
)
|
|
|
|
|
# url = "http://www.hinet.net/"
|
|
|
|
|
|
|
|
|
|
# print url
|
|
|
|
|
|
|
|
|
|
driver.get(url)
|
|
|
|
|
|
|
|
|
|
elem = driver.find_element_by_css_selector(
|
|
|
|
|
"#NTUHWeb1_QueryOPPatListCommon1_txbStartDate"
|
|
|
|
|
)
|
|
|
|
|
elem.clear()
|
|
|
|
|
elem.send_keys(str(StartDate))
|
|
|
|
|
elem = driver.find_element_by_css_selector(
|
|
|
|
|
"#NTUHWeb1_QueryOPPatListCommon1_txbEndDate"
|
|
|
|
|
)
|
|
|
|
|
elem.clear()
|
|
|
|
|
elem.send_keys(str(EndDate))
|
|
|
|
|
# put here to delay javascript? seems little effect
|
|
|
|
|
elem = driver.find_element_by_css_selector(
|
|
|
|
|
"#NTUHWeb1_QueryOPPatListCommon1_QueryDrIDInfoByDrName1_EmpNoQueryInput"
|
|
|
|
|
)
|
|
|
|
|
elem.clear()
|
|
|
|
|
elem.send_keys(DrCode)
|
|
|
|
|
|
|
|
|
|
elem = driver.find_element_by_css_selector(
|
|
|
|
|
"#NTUHWeb1_QueryOPPatListCommon1_QueryByMainDrCode"
|
|
|
|
|
)
|
|
|
|
|
try:
|
|
|
|
|
# driver.save_screenshot('/tmp/screenshot1.png')
|
|
|
|
|
# time.sleep(1)
|
|
|
|
|
elem.click()
|
|
|
|
|
except Exception as e:
|
|
|
|
|
# driver.save_screenshot('/tmp/screenshot2.png')
|
|
|
|
|
PrintException()
|
|
|
|
|
# time.sleep(1)
|
|
|
|
|
# driver.save_screenshot('/tmp/screenshot3.png')
|
|
|
|
|
# exit()
|
|
|
|
|
# return results
|
|
|
|
|
|
|
|
|
|
logging.info(elem)
|
|
|
|
|
|
|
|
|
|
body = driver.page_source
|
|
|
|
|
|
|
|
|
|
# print(body)
|
|
|
|
|
# exit()
|
|
|
|
|
|
|
|
|
|
pqhtml = pyquery.PyQuery(body)
|
|
|
|
|
results = []
|
|
|
|
|
|
|
|
|
|
for tr in pqhtml(
|
|
|
|
|
"#NTUHWeb1_QueryOPPatListCommon1_OPScheduleShowDataGrid1_dgRecordData"
|
|
|
|
|
)("tr")[1:]:
|
|
|
|
|
# print (dir(tr))
|
|
|
|
|
# print (type(tr))
|
|
|
|
|
# import lxml
|
|
|
|
|
# print(lxml.etree.tostring(tr))
|
|
|
|
|
# exit()
|
|
|
|
|
r = {}
|
|
|
|
|
pqtr = pyquery.PyQuery(tr)
|
|
|
|
|
children = pqtr("span") + pqtr("a")
|
|
|
|
|
for child in children:
|
|
|
|
|
# print (dir(child))
|
|
|
|
|
# print (child.text_content().strip())
|
|
|
|
|
# exit()
|
|
|
|
|
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"]
|
|
|
|
|
# print(r)
|
|
|
|
|
# MyPrettyPrinter().pprint(r)
|
|
|
|
|
# r['Anes'] = r['lbtPrintTitle']
|
|
|
|
|
r["Anes"] = r["lbtPreAnesFormTitle"]
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
# logging.info(r)
|
|
|
|
|
# if False:
|
|
|
|
|
# why do we need this?
|
|
|
|
|
if r["CompleteStatueName"] != "完成" and id not in NoCheck:
|
|
|
|
|
# print "Investigate %s" % id
|
|
|
|
|
r["lbnSelect"] = pqtr("a")[0].attrib["id"]
|
|
|
|
|
r["javascript"] = pqtr("a")[0].attrib["href"].split(":")[1]
|
|
|
|
|
# print r['javascript']
|
|
|
|
|
try:
|
|
|
|
|
# time.sleep(10)
|
|
|
|
|
elem = driver.find_element(By.ID, r["lbnSelect"])
|
|
|
|
|
# driver.save_screenshot('/tmp/screenshot1.png')
|
|
|
|
|
elem.click()
|
|
|
|
|
except Exception as e:
|
|
|
|
|
# driver.save_screenshot('/tmp/screenshot2.png')
|
|
|
|
|
# PrintException()
|
|
|
|
|
logging.exception(e)
|
|
|
|
|
driver.save_screenshot("screenshot.png")
|
|
|
|
|
time.sleep(1)
|
|
|
|
|
# driver.save_screenshot('/tmp/screenshot3.png')
|
|
|
|
|
# exit()
|
|
|
|
|
# results.append(r)
|
|
|
|
|
# continue
|
|
|
|
|
|
|
|
|
|
pqhtml2 = pyquery.PyQuery(driver.page_source)
|
|
|
|
|
r["Remark"] = pqhtml2("#NTUHWeb1_QueryOpSchedule1_txbRemark").attr["value"]
|
|
|
|
|
r["MainOpMode"] = pqhtml2(
|
|
|
|
|
"#NTUHWeb1_QueryOpSchedule1_TextboxPrepareOPMode"
|
|
|
|
|
).attr["value"]
|
|
|
|
|
driver.back()
|
|
|
|
|
# except Exception,e:
|
|
|
|
|
# print str(e)
|
|
|
|
|
# exit()
|
|
|
|
|
|
|
|
|
|
results.append(r)
|
|
|
|
|
|
|
|
|
|
return results
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def SimpleQueryOpScheduleByChartNo(ChartNo, SESSION=None, NoCheck=[]):
|
|
|
|
|
if not SESSION:
|
|
|
|
|
SESSION = Login()
|
|
|
|
|
|
|
|
|
|
today_year = datetime.date.today().year
|
|
|
|
|
|
|
|
|
|
url = (
|
|
|
|
|
"http://ihisaw.ntuh.gov.tw/WebApplication/InPatient/OPManagement/SimpleQueryOpSchedule.aspx?SESSION=%s"
|
|
|
|
|
% SESSION
|
|
|
|
|
)
|
|
|
|
|
driver.get(url)
|
|
|
|
|
|
|
|
|
|
elem = driver.find_element_by_css_selector(
|
|
|
|
|
"#NTUHWeb1_QueryOPPatListCommon1_QueryPersonIDByChartNo1_txbChartNoInput"
|
|
|
|
|
)
|
|
|
|
|
elem.send_keys(ChartNo)
|
|
|
|
|
elem = driver.find_element_by_css_selector(
|
|
|
|
|
"#NTUHWeb1_QueryOPPatListCommon1_QueryPersonIDByChartNo1_btnQuery"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
elem.click()
|
|
|
|
|
except Exception as e:
|
|
|
|
|
PrintException()
|
|
|
|
|
|
|
|
|
|
body = driver.page_source
|
|
|
|
|
|
|
|
|
|
pqhtml = pyquery.PyQuery(body)
|
|
|
|
|
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:
|
|
|
|
|
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["lbtPreAnesFormTitle"]
|
|
|
|
|
r["StartTime"] = r["EstStartTimeShortString"]
|
|
|
|
|
r["SpendTime"] = r["EstSpendTime"]
|
|
|
|
|
|
|
|
|
|
id = "%s-%s-%s-%s" % (
|
|
|
|
|
r["OPDateString"],
|
|
|
|
|
r["OpRoomNo"],
|
|
|
|
|
r["OpSeqNo"],
|
|
|
|
|
r["PatChartNo"],
|
|
|
|
|
)
|
|
|
|
|
if r["CompleteStatueName"] != "完成" and id not in NoCheck:
|
|
|
|
|
r["lbnSelect"] = pqtr("a")[0].attrib["id"]
|
|
|
|
|
r["javascript"] = pqtr("a")[0].attrib["href"].split(":")[1]
|
|
|
|
|
try:
|
|
|
|
|
elem = driver.find_element(By.ID, r["lbnSelect"])
|
|
|
|
|
elem.click()
|
|
|
|
|
except Exception as e:
|
|
|
|
|
PrintException()
|
|
|
|
|
time.sleep(1)
|
|
|
|
|
|
|
|
|
|
pqhtml2 = pyquery.PyQuery(driver.page_source)
|
|
|
|
|
r["Remark"] = pqhtml2("#NTUHWeb1_QueryOpSchedule1_txbRemark").attr["value"]
|
|
|
|
|
r["MainOpMode"] = pqhtml2(
|
|
|
|
|
"#NTUHWeb1_QueryOpSchedule1_TextboxPrepareOPMode"
|
|
|
|
|
).attr["value"]
|
|
|
|
|
driver.back()
|
|
|
|
|
|
|
|
|
|
results.append(r)
|
|
|
|
|
|
|
|
|
|
return results
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# For resident
|
|
|
|
|
def SimpleQueryOpScheduleDRRS(DrCode, StartDate, EndDate, SESSION=None, NoCheck=[]):
|
|
|
|
|
if not SESSION:
|
|
|
|
|
SESSION = Login()
|
|
|
|
|
|
|
|
|
|
today_year = datetime.date.today().year
|
|
|
|
|
|
|
|
|
|
url = (
|
|
|
|
|
"http://ihisaw.ntuh.gov.tw/WebApplication/InPatient/OPManagement/SimpleQueryOpSchedule.aspx?SESSION=%s"
|
|
|
|
|
% SESSION
|
|
|
|
|
)
|
|
|
|
|
# url = "http://www.hinet.net/"
|
|
|
|
|
|
|
|
|
|
# print url
|
|
|
|
|
|
|
|
|
|
driver.get(url)
|
|
|
|
|
|
|
|
|
|
elem = driver.find_element_by_css_selector(
|
|
|
|
|
"#NTUHWeb1_QueryOPPatListCommon1_txbStartDate"
|
|
|
|
|
)
|
|
|
|
|
elem.clear()
|
|
|
|
|
elem.send_keys(str(StartDate))
|
|
|
|
|
elem = driver.find_element_by_css_selector(
|
|
|
|
|
"#NTUHWeb1_QueryOPPatListCommon1_txbEndDate"
|
|
|
|
|
)
|
|
|
|
|
elem.clear()
|
|
|
|
|
elem.send_keys(str(EndDate))
|
|
|
|
|
# put here to delay javascript? seems little effect
|
|
|
|
|
elem = driver.find_element_by_css_selector(
|
|
|
|
|
"#NTUHWeb1_QueryOPPatListCommon1_QueryDrIDInfoByDrName1_EmpNoQueryInput"
|
|
|
|
|
)
|
|
|
|
|
elem.clear()
|
|
|
|
|
elem.send_keys(DrCode)
|
|
|
|
|
|
|
|
|
|
elem = driver.find_element_by_css_selector(
|
|
|
|
|
"#NTUHWeb1_QueryOPPatListCommon1_QueryFinishRecordByDRRS"
|
|
|
|
|
)
|
|
|
|
|
try:
|
|
|
|
|
# driver.save_screenshot('/tmp/screenshot1.png')
|
|
|
|
|
# time.sleep(1)
|
|
|
|
|
elem.click()
|
|
|
|
|
except Exception as e:
|
|
|
|
|
# driver.save_screenshot('/tmp/screenshot2.png')
|
|
|
|
|
PrintException()
|
|
|
|
|
# time.sleep(1)
|
|
|
|
|
# driver.save_screenshot('/tmp/screenshot3.png')
|
|
|
|
|
# exit()
|
|
|
|
|
# return results
|
|
|
|
|
|
|
|
|
|
body = driver.page_source
|
|
|
|
|
|
|
|
|
|
# print(body)
|
|
|
|
|
# exit()
|
|
|
|
|
|
|
|
|
|
pqhtml = pyquery.PyQuery(body)
|
|
|
|
|
results = []
|
|
|
|
|
|
|
|
|
|
# return len(
|
|
|
|
|
# pqhtml("#NTUHWeb1_QueryOPPatListCommon1_OPScheduleShowDataGrid1_dgRecordData")(
|
|
|
|
|
# "tr"
|
|
|
|
|
# )[1:]
|
|
|
|
|
# )
|
|
|
|
|
|
|
|
|
|
for tr in pqhtml(
|
|
|
|
|
"#NTUHWeb1_QueryOPPatListCommon1_OPScheduleShowDataGrid1_dgRecordData"
|
|
|
|
|
)("tr")[1:]:
|
|
|
|
|
# print (dir(tr))
|
|
|
|
|
# print (type(tr))
|
|
|
|
|
# import lxml
|
|
|
|
|
# print(lxml.etree.tostring(tr))
|
|
|
|
|
# exit()
|
|
|
|
|
r = {}
|
|
|
|
|
pqtr = pyquery.PyQuery(tr)
|
|
|
|
|
children = pqtr("span") + pqtr("a")
|
|
|
|
|
for child in children:
|
|
|
|
|
# print (dir(child))
|
|
|
|
|
# print (child.text_content().strip())
|
|
|
|
|
# exit()
|
|
|
|
|
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"])
|
|
|
|
|
|
|
|
|
|
# print(r.keys())
|
|
|
|
|
# print(r['lbtPreAnesForm'])
|
|
|
|
|
|
|
|
|
|
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["Anes"] = r["lbtPreAnesForm"]
|
|
|
|
|
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"]
|
|
|
|
|
r["javascript"] = pqtr("a")[0].attrib["href"].split(":")[1]
|
|
|
|
|
# print r['javascript']
|
|
|
|
|
try:
|
|
|
|
|
# time.sleep(10)
|
|
|
|
|
elem = driver.find_element(By.ID, r["lbnSelect"])
|
|
|
|
|
# driver.save_screenshot('/tmp/screenshot1.png')
|
|
|
|
|
elem.click()
|
|
|
|
|
except Exception as e:
|
|
|
|
|
# driver.save_screenshot('/tmp/screenshot2.png')
|
|
|
|
|
PrintException()
|
|
|
|
|
time.sleep(1)
|
|
|
|
|
# driver.save_screenshot('/tmp/screenshot3.png')
|
|
|
|
|
# exit()
|
|
|
|
|
# results.append(r)
|
|
|
|
|
# continue
|
|
|
|
|
|
|
|
|
|
pqhtml2 = pyquery.PyQuery(driver.page_source)
|
|
|
|
|
r["Remark"] = pqhtml2("#NTUHWeb1_QueryOpSchedule1_txbRemark").attr["value"]
|
|
|
|
|
r["MainOpMode"] = pqhtml2(
|
|
|
|
|
"#NTUHWeb1_QueryOpSchedule1_TextboxPrepareOPMode"
|
|
|
|
|
).attr["value"]
|
|
|
|
|
driver.back()
|
|
|
|
|
# except Exception,e:
|
|
|
|
|
# print str(e)
|
|
|
|
|
# exit()
|
|
|
|
|
|
|
|
|
|
results.append(r)
|
|
|
|
|
|
|
|
|
|
return results
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 病歷號/身分證號
|
|
|
|
|
def ReportPathology(ID, SESSION=None):
|
|
|
|
|
if not SESSION:
|
|
|
|
|
SESSION = Login()
|
|
|
|
|
|
|
|
|
|
url = (
|
|
|
|
|
"http://ihisaw.ntuh.gov.tw/WebApplication/ElectronicMedicalReportViewer/MobileMasterPage.aspx?SESSION=%s"
|
|
|
|
|
% SESSION
|
|
|
|
|
)
|
|
|
|
|
driver.get(url)
|
|
|
|
|
|
|
|
|
|
elem = driver.find_element(By.ID, "txbIDInput")
|
|
|
|
|
elem.send_keys(str(ID))
|
|
|
|
|
elem = driver.find_element(By.ID, "btnQueryAction")
|
|
|
|
|
elem.click()
|
|
|
|
|
|
|
|
|
|
for elem in driver.find_elements_by_class_name("groupHeader"):
|
|
|
|
|
if "groupHeader-close" not in elem.get_attribute("class"):
|
|
|
|
|
elem.click()
|
|
|
|
|
|
|
|
|
|
body = driver.page_source
|
|
|
|
|
d = pyquery.PyQuery(body)
|
|
|
|
|
d1 = d('.groupHeader[reportgroup="病理"]').parents()
|
|
|
|
|
if len(d1) == 0:
|
|
|
|
|
return []
|
|
|
|
|
|
|
|
|
|
d2 = pyquery.PyQuery(d('.groupHeader[reportgroup="病理"]').parents()[-1])
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
logging.info(id)
|
|
|
|
|
elem = driver.find_element(By.ID, id)
|
|
|
|
|
elem.click()
|
|
|
|
|
|
|
|
|
|
ifrmURL = pyquery.PyQuery(driver.page_source)("#Reportifrm").attr.src
|
|
|
|
|
|
|
|
|
|
# parse = urlparse.parse_qs(urlparse.urlparse(ifrmURL).query)
|
|
|
|
|
parse = parse_qs(urlparse(ifrmURL).query)
|
|
|
|
|
|
|
|
|
|
logging.info(parse)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ChartNo = parse["ChartNo"][0]
|
|
|
|
|
ReportKey = parse["ReportKey"][0]
|
|
|
|
|
ReportCode = parse["ReportCode"][0]
|
|
|
|
|
PersonID = parse["PersonID"][0]
|
|
|
|
|
|
|
|
|
|
driver.switch_to_frame(driver.find_element(By.ID, "Reportifrm"))
|
|
|
|
|
html = driver.page_source
|
|
|
|
|
driver.switch_to_default_content()
|
|
|
|
|
|
|
|
|
|
elem = driver.find_element(By.ID, "backToHome")
|
|
|
|
|
elem.click()
|
|
|
|
|
|
|
|
|
|
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,
|
|
|
|
|
}
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
return report
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def QueryInPatientByDate(ID, begin, end, SESSION=None):
|
|
|
|
|
"""
|
|
|
|
|
病房作業
|
|
|
|
|
查詢條件輸入
|
|
|
|
|
依使用者
|
|
|
|
|
"""
|
|
|
|
|
if not SESSION:
|
|
|
|
|
SESSION = Login()
|
|
|
|
|
|
|
|
|
|
url = (
|
|
|
|
|
"http://ihisaw.ntuh.gov.tw/WebApplication/InPatient/Ward/OpenWard.aspx?SESSION=%s"
|
|
|
|
|
% SESSION
|
|
|
|
|
)
|
|
|
|
|
driver.get(url)
|
|
|
|
|
|
|
|
|
|
elem = driver.find_element_by_css_selector(
|
|
|
|
|
"#NTUHWeb1_QueryInPatientPersonAccountControl1_IDInputTextBox"
|
|
|
|
|
)
|
|
|
|
|
elem.clear()
|
|
|
|
|
elem.send_keys(ID)
|
|
|
|
|
|
|
|
|
|
elem = driver.find_element_by_css_selector(
|
|
|
|
|
"#NTUHWeb1_QueryInPatientPersonAccountControl1_DateTextBoxYearMonthDayInputUI1_YearInput"
|
|
|
|
|
)
|
|
|
|
|
elem.clear()
|
|
|
|
|
elem.send_keys(begin.year)
|
|
|
|
|
elem = driver.find_element_by_css_selector(
|
|
|
|
|
"#NTUHWeb1_QueryInPatientPersonAccountControl1_DateTextBoxYearMonthDayInputUI1_MonthInput"
|
|
|
|
|
)
|
|
|
|
|
elem.clear()
|
|
|
|
|
elem.send_keys(begin.month)
|
|
|
|
|
elem = driver.find_element_by_css_selector(
|
|
|
|
|
"#NTUHWeb1_QueryInPatientPersonAccountControl1_DateTextBoxYearMonthDayInputUI1_DayInput"
|
|
|
|
|
)
|
|
|
|
|
elem.clear()
|
|
|
|
|
elem.send_keys(begin.day)
|
|
|
|
|
|
|
|
|
|
elem = driver.find_element_by_css_selector(
|
|
|
|
|
"#NTUHWeb1_QueryInPatientPersonAccountControl1_DateTextBoxYearMonthDayInputUI2_YearInput"
|
|
|
|
|
)
|
|
|
|
|
elem.clear()
|
|
|
|
|
elem.send_keys(end.year)
|
|
|
|
|
elem = driver.find_element_by_css_selector(
|
|
|
|
|
"#NTUHWeb1_QueryInPatientPersonAccountControl1_DateTextBoxYearMonthDayInputUI2_MonthInput"
|
|
|
|
|
)
|
|
|
|
|
elem.clear()
|
|
|
|
|
elem.send_keys(end.month)
|
|
|
|
|
elem = driver.find_element_by_css_selector(
|
|
|
|
|
"#NTUHWeb1_QueryInPatientPersonAccountControl1_DateTextBoxYearMonthDayInputUI2_DayInput"
|
|
|
|
|
)
|
|
|
|
|
elem.clear()
|
|
|
|
|
elem.send_keys(end.day)
|
|
|
|
|
|
|
|
|
|
elem = driver.find_element_by_css_selector(
|
|
|
|
|
"#NTUHWeb1_QueryInPatientPersonAccountControl1_EmpNoCareQueryButton"
|
|
|
|
|
)
|
|
|
|
|
elem.click()
|
|
|
|
|
# driver.save_screenshot('/tmp/screenshot1.png')
|
|
|
|
|
elem = driver.find_element_by_css_selector(
|
|
|
|
|
"#NTUHWeb1_QueryInPatientPersonAccountControl1_CheckBoxShowDrMainColumn"
|
|
|
|
|
)
|
|
|
|
|
# if elem.get_attribute('checked'):
|
|
|
|
|
# elem.click()
|
|
|
|
|
# time.sleep(1)
|
|
|
|
|
|
|
|
|
|
while elem.get_attribute("checked"):
|
|
|
|
|
elem.click()
|
|
|
|
|
time.sleep(1)
|
|
|
|
|
elem = driver.find_element_by_css_selector(
|
|
|
|
|
"#NTUHWeb1_QueryInPatientPersonAccountControl1_CheckBoxShowDrMainColumn"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
# driver.save_screenshot('/tmp/screenshot2.png')
|
|
|
|
|
# exit()
|
|
|
|
|
# browser.snapshot().save("webpage3.png")
|
|
|
|
|
|
|
|
|
|
html = driver.page_source
|
|
|
|
|
|
|
|
|
|
# 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"])
|
|
|
|
|
|
|
|
|
|
# print Pat
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
)
|
|
|
|
|
|
2024-12-12 09:01:35 +00:00
|
|
|
|
def QueryInPatientByWard(ward, SESSION=None):
|
|
|
|
|
"""
|
|
|
|
|
病房作業
|
|
|
|
|
查詢條件輸入
|
|
|
|
|
病房查詢
|
|
|
|
|
"""
|
|
|
|
|
if not SESSION:
|
|
|
|
|
SESSION = Login()
|
|
|
|
|
|
|
|
|
|
url = (
|
|
|
|
|
"http://ihisaw.ntuh.gov.tw/WebApplication/InPatient/Ward/OpenWard.aspx?SESSION=%s"
|
|
|
|
|
% SESSION
|
|
|
|
|
)
|
|
|
|
|
driver.get(url)
|
|
|
|
|
|
|
|
|
|
elem = driver.find_element(By.CSS_SELECTOR,
|
|
|
|
|
"#NTUHWeb1_QueryInPatientPersonAccountControl1_DropListWard"
|
|
|
|
|
)
|
|
|
|
|
# print(elem.get_attribute('innerHTML'))
|
|
|
|
|
elem.send_keys(ward)
|
|
|
|
|
|
|
|
|
|
elem = driver.find_element(By.CSS_SELECTOR,
|
|
|
|
|
"#NTUHWeb1_QueryInPatientPersonAccountControl1_QueryAccountNoByWardInput"
|
|
|
|
|
)
|
|
|
|
|
elem.click()
|
|
|
|
|
|
|
|
|
|
elem = driver.find_element(By.CSS_SELECTOR,
|
|
|
|
|
"#NTUHWeb1_QueryInPatientPersonAccountControl1_CheckBoxShowDrMainColumn"
|
|
|
|
|
)
|
|
|
|
|
# if elem.get_attribute('checked'):
|
|
|
|
|
# elem.click()
|
|
|
|
|
# time.sleep(1)
|
|
|
|
|
|
|
|
|
|
while elem.get_attribute("checked"):
|
|
|
|
|
elem.click()
|
|
|
|
|
time.sleep(1)
|
|
|
|
|
elem = driver.find_element(By.CSS_SELECTOR,
|
|
|
|
|
"#NTUHWeb1_QueryInPatientPersonAccountControl1_CheckBoxShowDrMainColumn"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
# driver.save_screenshot('/tmp/screenshot2.png')
|
|
|
|
|
# exit()
|
|
|
|
|
# browser.snapshot().save("webpage3.png")
|
|
|
|
|
|
|
|
|
|
html = driver.page_source
|
|
|
|
|
|
|
|
|
|
# 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"])
|
|
|
|
|
|
|
|
|
|
# print Pat
|
|
|
|
|
|
|
|
|
|
PatientList.append(Pat)
|
|
|
|
|
|
|
|
|
|
return PatientList
|
|
|
|
|
|
|
|
|
|
|
2024-12-11 04:46:09 +00:00
|
|
|
|
|
|
|
|
|
def QueryDrIDInfoByID(ID, SESSION=None):
|
|
|
|
|
if not SESSION:
|
|
|
|
|
SESSION = Login()
|
|
|
|
|
|
|
|
|
|
url = (
|
|
|
|
|
"http://ihisaw.ntuh.gov.tw/WebApplication/InPatient/Ward/OpenWard.aspx?SESSION=%s&FromLogin=Y"
|
|
|
|
|
% SESSION
|
|
|
|
|
)
|
|
|
|
|
driver.get(url)
|
|
|
|
|
elem = driver.find_element_by_css_selector(
|
|
|
|
|
"#NTUHWeb1_QueryDrIDInfoByDrName1_EmpNoQueryInput"
|
|
|
|
|
)
|
|
|
|
|
elem.send_keys(ID)
|
|
|
|
|
elem = driver.find_element_by_css_selector(
|
|
|
|
|
"#NTUHWeb1_QueryDrIDInfoByDrName1_QueryByID"
|
|
|
|
|
)
|
|
|
|
|
elem.click()
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
element = WebDriverWait(driver, 10).until(
|
|
|
|
|
EC.presence_of_element_located(
|
|
|
|
|
(By.ID, "NTUHWeb1_QueryDrIDInfoByDrName1_EmpNoLabel")
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
finally:
|
|
|
|
|
time.sleep(1)
|
|
|
|
|
|
|
|
|
|
html = driver.page_source
|
|
|
|
|
d = pyquery.PyQuery(html)
|
|
|
|
|
string = d("#NTUHWeb1_QueryDrIDInfoByDrName1_EmpNoLabel").text().replace(" ", " ")
|
|
|
|
|
# pattern = ur'(\S+):(\S+)'
|
|
|
|
|
pattern = r"(\S+):(\S+)"
|
|
|
|
|
|
|
|
|
|
ret = {}
|
|
|
|
|
|
|
|
|
|
for m in re.findall(pattern, string):
|
|
|
|
|
# print m[0], m[1]
|
|
|
|
|
ret[m[0]] = m[1]
|
|
|
|
|
|
|
|
|
|
return ret
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def WardQueryUncompletedChart(SESSION=None, DEBUG=None):
|
|
|
|
|
if not SESSION:
|
|
|
|
|
SESSION = Login()
|
|
|
|
|
|
|
|
|
|
url = (
|
|
|
|
|
"http://ihisaw.ntuh.gov.tw/WebApplication/MedicalRecordManagement/WardQueryUncompletedChart.aspx?SESSION=%s"
|
|
|
|
|
% SESSION
|
|
|
|
|
)
|
|
|
|
|
driver.get(url)
|
|
|
|
|
elem = driver.find_element_by_css_selector("#NTUHWeb1_RBDEPT")
|
|
|
|
|
elem.click()
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
element = WebDriverWait(driver, 10).until(
|
|
|
|
|
EC.presence_of_element_located((By.ID, "NTUHWeb1_ddlDeptCode"))
|
|
|
|
|
)
|
|
|
|
|
finally:
|
|
|
|
|
time.sleep(1)
|
|
|
|
|
|
|
|
|
|
elem = driver.find_element_by_css_selector("#NTUHWeb1_ddlDeptCode")
|
|
|
|
|
select = Select(elem)
|
|
|
|
|
select.select_by_value("SURG")
|
|
|
|
|
elem = driver.find_element_by_css_selector("#NTUHWeb1_btn_QueryByDept")
|
|
|
|
|
elem.click()
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
element = WebDriverWait(driver, 20).until(
|
|
|
|
|
EC.presence_of_element_located((By.ID, "NTUHWeb1_DeptDataList"))
|
|
|
|
|
)
|
|
|
|
|
finally:
|
|
|
|
|
time.sleep(1)
|
|
|
|
|
|
|
|
|
|
html = driver.page_source
|
|
|
|
|
d = pyquery.PyQuery(html)
|
|
|
|
|
|
|
|
|
|
Dr = {}
|
|
|
|
|
|
|
|
|
|
for a in d("#Table1")("a"):
|
|
|
|
|
id = a.attrib["id"]
|
|
|
|
|
name = id.replace("DrID", "DrName")
|
|
|
|
|
name = d("#%s" % name).text()
|
|
|
|
|
|
|
|
|
|
Dr[id] = {"ID": a.text_content(), "name": name}
|
|
|
|
|
|
|
|
|
|
ret = []
|
|
|
|
|
|
|
|
|
|
for id in Dr:
|
|
|
|
|
|
|
|
|
|
# print id, "%s, %s"% (Dr[id]['ID'], Dr[id]['name'])
|
|
|
|
|
|
|
|
|
|
elem = driver.find_element(By.ID, id)
|
|
|
|
|
elem.click()
|
|
|
|
|
|
|
|
|
|
# time.sleep(10)
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
element = WebDriverWait(driver, 10).until(
|
|
|
|
|
EC.text_to_be_present_in_element_value(
|
|
|
|
|
(By.ID, "NTUHWeb1_txtDrName"), Dr[id]["name"]
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
except:
|
|
|
|
|
continue
|
|
|
|
|
finally:
|
|
|
|
|
time.sleep(1)
|
|
|
|
|
|
|
|
|
|
html = driver.page_source
|
|
|
|
|
d = pyquery.PyQuery(html)
|
|
|
|
|
|
|
|
|
|
RecordData = []
|
|
|
|
|
overdue = 0
|
|
|
|
|
DrType = None
|
|
|
|
|
for tr in d("#NTUHWeb1_dgRecordData")("tr")[1:]:
|
|
|
|
|
pqtr = pyquery.PyQuery(tr)
|
|
|
|
|
# print pqtr.text()
|
|
|
|
|
# print dir(pqtr)
|
|
|
|
|
td = pqtr("td")
|
|
|
|
|
# print tr.text_content(), dir(tr)
|
|
|
|
|
data = {}
|
|
|
|
|
data["sequence"] = td[0].text
|
|
|
|
|
data["MRN"] = td[1].text
|
|
|
|
|
data["AccountIDSE"] = td[2].text_content().strip()
|
|
|
|
|
data["unit"] = td[3].text
|
|
|
|
|
data["start"] = td[4].text
|
|
|
|
|
data["end"] = td[5].text
|
|
|
|
|
data["name"] = td[6].text
|
|
|
|
|
data["bed"] = td[7].text
|
|
|
|
|
data["Type"] = td[8].text_content().strip()
|
|
|
|
|
data["VS"] = td[9].text
|
|
|
|
|
data["R"] = td[10].text
|
|
|
|
|
data["note"] = td[11].text
|
|
|
|
|
data["overdue"] = td[12].text.replace(" ", "")
|
|
|
|
|
|
|
|
|
|
if Dr[id]["name"] == data["VS"]:
|
|
|
|
|
DrType = "VS"
|
|
|
|
|
elif DrType is None and Dr[id]["name"] == data["R"]:
|
|
|
|
|
DrType = "R"
|
|
|
|
|
|
|
|
|
|
if data["overdue"]:
|
|
|
|
|
overdue += 1
|
|
|
|
|
RecordData.append(data)
|
|
|
|
|
|
|
|
|
|
# print Dr[id]['ID'], Dr[id]['name'], DrType, overdue
|
|
|
|
|
|
|
|
|
|
if overdue:
|
|
|
|
|
ret.append(
|
|
|
|
|
{
|
|
|
|
|
"id": Dr[id]["ID"],
|
|
|
|
|
"name": Dr[id]["name"],
|
|
|
|
|
"type": DrType,
|
|
|
|
|
"overdue": RecordData,
|
|
|
|
|
}
|
|
|
|
|
)
|
|
|
|
|
if DEBUG and len(ret) > 2:
|
|
|
|
|
return ret
|
|
|
|
|
return ret
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def WardQueryUncompletedChartCost(SESSION=None, DEBUG=None):
|
|
|
|
|
ret = []
|
|
|
|
|
for a in WardQueryUncompletedChart(SESSION, DEBUG):
|
|
|
|
|
a.update(QueryDrIDInfoByID(a["id"], SESSION))
|
|
|
|
|
ret.append(a)
|
|
|
|
|
|
|
|
|
|
return ret
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def BriefHistoryLink(PersonID, SESSION=None):
|
|
|
|
|
"""
|
|
|
|
|
病患就診紀錄
|
|
|
|
|
健保卡
|
|
|
|
|
查詢病人過去報告及相關單純查詢資料
|
|
|
|
|
"""
|
|
|
|
|
if not SESSION:
|
|
|
|
|
SESSION = Login()
|
|
|
|
|
|
|
|
|
|
url = (
|
|
|
|
|
"http://ihisaw.ntuh.gov.tw/WebApplication/OtherIndependentProj/PatientBasicInfoEdit/ReportResultQuery.aspx?SESSION=%s&PersonID=%s"
|
|
|
|
|
% (SESSION, PersonID)
|
|
|
|
|
)
|
|
|
|
|
driver.get(url)
|
|
|
|
|
# elem = driver.find_element_by_css_selector("#BriefHistoryLink")
|
|
|
|
|
elem = driver.find_element(By.CSS_SELECTOR, "#BriefHistoryLink")
|
|
|
|
|
elem.click()
|
|
|
|
|
html = driver.page_source
|
|
|
|
|
|
|
|
|
|
pattern = "身高:(.*?)體重:(.*?)</td>"
|
|
|
|
|
m = re.search(pattern, html)
|
|
|
|
|
|
|
|
|
|
r = {}
|
|
|
|
|
r["Height"] = None
|
|
|
|
|
r["Weight"] = None
|
|
|
|
|
try:
|
|
|
|
|
r["Height"] = m.group(1).strip()
|
|
|
|
|
r["Weight"] = m.group(2).strip()
|
|
|
|
|
except:
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
return r
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
NotDrug = (None, "商品名", "特殊醫囑:", "用藥原因:", "處方", "重複原因:")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def SimpleInfoShowUsingPlaceHolderDrug(form_name, timeout=10):
|
|
|
|
|
|
|
|
|
|
# print driver.window_handles
|
|
|
|
|
|
|
|
|
|
# driver.save_screenshot('/tmp/screenshot1.png')
|
|
|
|
|
|
|
|
|
|
data = {}
|
|
|
|
|
|
|
|
|
|
form = driver.find_element_by_name(form_name)
|
|
|
|
|
for input in form.find_elements_by_css_selector("input"):
|
|
|
|
|
data[input.get_attribute("name")] = input.get_attribute("value")
|
|
|
|
|
|
|
|
|
|
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]
|
|
|
|
|
|
|
|
|
|
old_window = driver.window_handles[0]
|
|
|
|
|
new_window = driver.window_handles[-1]
|
|
|
|
|
driver.switch_to.window(new_window)
|
|
|
|
|
|
|
|
|
|
body = driver.page_source
|
|
|
|
|
pqhtml = pyquery.PyQuery(body)
|
|
|
|
|
|
|
|
|
|
# driver.save_screenshot('/tmp/screenshot2.png')
|
|
|
|
|
|
|
|
|
|
data["html"] = driver.page_source
|
|
|
|
|
data["url"] = driver.current_url
|
|
|
|
|
|
|
|
|
|
TreeViewItemList = []
|
|
|
|
|
|
|
|
|
|
for a in pqhtml("a"):
|
|
|
|
|
if "id" in a.attrib:
|
|
|
|
|
id = a.attrib["id"]
|
|
|
|
|
if id.startswith("TreeViewItemt"):
|
|
|
|
|
m = re.search("'TreeViewItem','s(.*)'", a.attrib["href"])
|
|
|
|
|
KeyCode = m.group(1)
|
|
|
|
|
KeyName = a.text
|
|
|
|
|
TreeViewItemList.append((id, KeyCode, KeyName))
|
|
|
|
|
|
|
|
|
|
ret = []
|
|
|
|
|
|
|
|
|
|
# driver.implicitly_wait(10)
|
|
|
|
|
for id, KeyCode, KeyName in TreeViewItemList:
|
|
|
|
|
|
|
|
|
|
elem = driver.find_element(By.ID, id)
|
|
|
|
|
|
|
|
|
|
# ignored_exceptions=(NoSuchElementException,StaleElementReferenceException,)
|
|
|
|
|
# elem = WebDriverWait(driver, 10 ,ignored_exceptions=ignored_exceptions).until(expected_conditions.presence_of_element_located((By.ID, id)))
|
|
|
|
|
|
|
|
|
|
# wait = WebDriverWait(driver, 10)
|
|
|
|
|
# elem = wait.until(EC.element_to_be_clickable((By.ID, id)))
|
|
|
|
|
|
|
|
|
|
elem.click()
|
|
|
|
|
|
|
|
|
|
elem = WebDriverWait(driver, 10).until(
|
|
|
|
|
expected_conditions.text_to_be_present_in_element(
|
|
|
|
|
(By.CSS_SELECTOR, "div.reportQuery"), KeyCode
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
# reportQuery = ''
|
|
|
|
|
# cycles = 0
|
|
|
|
|
|
|
|
|
|
# while KeyCode not in reportQuery:
|
|
|
|
|
# time.sleep(.1)
|
|
|
|
|
# body = driver.page_source
|
|
|
|
|
# pqItem = pyquery.PyQuery(body)
|
|
|
|
|
# reportQuery = unicode(pqItem('div.reportQuery'))
|
|
|
|
|
# cycles += 1
|
|
|
|
|
|
|
|
|
|
# old_page = driver.find_element_by_tag_name('html')
|
|
|
|
|
# print(old_page.id)
|
|
|
|
|
# WebDriverWait(driver, timeout).until(EC.staleness_of(old_page))
|
|
|
|
|
|
|
|
|
|
body = driver.page_source
|
|
|
|
|
pqItem = pyquery.PyQuery(body)
|
|
|
|
|
if six.PY2:
|
|
|
|
|
reportQuery = unicode(pqItem("div.reportQuery"))
|
|
|
|
|
TableDrugData = unicode(pqItem("#TableDrugData"))
|
|
|
|
|
else:
|
|
|
|
|
reportQuery = pqItem("div.reportQuery")
|
|
|
|
|
TableDrugData = pqItem("#TableDrugData")
|
|
|
|
|
|
|
|
|
|
Drug = []
|
|
|
|
|
|
|
|
|
|
if TableDrugData:
|
|
|
|
|
pqTableDrugData = pyquery.PyQuery(TableDrugData)
|
|
|
|
|
for tr in pqTableDrugData("tr"):
|
|
|
|
|
pqtr = pyquery.PyQuery(tr)
|
|
|
|
|
d = pqtr("td")[0].text
|
|
|
|
|
if d not in NotDrug:
|
|
|
|
|
# m = re.search("([\w.-]+) ", d)
|
|
|
|
|
# print(type(lxml.html.tostring(tr)))
|
|
|
|
|
Drug.append(lxml.html.tostring(tr).decode("utf-8"))
|
|
|
|
|
|
|
|
|
|
# print(id)
|
|
|
|
|
# print(KeyCode)
|
|
|
|
|
|
|
|
|
|
# print('*** %s ***'%KeyName)
|
|
|
|
|
# print('\n'.join(Drug))
|
|
|
|
|
|
|
|
|
|
# print(reportQuery)
|
|
|
|
|
# print(TableDrugData)
|
|
|
|
|
# print(len(TableDrugData))
|
|
|
|
|
|
|
|
|
|
ret.append(
|
|
|
|
|
{
|
|
|
|
|
"id": id,
|
|
|
|
|
"KeyCode": KeyCode,
|
|
|
|
|
"KeyName": KeyName,
|
|
|
|
|
"Drug": Drug,
|
|
|
|
|
# 'Drug': sorted(Drug),
|
|
|
|
|
}
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
driver.close()
|
|
|
|
|
driver.switch_to.window(old_window)
|
|
|
|
|
# driver.save_screenshot('/tmp/screenshot3.png')
|
|
|
|
|
|
|
|
|
|
driver.back()
|
|
|
|
|
|
|
|
|
|
return ret
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def ShowMedicalRecordDrug(Chart, 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
|
|
|
|
|
)
|
|
|
|
|
# print url
|
|
|
|
|
driver.get(url)
|
|
|
|
|
|
|
|
|
|
elem = driver.find_element_by_css_selector("input.textBoxShort:nth-child(4)")
|
|
|
|
|
elem.send_keys(Chart)
|
|
|
|
|
elem = driver.find_element_by_css_selector(
|
|
|
|
|
"#NTUHWeb1_PatientBasicInfoQueryByIDAndName1 > input:nth-child(13)"
|
|
|
|
|
)
|
|
|
|
|
elem.click()
|
|
|
|
|
|
|
|
|
|
body = driver.page_source
|
|
|
|
|
|
|
|
|
|
pqhtml = pyquery.PyQuery(body)
|
|
|
|
|
|
|
|
|
|
result = {}
|
|
|
|
|
|
|
|
|
|
r = {}
|
|
|
|
|
|
|
|
|
|
for input in pqhtml("input"):
|
|
|
|
|
# id = input.attr.id
|
|
|
|
|
name = input.attrib["name"]
|
|
|
|
|
if name.endswith("ShowMedicalRecord"):
|
|
|
|
|
elem = driver.find_element_by_name(name)
|
|
|
|
|
elem.click()
|
|
|
|
|
return SimpleInfoShowUsingPlaceHolderDrug("dischargenotelist")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def OPNoteList(Chart, SESSION=None):
|
|
|
|
|
# def PatientMedicalRecordListQuery(q, Chart, SESSION = None):
|
|
|
|
|
if not SESSION:
|
|
|
|
|
SESSION = Login()
|
|
|
|
|
|
|
|
|
|
Chart = str(Chart)
|
|
|
|
|
while len(Chart) < 7:
|
|
|
|
|
Chart = "0" + Chart
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
url = (
|
|
|
|
|
"http://ihisaw.ntuh.gov.tw/WebApplication/OtherIndependentProj/PatientBasicInfoEdit/PatientMedicalRecordListQuery.aspx?QueryBySelf=N&SESSION=%s"
|
|
|
|
|
% SESSION
|
|
|
|
|
)
|
|
|
|
|
# print url
|
|
|
|
|
driver.get(url)
|
|
|
|
|
|
|
|
|
|
elem = driver.find_element_by_css_selector("input.textBoxShort:nth-child(4)")
|
|
|
|
|
elem.send_keys(Chart)
|
|
|
|
|
elem = driver.find_element_by_css_selector(
|
|
|
|
|
"#NTUHWeb1_PatientBasicInfoQueryByIDAndName1 > input:nth-child(13)"
|
|
|
|
|
)
|
|
|
|
|
elem.click()
|
|
|
|
|
driver.save_screenshot("old_window.png")
|
|
|
|
|
logging.info('OPNoteList: old_window')
|
|
|
|
|
elem = driver.find_element_by_css_selector('#NTUHWeb1_PatAccountListRecord1_ShowOperationList')
|
|
|
|
|
elem.click()
|
|
|
|
|
while True:
|
|
|
|
|
old_window = driver.window_handles[0]
|
|
|
|
|
new_window = driver.window_handles[-1]
|
|
|
|
|
# logging.info((len(driver.window_handles), old_window, new_window))
|
|
|
|
|
if len(driver.window_handles) > 1:
|
|
|
|
|
break
|
|
|
|
|
time.sleep(1)
|
|
|
|
|
driver.switch_to.window(new_window)
|
|
|
|
|
driver.save_screenshot("new_window.png")
|
|
|
|
|
|
|
|
|
|
body = driver.page_source
|
|
|
|
|
pqhtml = pyquery.PyQuery(body)
|
|
|
|
|
|
|
|
|
|
TreeViewItemList = []
|
|
|
|
|
|
|
|
|
|
for a in pqhtml("a"):
|
|
|
|
|
if "id" in a.attrib:
|
|
|
|
|
id = a.attrib["id"]
|
|
|
|
|
if id.startswith("TreeViewItemt"):
|
|
|
|
|
m = re.search("'TreeViewItem','s(.*)'", a.attrib["href"])
|
|
|
|
|
KeyCode = m.group(1)
|
|
|
|
|
KeyName = a.text
|
|
|
|
|
TreeViewItemList.append((id, KeyCode, KeyName))
|
|
|
|
|
|
|
|
|
|
ret = []
|
|
|
|
|
|
|
|
|
|
for id, KeyCode, KeyName in TreeViewItemList:
|
|
|
|
|
|
|
|
|
|
logging.info((id, KeyCode, KeyName))
|
|
|
|
|
SurgDate = KeyName.split('_')[-1]
|
|
|
|
|
|
|
|
|
|
RQ = None
|
|
|
|
|
|
|
|
|
|
try :
|
|
|
|
|
elem = driver.find_element(By.ID, id)
|
|
|
|
|
elem.click()
|
|
|
|
|
elem = WebDriverWait(driver, 10).until(
|
|
|
|
|
expected_conditions.text_to_be_present_in_element(
|
|
|
|
|
(By.CSS_SELECTOR, "div.reportQuery"), SurgDate
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logging.exception(e)
|
|
|
|
|
driver.save_screenshot("screenshot.png")
|
|
|
|
|
continue
|
|
|
|
|
|
|
|
|
|
body = driver.page_source
|
|
|
|
|
pqItem = pyquery.PyQuery(body)
|
|
|
|
|
reportQuery = pqItem("div.reportQuery")
|
|
|
|
|
RQ = reportQuery.outerHtml()
|
|
|
|
|
|
|
|
|
|
ret.append(
|
|
|
|
|
{
|
|
|
|
|
"id": id,
|
|
|
|
|
"KeyCode": KeyCode,
|
|
|
|
|
"KeyName": KeyName,
|
|
|
|
|
"reportQuery": RQ,
|
|
|
|
|
}
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
logging.info(driver)
|
|
|
|
|
driver.close()
|
|
|
|
|
logging.info(driver)
|
|
|
|
|
driver.switch_to.window(old_window)
|
|
|
|
|
|
|
|
|
|
return ret
|
|
|
|
|
|
|
|
|
|
def OpenClinics(date, AMPM, ClinicNo, Dept=None, SESSION=None):
|
|
|
|
|
'''
|
|
|
|
|
診間首頁選擇病人
|
|
|
|
|
|
|
|
|
|
<select name="NTUHWeb1$AMPMDropList" id="NTUHWeb1_AMPMDropList" class="normalText">
|
|
|
|
|
<option value=""></option>
|
|
|
|
|
<option selected="selected" value="1">上午</option>
|
|
|
|
|
<option value="2">下午</option>
|
|
|
|
|
|
|
|
|
|
</select>
|
|
|
|
|
|
|
|
|
|
'''
|
|
|
|
|
|
|
|
|
|
year, month, day = date.split('-')
|
|
|
|
|
|
|
|
|
|
if not SESSION:
|
|
|
|
|
SESSION = Login()
|
|
|
|
|
|
|
|
|
|
url = (
|
|
|
|
|
"http://hisaw.ntuh.gov.tw/WebApplication/Clinics/OpenClinics.aspx?SESSION=%s"
|
|
|
|
|
% SESSION
|
|
|
|
|
)
|
|
|
|
|
# print url
|
|
|
|
|
driver.get(url)
|
|
|
|
|
|
|
|
|
|
if Dept:
|
|
|
|
|
elem = driver.find_element_by_css_selector("#NTUHWeb1_DeptDropList")
|
|
|
|
|
select = Select(elem)
|
|
|
|
|
select.select_by_value(AMPM)
|
|
|
|
|
|
|
|
|
|
elem = driver.find_element_by_css_selector("#NTUHWeb1_DateTextBoxYearMonthDayInputUI1_YearInput")
|
|
|
|
|
elem.clear()
|
|
|
|
|
elem.send_keys(year)
|
|
|
|
|
|
|
|
|
|
elem = driver.find_element_by_css_selector("#NTUHWeb1_DateTextBoxYearMonthDayInputUI1_MonthInput")
|
|
|
|
|
elem.clear()
|
|
|
|
|
elem.send_keys(month)
|
|
|
|
|
|
|
|
|
|
elem = driver.find_element_by_css_selector("#NTUHWeb1_DateTextBoxYearMonthDayInputUI1_DayInput")
|
|
|
|
|
elem.clear()
|
|
|
|
|
elem.send_keys(day)
|
|
|
|
|
|
|
|
|
|
elem = driver.find_element_by_css_selector("#NTUHWeb1_AMPMDropList")
|
|
|
|
|
select = Select(elem)
|
|
|
|
|
select.select_by_value(AMPM)
|
|
|
|
|
|
|
|
|
|
elem = driver.find_element_by_css_selector("#NTUHWeb1_ClinicNoInput")
|
|
|
|
|
elem.clear()
|
|
|
|
|
elem.send_keys(ClinicNo)
|
|
|
|
|
|
|
|
|
|
driver.save_screenshot('screenshot.png')
|
|
|
|
|
|
|
|
|
|
elem = driver.find_element_by_css_selector("#NTUHWeb1_QueryScheduleList")
|
|
|
|
|
elem.click()
|
|
|
|
|
|
|
|
|
|
elem = driver.find_element_by_css_selector("#NTUHWeb1_ShowDetailPatInfo")
|
|
|
|
|
elem.click()
|
|
|
|
|
|
|
|
|
|
body = driver.page_source
|
|
|
|
|
pqBody = pyquery.PyQuery(body)
|
|
|
|
|
span = (pqBody('#NTUHWeb1_PatientDefailInfoLabel'))
|
|
|
|
|
# print(dir(span))
|
|
|
|
|
ret = []
|
|
|
|
|
for line in span.text().splitlines() :
|
|
|
|
|
# print (line.split(' '))
|
|
|
|
|
ret.append(line.split(' ')[1])
|
|
|
|
|
# exit()
|
|
|
|
|
return ret
|
|
|
|
|
|
|
|
|
|
def lbl_value(tr, immutable=[]):
|
|
|
|
|
r = {}
|
|
|
|
|
d2 = pyquery.PyQuery(tr)("span")
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
# print(key,value)
|
|
|
|
|
if (key not in r) or (key not in immutable):
|
|
|
|
|
r[key] = value
|
|
|
|
|
|
|
|
|
|
# print(r)
|
|
|
|
|
|
|
|
|
|
return r
|
|
|
|
|
|
|
|
|
|
# 健保審查系統 案件查詢
|
|
|
|
|
def QueryCase(NhiOrderCode='37029B', ApplySDate=None, SESSION=None):
|
|
|
|
|
if not SESSION:
|
|
|
|
|
SESSION = Login()
|
|
|
|
|
|
|
|
|
|
url = (
|
|
|
|
|
"http://ahisaw.ntuh.gov.tw/WebApplication/Administration/NtuhACE/Pages/PreReview/QueryCase.aspx?SESSION=%s"
|
|
|
|
|
% SESSION
|
|
|
|
|
)
|
|
|
|
|
# print( url)
|
|
|
|
|
# exit()
|
|
|
|
|
driver.get(url)
|
|
|
|
|
|
|
|
|
|
# 案件 不限
|
|
|
|
|
|
|
|
|
|
if ApplySDate is not None:
|
|
|
|
|
elem = driver.find_element_by_css_selector("#txbApplySDate")
|
|
|
|
|
elem.clear()
|
|
|
|
|
elem.send_keys(ApplySDate)
|
|
|
|
|
|
|
|
|
|
elem = driver.find_element_by_css_selector("#txbNhiOrderCode")
|
|
|
|
|
elem.clear()
|
|
|
|
|
elem.send_keys(NhiOrderCode)
|
|
|
|
|
|
|
|
|
|
elem = driver.find_element_by_css_selector("#rdoBelongList_1")
|
|
|
|
|
elem.click()
|
|
|
|
|
|
|
|
|
|
elem = driver.find_element_by_css_selector("#btnQuery")
|
|
|
|
|
elem.click()
|
|
|
|
|
|
|
|
|
|
body = driver.page_source
|
|
|
|
|
pqBody = pyquery.PyQuery(body)
|
|
|
|
|
tbody = pqBody('#pnlCaseList > table:nth-child(6) > tbody:nth-child(1)')
|
|
|
|
|
|
|
|
|
|
# for tr in pyquery.PyQuery(tbody)('tr'):
|
|
|
|
|
# for i, tr in enumerate(tbody('tr').items()):
|
|
|
|
|
|
|
|
|
|
ret = []
|
|
|
|
|
|
|
|
|
|
for i, tr in enumerate(tbody.children('tr')):
|
|
|
|
|
if i == 0:
|
|
|
|
|
continue
|
|
|
|
|
# print(lbl_value(tr))
|
|
|
|
|
# exit()
|
|
|
|
|
ret.append(lbl_value(tr, immutable=['PackageTime']))
|
|
|
|
|
|
|
|
|
|
# return ret
|
|
|
|
|
|
|
|
|
|
# 個人案件
|
|
|
|
|
|
|
|
|
|
if ApplySDate is not None:
|
|
|
|
|
elem = driver.find_element_by_css_selector("#txbApplySDate")
|
|
|
|
|
elem.clear()
|
|
|
|
|
elem.send_keys(ApplySDate)
|
|
|
|
|
|
|
|
|
|
elem = driver.find_element_by_css_selector("#txbNhiOrderCode")
|
|
|
|
|
elem.clear()
|
|
|
|
|
elem.send_keys(NhiOrderCode)
|
|
|
|
|
|
|
|
|
|
elem = driver.find_element_by_css_selector("#rdoBelongList_0")
|
|
|
|
|
elem.click()
|
|
|
|
|
|
|
|
|
|
elem = driver.find_element_by_css_selector("#btnQuery")
|
|
|
|
|
elem.click()
|
|
|
|
|
|
|
|
|
|
body = driver.page_source
|
|
|
|
|
pqBody = pyquery.PyQuery(body)
|
|
|
|
|
tbody = pqBody('#pnlCaseList > table:nth-child(6) > tbody:nth-child(1)')
|
|
|
|
|
|
|
|
|
|
# for tr in pyquery.PyQuery(tbody)('tr'):
|
|
|
|
|
# for i, tr in enumerate(tbody('tr').items()):
|
|
|
|
|
|
|
|
|
|
lnkSelect = []
|
|
|
|
|
|
|
|
|
|
for a in tbody('a'):
|
|
|
|
|
lnkSelect.append(a.attrib['id'])
|
|
|
|
|
|
|
|
|
|
for id in lnkSelect:
|
|
|
|
|
elem = driver.find_element(By.ID, id)
|
|
|
|
|
elem.click()
|
|
|
|
|
# print(driver.page_source)
|
|
|
|
|
val = lbl_value(driver.page_source, immutable=['ApplyDate'])
|
|
|
|
|
print(val)
|
|
|
|
|
ret.append(val)
|
|
|
|
|
driver.back()
|
|
|
|
|
# break
|
|
|
|
|
# exit()
|
|
|
|
|
|
|
|
|
|
return ret
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def QueryCaseByPass(UserID, Pass, NhiOrderCode='37029B', ApplySDate=None):
|
|
|
|
|
SESSION = Login(UserID, Pass, NewSession=True)
|
|
|
|
|
|
|
|
|
|
url = (
|
|
|
|
|
"http://ahisaw.ntuh.gov.tw/WebApplication/Administration/NtuhACE/Pages/PreReview/QueryCase.aspx?SESSION=%s"
|
|
|
|
|
% SESSION
|
|
|
|
|
)
|
|
|
|
|
# print( url)
|
|
|
|
|
# exit()
|
|
|
|
|
driver.get(url)
|
|
|
|
|
driver.get(url) # retry because the first will fail
|
|
|
|
|
|
|
|
|
|
ret = []
|
|
|
|
|
|
|
|
|
|
# 個人案件
|
|
|
|
|
|
|
|
|
|
if ApplySDate is not None:
|
|
|
|
|
elem = driver.find_element_by_css_selector("#txbApplySDate")
|
|
|
|
|
elem.clear()
|
|
|
|
|
elem.send_keys(ApplySDate)
|
|
|
|
|
|
|
|
|
|
elem = driver.find_element_by_css_selector("#txbNhiOrderCode")
|
|
|
|
|
elem.clear()
|
|
|
|
|
elem.send_keys(NhiOrderCode)
|
|
|
|
|
|
|
|
|
|
elem = driver.find_element_by_css_selector("#rdoBelongList_0")
|
|
|
|
|
elem.click()
|
|
|
|
|
|
|
|
|
|
elem = driver.find_element_by_css_selector("#btnQuery")
|
|
|
|
|
elem.click()
|
|
|
|
|
|
|
|
|
|
body = driver.page_source
|
|
|
|
|
pqBody = pyquery.PyQuery(body)
|
|
|
|
|
tbody = pqBody('#pnlCaseList > table:nth-child(6) > tbody:nth-child(1)')
|
|
|
|
|
|
|
|
|
|
# for tr in pyquery.PyQuery(tbody)('tr'):
|
|
|
|
|
# for i, tr in enumerate(tbody('tr').items()):
|
|
|
|
|
|
|
|
|
|
lnkSelect = []
|
|
|
|
|
|
|
|
|
|
for a in tbody('a'):
|
|
|
|
|
lnkSelect.append(a.attrib['id'])
|
|
|
|
|
|
|
|
|
|
for id in lnkSelect:
|
|
|
|
|
elem = driver.find_element(By.ID, id)
|
|
|
|
|
elem.click()
|
|
|
|
|
# print(driver.page_source)
|
|
|
|
|
val = lbl_value(driver.page_source, immutable=['ApplyDate'])
|
|
|
|
|
print(val)
|
|
|
|
|
ret.append(val)
|
|
|
|
|
driver.back()
|
|
|
|
|
# break
|
|
|
|
|
# exit()
|
|
|
|
|
|
|
|
|
|
return ret
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def QueryCaseByChartNo(ChartNo, NhiOrderCode='37029B', ApplySDate='2017/01/01', SESSION=None):
|
|
|
|
|
if not SESSION:
|
|
|
|
|
SESSION = Login()
|
|
|
|
|
|
|
|
|
|
url = (
|
|
|
|
|
"http://ahisaw.ntuh.gov.tw/WebApplication/Administration/NtuhACE/Pages/PreReview/QueryCase.aspx?SESSION=%s"
|
|
|
|
|
% SESSION
|
|
|
|
|
)
|
|
|
|
|
# print( url)
|
|
|
|
|
# exit()
|
|
|
|
|
driver.get(url)
|
|
|
|
|
|
|
|
|
|
# elem = driver.find_element_by_css_selector("#txbChartNo")
|
|
|
|
|
elem = driver.find_element(By.CSS_SELECTOR, "#txbChartNo")
|
|
|
|
|
elem.clear()
|
|
|
|
|
elem.send_keys(ChartNo)
|
|
|
|
|
|
|
|
|
|
# elem = driver.find_element_by_css_selector("#txbApplySDate")
|
|
|
|
|
elem = driver.find_element(By.CSS_SELECTOR, "#txbApplySDate")
|
|
|
|
|
elem.clear()
|
|
|
|
|
elem.send_keys(ApplySDate)
|
|
|
|
|
|
|
|
|
|
# 案件 不限
|
|
|
|
|
|
|
|
|
|
elem = driver.find_element(By.CSS_SELECTOR, "#txbNhiOrderCode")
|
|
|
|
|
elem.clear()
|
|
|
|
|
elem.send_keys(NhiOrderCode)
|
|
|
|
|
|
|
|
|
|
elem = driver.find_element(By.CSS_SELECTOR, "#rdoBelongList_1")
|
|
|
|
|
elem.click()
|
|
|
|
|
|
|
|
|
|
elem = driver.find_element(By.CSS_SELECTOR, "#btnQuery")
|
|
|
|
|
elem.click()
|
|
|
|
|
|
|
|
|
|
body = driver.page_source
|
|
|
|
|
pqBody = pyquery.PyQuery(body)
|
|
|
|
|
tbody = pqBody('#pnlCaseList > table:nth-child(6) > tbody:nth-child(1)')
|
|
|
|
|
|
|
|
|
|
# for tr in pyquery.PyQuery(tbody)('tr'):
|
|
|
|
|
# for i, tr in enumerate(tbody('tr').items()):
|
|
|
|
|
|
|
|
|
|
ret = []
|
|
|
|
|
|
|
|
|
|
for i, tr in enumerate(tbody.children('tr')):
|
|
|
|
|
if i == 0:
|
|
|
|
|
continue
|
|
|
|
|
# print(lbl_value(tr))
|
|
|
|
|
# exit()
|
|
|
|
|
ret.append(lbl_value(tr, immutable=['PackageTime']))
|
|
|
|
|
|
|
|
|
|
# 個人案件
|
|
|
|
|
|
|
|
|
|
elem = driver.find_element(By.CSS_SELECTOR, "#txbNhiOrderCode")
|
|
|
|
|
elem.clear()
|
|
|
|
|
elem.send_keys(NhiOrderCode)
|
|
|
|
|
|
|
|
|
|
elem = driver.find_element(By.CSS_SELECTOR, "#rdoBelongList_0")
|
|
|
|
|
elem.click()
|
|
|
|
|
|
|
|
|
|
elem = driver.find_element(By.CSS_SELECTOR, "#btnQuery")
|
|
|
|
|
elem.click()
|
|
|
|
|
|
|
|
|
|
body = driver.page_source
|
|
|
|
|
pqBody = pyquery.PyQuery(body)
|
|
|
|
|
tbody = pqBody('#pnlCaseList > table:nth-child(6) > tbody:nth-child(1)')
|
|
|
|
|
|
|
|
|
|
# for tr in pyquery.PyQuery(tbody)('tr'):
|
|
|
|
|
# for i, tr in enumerate(tbody('tr').items()):
|
|
|
|
|
|
|
|
|
|
lnkSelect = []
|
|
|
|
|
|
|
|
|
|
for a in tbody('a'):
|
|
|
|
|
lnkSelect.append(a.attrib['id'])
|
|
|
|
|
|
|
|
|
|
for id in lnkSelect:
|
|
|
|
|
elem = driver.find_element(By.ID, id)
|
|
|
|
|
elem.click()
|
|
|
|
|
# print(driver.page_source)
|
|
|
|
|
val = lbl_value(driver.page_source, immutable=['ApplyDate'])
|
|
|
|
|
# print(val)
|
|
|
|
|
ret.append(val)
|
|
|
|
|
driver.back()
|
|
|
|
|
# break
|
|
|
|
|
# exit()
|
|
|
|
|
|
|
|
|
|
return ret
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
|
# a = Login()
|
2024-12-12 09:01:35 +00:00
|
|
|
|
# a = OpenClinics('2024-12-10', AMPM='2', ClinicNo=9)
|
2024-12-11 04:46:09 +00:00
|
|
|
|
# a = QueryModifyPatBase({'ChartNo': '3009684'})
|
|
|
|
|
# a = QueryModifyPatBase({'ChartNo': '8052734'})
|
|
|
|
|
# a = ElectronicMedicalReportViewer('3009684', startswith='T0', excluded=['T0_20181011630_T0186538260'])
|
|
|
|
|
# a = PatientMedicalRecordListQuery('6715701')
|
|
|
|
|
# a = SimpleQueryOpSchedule('002867', '2018/05/01', '2018/05/31')
|
|
|
|
|
# a = ReportPathology('2747688')
|
|
|
|
|
# a = ReportPathology('6369113')
|
|
|
|
|
# a = QueryInPatientByMonth('003160', 2017, 10)
|
2024-12-12 09:01:35 +00:00
|
|
|
|
a = QueryInPatientByWard('08D')
|
2024-12-11 04:46:09 +00:00
|
|
|
|
# a = QueryDrIDInfoByID(settings.USER_ID)
|
|
|
|
|
# a = WardQueryUncompletedChart()
|
|
|
|
|
# a = WardQueryUncompletedChartCost()
|
|
|
|
|
# a = SimpleQueryOpScheduleByChartNo('3644408')
|
|
|
|
|
# a = ShowMedicalRecordDrug("3228492")
|
|
|
|
|
# a = ElectronicMedicalReportViewer('3009684')
|
|
|
|
|
# a = OPNoteList('6033296')
|
|
|
|
|
# a = QueryCase()
|
|
|
|
|
# a = QueryCaseByChartNo('3906656')
|
|
|
|
|
# a = QueryCaseByPass('018522','ah651223')
|
|
|
|
|
|
|
|
|
|
MyPrettyPrinter().pprint(a)
|
|
|
|
|
print(len(a))
|
|
|
|
|
# print(a[0].keys())
|