commit 1090aeac3657008021757492b3c7714319cc311a Author: Tsuki Date: Thu Sep 21 21:35:15 2023 +0800 oa diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..a971a2c --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..3f8d877 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/rayshon_tools.iml b/.idea/rayshon_tools.iml new file mode 100644 index 0000000..909438d --- /dev/null +++ b/.idea/rayshon_tools.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/cookies.txt b/cookies.txt new file mode 100644 index 0000000..155b8b8 --- /dev/null +++ b/cookies.txt @@ -0,0 +1,7 @@ +# Netscape HTTP Cookie File +# http://curl.haxx.se/rfc/cookie_spec.html +# This is a generated file! Do not edit. + +222.240.44.2 FALSE / FALSE ASP.NET_SessionId r3esuett3tcxqtmlqedcxleb +222.240.44.2 FALSE / FALSE 253402300799 Login PassWord +222.240.44.2 FALSE / FALSE 253402300799 SessionID120082 r3esuett3tcxqtmlqedcxleb diff --git a/main.py b/main.py new file mode 100644 index 0000000..e69de29 diff --git a/oa.py b/oa.py new file mode 100644 index 0000000..3950228 --- /dev/null +++ b/oa.py @@ -0,0 +1,92 @@ +import requests +import re +import os +import http.cookiejar +import base64 +from urllib.parse import urljoin +from bs4 import BeautifulSoup +import lxml + +BASE_URL = "http://222.240.44.2:8899/C6/" + + +class OA: + def __init__(self, base_url: str, username: str, pwd: str): + self.username = username + self.pwd = pwd + self.session = requests.session() + self.base_url = base_url + + def login(self): + if os.path.exists("cookies.txt"): + + load_cookiejar = http.cookiejar.MozillaCookieJar() + load_cookiejar.load("cookies.txt", ignore_discard=True, ignore_expires=True) + load_cookies = requests.utils.dict_from_cookiejar(load_cookiejar) + cookies = requests.utils.cookiejar_from_dict(load_cookies) + self.session.cookies = cookies + + if not self.session.get(urljoin(self.base_url, "JHSoft.Web.WorkFlat/FlatWorksDone.aspx")).ok: + self.__login() + + else: + self.__login() + + def __login(self): + print("re-login") + self.session.cookies = http.cookiejar.MozillaCookieJar(filename="cookies.txt") + login_path = urljoin(self.base_url, "JHSoft.Web.Login/AjaxForLogin.aspx") + _u = base64.b64encode(self.username.encode('utf-8')) + _p = base64.b64encode(self.pwd.encode('utf-8')) + + response = self.session.post(login_path, data={ + "type": "login", + "loginCode": _u, + "pwd": _p + }, headers={ + "X-Requested-With": "XMLHttpRequest" + }) + + if response.ok: + print("Login Success: {}".format(self.username)) + self.session.cookies.save(ignore_expires=True, ignore_discard=True) + else: + print("Login Failed, error code: {}".format(response.status_code)) + + def works(self): + u = urljoin(self.base_url, "JHSoft.Web.WorkFlat/FlatWorksDone.aspx") + res = self.session.get(u) + + if res.ok: + self.parse(res) + + def parse(self, response): + + info_sql = "c2VsZWN0ICogZnJvbSBDdXN0b21Nb2R1bGVfMjAyMTA4MDIwNjAxIHdoZXJlIE1haW5JRD0nSkhDMDAwMzk4MTgn1-1MainID;lsh;sqrq;sqr;yggh;bm;zw;qjlx;qjsy;qjksrq;shi1;ksf;qjjsrq;shi2;jsf;gong;tspd" + + soup = BeautifulSoup(response.text, features="lxml") + datatable = soup.find(id="DGWorksDone_TBody").find_all("tr") + jbtj = filter(lambda x: "JBTJ" in x.text, datatable) + qjsq = filter(lambda x: "QJSQ" in x.text, datatable) + + work_overtime = map(lambda x: re.search(re.compile(r"JBTJ\d{8}-\d{4}"), x.text).group(0), jbtj) + leave = map(lambda x: re.search(re.compile(r"QJSQ\d{8}-\d{4}"), x.text).group(0), qjsq) + + # for jb in jbtj: + cut_path = re.match(re.compile(r"javascript:ClickTitle\('\.\./(.+)'\)"),jbtj.__next__().contents[1].a['onclick']).group(1) + djframe_path = urljoin(self.base_url,cut_path) + res = self.session.get(djframe_path,allow_redirects=True) + if res.ok: + print(res.text) + + def close(self): + self.session.close() + + +test = OA(BASE_URL, "120082", "7948799") + +test.login() + +test.works() + +test.close() diff --git a/test.html b/test.html new file mode 100644 index 0000000..6c3fada --- /dev/null +++ b/test.html @@ -0,0 +1,216 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  + +
+ ++++++++++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
请假申请单
+
流水号
+
 
+
申请日期
+
 
+
申请人
+
 
+
员工工号
+
 
+
部门
+
+
请假类型
+
 
+
请假时间
+
+
 
+
+
 
+
+
 
+
+
 
+
+
+
 
+
+
 
+
+
+
请假事由
+
+
审批意见
+
+
 
 
+
附件
+
+
+ + + +
增加附件
 
+
所有的假单证明材料(如:结婚证复印件、病例证明、生育证明等)请扫描后添加附件。