Example #1
0
    def _check_login_params(self, params):
        assert params is not None, '缺少参数'
        assert 'other' in params, '请选择登录方式'
        if params["other"] == "1":
            assert 'bh1' in params, '缺少客户号'
            assert 'mm1' in params, '缺少密码'
        elif params["other"] == "3":
            assert 'bh3' in params, '缺少用户名'
            assert 'mm3' in params, '缺少密码'
        elif params["other"] == "4":
            assert 'bh4' in params, '缺少市民邮箱'
            assert 'mm4' in params, '缺少密码'
        assert 'vc' in params, '缺少验证码'
        # other check
        if params["other"] == "1":
            用户名 = params['bh1']
        elif params["other"] == "3":
            用户名 = params['bh3']
        elif params["other"] == "4":
            用户名 = params['bh4']
        if params["other"] == "1":
            密码 = params['mm1']
        elif params["other"] == "3":
            密码 = params['mm3']
        elif params["other"] == "4":
            密码 = params['mm4']

        if len(密码) < 4:
            raise InvalidParamsError('用户名或密码错误')
        if len(用户名) < 5:
            raise InvalidParamsError('登陆名错误')
        if '@' in 用户名:
            if not 用户名.endswith('@hz.cn'):
                raise InvalidParamsError('市民邮箱错误')
            return
Example #2
0
    def _unit_login(self, params=None):
        err_msg = None
        params
        if not self.is_start or params:
            # 非开始或者开始就提供了参数
            try:
                self._check_login_params(params)
                id_num = params['身份证号']
                #account_num = params['account_num']
                password=params['密码']
                vc = params['vc']
                resp=self.s.post(LOGINONE_URL,data=dict(
                     aac147=id_num
                 ))
                soup = BeautifulSoup(resp.content, 'html.parser')
                if len(soup.text)>0:
                    raise InvalidParamsError(soup.text)
                else:
                    m = hashlib.md5()
                    m.update(password.encode(encoding='utf-8'))
                    hashpsw=m.hexdigest()
                    resp = self.s.post(LOGIN_URL,data = dict(
                        method='login',
                        domainId='1',
                        groupid='-95',
                        checkCode=vc,
                        loginName18=id_num,
                        loginName=id_num,
                        password=hashpsw,
                        kc02flag=''
                    ))
                    if resp.url==PASS_URl:
                        raise InvalidParamsError('请登录官网修改密码 !说明:1、为保证信息安全,密码不能为个人编号。2、密码长度需大于6位小于18位。')
                    elif resp.url==MB_URL:
                        raise InvalidParamsError('请登录官网修改密保 !说明:注:1、请设置密保问题,密保问题不要随意泄露。2、密保问题作为找回密码的依据,请妥善保存。')
                    else:
                        soup = BeautifulSoup(resp.content, 'html.parser')
                        if soup.select('.text3'):
                            return_message=soup.select('.text3')[0].text
                            raise InvalidParamsError(return_message)
                        else:
                            print("登录成功!")

                self.result_key = id_num
                self.result_meta['身份证号'] = id_num
                self.result_meta['密码'] = password
                self.result_identity['task_name'] = '青岛'
                self.result_identity['target_id'] = id_num
                return
            except (AssertionError, InvalidParamsError) as e:
                err_msg = str(e)

        vc = self._new_vc()
        raise AskForParamsError([
            dict(key='身份证号', name='身份证号', cls='input', value=params.get('身份证号', '')),
            dict(key='密码', name='密码', cls='input:password', value=params.get('密码', '')),
            dict(key='vc', name='验证码', cls='data:image', query={'t': 'vc'}, value=params.get('vc', '')),
        ], err_msg)
Example #3
0
 def _check_login_params(self, params):
     assert params is not None, '缺少参数'
     assert '身份证号' in params, '缺少身份证号'
     assert '密码' in params, '缺少密码'
     # other check
     身份证号 = params['身份证号']
     密码 = params['密码']
     if len(密码) < 4:
         raise InvalidParamsError('登陆名或密码错误')
     if len(身份证号) < 15:
         raise InvalidParamsError('身份证号错误')
Example #4
0
 def _check_login_params(self, params):
     assert params is not None, '缺少参数'
     assert '账号' in params, '缺少账号'
     assert '密码' in params, '缺少密码'
     # other check
     账号 = params['账号']
     密码 = params['密码']
     if len(密码) < 4:
         raise InvalidParamsError('账号或密码错误')
     if len(账号) < 15:
         raise InvalidParamsError('账号或密码错误')
Example #5
0
 def _check_login_params(self, params):
     assert params is not None, '缺少参数'
     assert '用户名' in params, '缺少用户名'
     assert '密码' in params, '缺少密码'
     # other check
     用户名 = params['用户名']
     密码 = params['密码']
     if len(密码) < 4:
         raise InvalidParamsError('用户名或密码错误')
     if len(用户名) < 5:
         raise InvalidParamsError('用户名错误')
Example #6
0
 def _check_login_params(self, params):
     assert params is not None, '缺少参数'
     assert '用户名' in params, '缺少证件号码'
     assert '个人账号' in params, '个人账号'
     # other check
     证件号码 = params['证件号码']
     个人账号 = params['个人账号']
     if len(个人账号) != 8:
         raise InvalidParamsError('个人账号')
     if len(证件号码) < 15:
         raise InvalidParamsError('证件号码错误')
Example #7
0
    def _unit_login(self, params=None):
        err_msg = None
        if not self.is_start or params:
            # 非开始或者开始就提供了参数
            try:
                self._check_login_params(params)
                id_num = params['身份证号']
                account_num = params['个人账号']
                password = params['密码']
                vc = params['vc']

                resp = self.s.post(LOGIN_URL,
                                   data=dict(dispatch='fund_search',
                                             return_message='',
                                             id_card=id_num,
                                             id_account=account_num,
                                             searchpwd=password,
                                             validcode=vc),
                                   verify=False,
                                   timeout=30)
                soup = BeautifulSoup(resp.content, 'html.parser')
                return_message = soup.find('input', {'name': 'return_message'})
                if return_message:
                    return_message = soup.find(
                        'input', {'name': 'return_message'})["value"]
                    if return_message:
                        raise InvalidParamsError(return_message)
                    else:
                        print("登录成功!")
                        self.html = str(resp.content, 'gbk')
                else:
                    return_message = '您输入的信息不符合要求,请到公积金管理中心确认'
                    raise InvalidParamsError(return_message)

                self.result_key = id_num
                self.result_meta['身份证号'] = id_num
                self.result_meta['个人账号'] = account_num
                self.result_meta['密码'] = password

                self.result_identity['task_name'] = '哈尔滨'
                self.result_identity['target_id'] = id_num

                return
            except (AssertionError, InvalidParamsError) as e:
                err_msg = str(e)

        vc = self._new_vc()
        raise AskForParamsError([
            dict(key='身份证号', name='身份证号', cls='input'),
            dict(key='个人账号', name='个人账号', cls='input'),
            dict(key='密码', name='密码', cls='input:password'),
            dict(key='vc', name='验证码', cls='data:image', query={'t': 'vc'}),
        ], err_msg)
Example #8
0
    def _check_login_params(self, params):
        assert params is not None, '缺少参数'
        assert '身份证号' in params, '缺少身份证号'
        assert '登录密码' in params, '缺少登录密码'

        # other check
        身份证号 = params['身份证号']
        登录密码 = params['登录密码']

        if len(身份证号) <9 or len(身份证号)>19:
            raise InvalidParamsError('身份证号或个人公积金帐号或黄山卡号错误')
        if len(登录密码) < 6:
            raise InvalidParamsError('登录密码错误')
Example #9
0
 def _check_login_params(self, params):
     assert params is not None, '缺少参数'
     assert '登陆名' in params, '缺少账号'
     assert '密码' in params, '缺少密码'
     # other check
     登陆名 = params['登陆名']
     密码 = params['密码']
     if len(密码) < 4:
         raise InvalidParamsError('登陆名或密码错误')
     if 登陆名.isdigit():
         if len(登陆名) < 5:
             raise InvalidParamsError('登陆名错误')
         return
     raise InvalidParamsError('登陆名或密码错误')
Example #10
0
 def _check_login_params(self, params):
     assert params is not None, '缺少参数'
     assert '身份证号' in params, '缺少公积金账号'
     assert '密码' in params, '缺少密码'
     # other check
     身份证号 = params['身份证号']
     密码 = params['密码']
     if len(密码) < 4:
         raise InvalidParamsError('身份证号或密码错误')
     if 身份证号.isdigit():
         if len(身份证号) < 18:
             raise InvalidParamsError('身份证号错误')
         return
     raise InvalidParamsError('身份证号或密码错误')
Example #11
0
 def _check_login_params(self, params):
     assert params is not None, '缺少参数'
     assert '账号' in params, '缺少账号'
     assert '密码' in params, '缺少密码'
     # other check
     账号 = params['账号']
     密码 = params['密码']
     if len(密码) < 4:
         raise InvalidParamsError('账号或密码错误')
     if 账号.isdigit():
         if len(账号) < 11:
             raise InvalidParamsError('手机号或身份证错误')
         return
     raise InvalidParamsError('账号或密码错误')
Example #12
0
    def _check_login_params(self, params):
        assert params is not None, '缺少参数'
        assert '账号' in params, '缺少账号'
        assert '密码' in params, '缺少密码'
        # other check
        账号 = params['账号']
        密码 = params['密码']

        if len(账号) == 0:
            raise InvalidParamsError('账号为空,请输入账号')

        if len(密码) == 0:
            raise InvalidParamsError('密码为空,请输入密码!')
        elif len(密码) < 6:
            raise InvalidParamsError('密码不正确,请重新输入!')
Example #13
0
    def _do_login(self, username, password, vc):
        """使用web driver模拟登录过程"""
        with self.dsc.get_driver_ctx() as driver:
            # 打开登录页
            driver.get(LOGIN_URL)
            time.sleep(10)
            driver.get("http://www.12333sh.gov.cn/sbsjb/wzb/229.jsp")

            username_input = driver.find_element_by_xpath('//*[@id="userid"]')
            password_input = driver.find_element_by_xpath('//*[@id="userpw"]')
            vc_input = driver.find_element_by_xpath('//*[@id="userjym"]')

            # 用户名
            username_input.clear()
            username_input.send_keys(username)

            # 密码
            password_input.clear()
            password_input.send_keys(password)

            # 验证码
            vc_input.clear()
            vc_input.send_keys(vc)

            # 登录
            # driver.find_element_by_xpath('//*[@id="ckRecId20"]/form/table[1]/tbody/tr[7]/td[2]/img').click()  # /html/body/form/table/tbody/tr[6]/td[2]
            driver.execute_script('checkForm()')
            time.sleep(10)

            if driver.current_url != "http://www.12333sh.gov.cn/sbsjb/wzb/helpinfo.jsp?id=0":
                raise InvalidParamsError('登录失败,请重新登录!')
Example #14
0
    def _loadJs(self):
        import execjs
        resps = self.s.get("http://gzlss.hrssgz.gov.cn/cas/login")
        modlus = BeautifulSoup(resps.content).findAll('script')[2].text.split(
            '=')[3].split(';')[0].replace('"', '')
        jsstrs = self.s.get(
            "http://gzlss.hrssgz.gov.cn/cas/third/jquery-1.5.2.min.js")
        jsstr = self.s.get("http://gzlss.hrssgz.gov.cn/cas/third/security.js")
        ctx = execjs.compile(jsstr.text + jsstrs.text)
        key = ctx.call("RSAUtils.getKeyPair", '010001', '', modlus)

        resp = self.s.get("http://gzlss.hrssgz.gov.cn/cas/login")
        lt = BeautifulSoup(resp.content,
                           'html.parser').find('input',
                                               {'name': 'lt'})['value']
        datas = {
            'usertype': "2",
            'lt': lt,
            # 'username': params.get('账号'),
            # 'password': params.get('密码'),
            '_eventId': 'submit'
        }

        resps = self.s.post(
            "http://gzlss.hrssgz.gov.cn/cas/login?service=http://gzlss.hrssgz.gov.cn:80/gzlss_web/business/tomain/main.xhtml",
            datas)
        raise InvalidParamsError(resps.text)
Example #15
0
    def _unit_login(self, params=None):
        err_msg = None
        if params:
            # 非开始或者开始就提供了参数
            try:
                self._check_login_params(params)
                id_num = params['id_num']
                account_num = params['account_num']
                vc = params['vc']

                resp = self.s.post(LOGIN_URL, data=dict(
                    sfzh=id_num,
                    grbh=account_num,
                    yzcode=vc
                ))
                data = resp.json()
                errormsg = data.get('errormsg')
                if errormsg:
                    raise InvalidParamsError(errormsg)

                self.result['key'] = id_num
                self.result['meta'] = {
                    'id_num': id_num,
                    'account_num': account_num
                }
                return
            except (AssertionError, InvalidParamsError) as e:
                err_msg = str(e)

        raise AskForParamsError([
            dict(key='id_num', name='身份证号', cls='input'),
            dict(key='account_num', name='个人编号', cls='input'),
            dict(key='vc', name='验证码', cls='data:image', query={'t': 'vc'}),
        ], err_msg)
Example #16
0
    def _do_login(self, username, password, vc):
        """使用web driver模拟登录过程"""
        with self.dsc.get_driver_ctx(excepted_exceptions=(InvalidParamsError,)) as driver:
            # 选择身份证号方式登录
            driver.find_element_by_xpath('/html/body/table[2]/tbody/tr[3]/td/table/tbody/tr/td/div/form/div[1]/ul/li[3]/a').click()

            username_input = driver.find_element_by_xpath('//*[@id="bh1"]')
            password_input = driver.find_element_by_xpath('//*[@id="mm1"]')
            vc_input = driver.find_element_by_xpath('//*[@id="login_tab_2"]/div/div[3]/input')
            submit_btn = driver.find_element_by_xpath('//*[@id="login_tab_2"]/div/div[4]/input[1]')

            # 用户名
            username_input.clear()
            username_input.send_keys(username)

            # 密码
            password_input.clear()
            password_input.send_keys(password)
            vc_input.clear()
            vc_input.send_keys(vc)
            # 提交
            submit_btn.click()

            if not driver.current_url == 'http://www.bjgjj.gov.cn/wsyw/wscx/gjjcx-choice.jsp':
                raise InvalidParamsError('登录失败,请检查输入')

            # 登录成功
            # 同步cookie到session
            self.dsc.create_session()
            self.dsc.inc_and_sync_d_cookies()

            # 保存登录后的页面内容供抓取单元解析使用
            self.g.login_page_html = driver.find_element_by_tag_name('html').get_attribute('innerHTML')
            self.g.current_url = driver.current_url
Example #17
0
    def _do_login(self, username, password, vc):
        """使用web driver模拟登录过程"""
        with self.dsc.get_driver_ctx() as driver:
            # 打开登录页
            driver.get("https://gr.cdhrss.gov.cn:442/cdwsjb/login.jsp")

            username_input = driver.find_element_by_xpath(
                '//*[@id="c_username"]')

            js = 'document.getElementById("c_password").style.display="inline-block";'
            driver.execute_script(js)
            password_input = driver.find_element_by_xpath(
                '//*[@id="c_password"]')
            vc_input = driver.find_element_by_xpath('//*[@id="checkCode"]')

            # 用户名
            username_input.clear()
            username_input.send_keys(username)

            # 密码
            password_input.clear()
            password_input.send_keys(password)

            # 验证码
            vc_input.clear()
            vc_input.send_keys(vc)

            # 登录
            driver.find_element_by_xpath(
                '//*[@id="loginbox"]/div[5]/div[1]/input').click()
            time.sleep(5)

            if driver.current_url.startswith(
                    'https://gr.cdhrss.gov.cn:442/cdwsjb/login.jsp'):
                raise InvalidParamsError('登录失败,请重新登录!')
Example #18
0
    def _unit_login(self, params=None):
        err_msg = None
        if params:
            # 非开始或者开始就提供了参数
            try:
                self._check_login_params(params)
                sfzh = params['sfzh']
                password = base64.b64encode(params['password'].encode(encoding="utf-8"))
                vc = params['vc']

                resp = self.s.post(LOGIN_URL, data=dict(
                    sfzh=sfzh,
                    password=password,
                    validateCode=vc
                ))
                data = resp.json()
                errormsg = data.get('message')
                if data.get('code') == '0':
                    raise InvalidParamsError(errormsg)

                self.result_key = sfzh
                self.result_meta.update({
                    '身份证编号': sfzh,
                    '密码': params['password']
                })
                return
            except (AssertionError, InvalidParamsError) as e:
                err_msg = str(e)

        raise AskForParamsError([
            dict(key='sfzh', name='身份证号', cls='input', value=params.get('sfzh', '')),
            dict(key='password', name='密码', cls='input:password', value=params.get('password', '')),
            dict(key='vc', name='验证码', cls='data:image', query={'t': 'vc'}, value=params.get('vc', '')),
        ], err_msg)
Example #19
0
    def _unit_login(self, params: dict):
        err_msg = None
        if params:
            try:
                self._check_login_params(params)
                id_num = params['身份证号']
                password = params['密码']
                m = hashlib.md5()
                m.update(str(password).encode(encoding="utf-8"))
                pw = m.hexdigest()
                vc = params['vc']
                respvc = self.s.post(
                    'http://218.28.166.74:8080/zzsbonline/companyAction!getRandCode',
                    data=dict(code=vc))
                vctext = BeautifulSoup(respvc.content, 'html.parser')
                if vctext.text == '0':
                    resp = self.s.post(LOGIN_URL,
                                       data=dict(cardid=id_num,
                                                 password=pw,
                                                 vcode=vc))
                    soup = BeautifulSoup(resp.content, 'html.parser')
                    msg = json.loads(soup.text)
                    err_msg = msg['msgbox']
                    if err_msg == '用户成功登录':
                        err_msg = ''
                else:
                    err_msg = '验证码错误!'
                if err_msg:
                    raise InvalidParamsError(err_msg)
                else:
                    print("登录成功!")

                self.result_key = params.get('身份证号')
                # 保存到meta
                self.result_meta['身份证号'] = params.get('身份证号')
                self.result_meta['密码'] = params.get('密码')

                self.result_identity['task_name'] = '郑州'
                self.result_identity['target_id'] = id_num
                return
            except (AssertionError, InvalidParamsError) as e:
                err_msg = str(e)
        vc = self._new_vc()
        raise AskForParamsError([
            dict(key='身份证号',
                 name='身份证号',
                 cls='input',
                 placeholder='身份证号',
                 value=params.get('身份证号', '')),
            dict(key='密码',
                 name='密码',
                 cls='input:password',
                 value=params.get('密码', '')),
            dict(key='vc',
                 name='验证码',
                 cls='data:image',
                 query={'t': 'vc'},
                 value=params.get('vc', '')),
        ], err_msg)
Example #20
0
    def _unit_login(self, params=None):
        err_msg = None
        params
        if not self.is_start or params:
            # 非开始或者开始就提供了参数
            try:
                self._check_login_params(params)
                id_num = params['用户名']
                password = params['密码']
                vc = params['vc']
                # self._do_login(id_num, password, vc)

                m = hashlib.md5()
                m.update(password.encode(encoding='utf-8'))
                hashpsw = m.hexdigest()
                data = {
                    'password_md5': hashpsw,
                    'username': id_num,
                    'password': password,
                    'imagecode': vc,
                    'ID': '0',
                    'SUBMIT.x': '35',
                    'SUBMIT.y': '8'
                }
                resp = self.s.post(LOGIN_URL,
                                   data=data,
                                   headers={
                                       'Content-Type':
                                       'application/x-www-form-urlencoded',
                                       'Cache-Control': 'max-age=0',
                                       'Upgrade-Insecure-Requests': '1'
                                   },
                                   timeout=20)
                soup = BeautifulSoup(resp.content.decode('gbk'), 'html.parser')

                errormsg = soup.findAll('font')[0].text
                # if errormsg and errormsg != id_num:
                #     raise InvalidParamsError(errormsg)
                if errormsg == id_num:
                    self.g.soup = soup
                else:
                    raise InvalidParamsError(errormsg)

                self.result_key = id_num
                self.result_meta['用户名'] = id_num
                self.result_meta['密码'] = password
                self.result_identity['task_name'] = '上海'
                self.result_identity['target_id'] = id_num

                return
            except (AssertionError, InvalidParamsError) as e:
                err_msg = str(e)

        vc = self._new_vc()
        raise AskForParamsError([
            dict(key='用户名', name='用户名', cls='input'),
            dict(key='密码', name='密码', cls='input:password'),
            dict(key='vc', name='验证码', cls='data:image', query={'t': 'vc'}),
        ], err_msg)
Example #21
0
    def _check_login_params(self, params):
        assert params is not None, '缺少参数'
        assert '用户名' in params, '缺少用户名'
        assert '密码' in params, '缺少密码'
        # other check
        用户名 = params['用户名']
        密码 = params['密码']

        if len(用户名) == 0:
            raise InvalidParamsError('用户名为空,请输入用户名')
        elif len(用户名) < 15:
            raise InvalidParamsError('用户名不正确,请重新输入')

        if len(密码) == 0:
            raise InvalidParamsError('密码为空,请输入密码!')
        elif len(密码) < 6:
            raise InvalidParamsError('密码不正确,请重新输入!')
Example #22
0
    def _check_login_params(self, params):
        assert params is not None, '缺少参数'
        assert '姓名' in params, '缺少姓名'
        assert '身份证号' in params, '缺少身份证号'
        assert '密码' in params, '缺少密码'

        # other check
        姓名 = params['姓名']
        身份证号 = params['身份证号']
        密码 = params['密码']

        if len(姓名) <= 1:
            raise InvalidParamsError('请输入姓名')
        if len(身份证号) < 15 or len(身份证号) > 18:
            raise InvalidParamsError('身份证输入有误')
        if len(密码) < 6:
            raise InvalidParamsError('密码输入有误')
Example #23
0
    def _check_login_params(self, params):
        assert params is not None, '缺少参数'
        assert '身份证号' in params, '缺少身份证号'
        assert '密码' in params, '缺少密码'
        # other check
        身份证号 = params['身份证号']
        密码 = params['密码']

        if len(身份证号) == 0:
            raise InvalidParamsError('身份证号为空,请输入身份证号')
        elif len(身份证号) < 15:
            raise InvalidParamsError('身份证号不正确,请重新输入')

        if len(密码) == 0:
            raise InvalidParamsError('密码为空,请输入密码!')
        elif len(密码) < 6:
            raise InvalidParamsError('密码不正确,请重新输入!')
Example #24
0
    def _check_login_params(self, params):
        assert params is not None, '缺少参数'
        assert '社保号' in params, '缺少社保号'
        assert '密码' in params, '缺少密码'
        # other check
        证件号 = params['社保号']
        密码 = params['密码']

        if len(证件号) == 0:
            raise InvalidParamsError('社保号为空,请输入社保号!')
        elif len(证件号) != 15 and len(证件号) != 18:
            raise InvalidParamsError('社保号不正确,请重新输入!')

        if len(密码) == 0:
            raise InvalidParamsError('密码为空,请输入密码!')
        elif len(密码) < 6:
            raise InvalidParamsError('密码不正确,请重新输入!')
Example #25
0
    def _check_login_params(self, params):
        assert params is not None, '缺少参数'
        assert '证件号码' in params, '缺少证件号码'
        assert '密码' in params, '缺少密码'
        # other check
        证件号码 = params['证件号码']
        密码 = params['密码']

        if len(证件号码) == 0:
            raise InvalidParamsError('证件号码为空,请输入证件号码')
        elif len(证件号码) < 15:
            raise InvalidParamsError('证件号码不正确,请重新输入')

        if len(密码) == 0:
            raise InvalidParamsError('密码为空,请输入密码!')
        elif len(密码) < 6:
            raise InvalidParamsError('密码不正确,请重新输入!')
Example #26
0
    def _unit_login(self, params=None):
        err_msg = None
        if params:
            # 非开始或者开始就提供了参数
            try:
                self._check_login_params(params)
                id_num = params['身份证号']
                account_num = params['个人编号']
                vc = params['vc']

                if account_num.__len__() != 10:
                    raise InvalidParamsError("请录入10位个人编号")

                resp = self.s.post(LOGIN_URL,
                                   data=dict(sfzh=id_num,
                                             grbh=account_num,
                                             yzcode=vc))
                data = resp.json()
                errormsg = data.get('errormsg')
                if errormsg:
                    raise InvalidParamsError(errormsg)

                self.result_key = id_num
                # 保存到meta
                self.result_meta['身份证号'] = id_num
                self.result_meta['个人编号'] = account_num

                self.result_identity['task_name'] = '苏州'
                self.result_identity['target_id'] = id_num

                return
            except (AssertionError, InvalidParamsError) as e:
                err_msg = str(e)

        raise AskForParamsError([
            dict(key='身份证号',
                 name='身份证号',
                 cls='input',
                 value=params.get('身份证号', '')),
            dict(key='个人编号',
                 name='个人编号',
                 cls='input',
                 value=params.get('个人编号', '')),
            dict(key='vc', name='验证码', cls='data:image', query={'t': 'vc'})
        ], err_msg)
Example #27
0
    def _check_login_params(self, params):
        assert params is not None, '缺少参数'
        assert '身份证号' in params, '缺少身份证号'
        assert '个人编号' in params, '缺少个人编号'
        assert 'vc' in params, '缺少验证码'
        # other check
        身份证号 = params['身份证号']
        个人编号 = params['个人编号']

        if len(身份证号) == 0:
            raise InvalidParamsError('身份证号为空,请输入身份证号')
        elif len(身份证号) < 15:
            raise InvalidParamsError('身份证号不正确,请重新输入')

        if len(个人编号) == 0:
            raise InvalidParamsError('个人编号为空,请输入个人编号!')
        elif len(个人编号) < 6:
            raise InvalidParamsError('个人编号不正确,请重新输入!')
Example #28
0
    def _check_login_params(self, params):
        assert params is not None, '缺少参数'
        assert '姓名' in params, '缺少姓名'
        assert '账号' in params, '缺少账号'
        assert '密码' in params, '缺少密码'
        # other check
        姓名 = params['姓名']
        账号 = params['账号']
        密码 = params['密码']
        if len(姓名) > 1:
            raise InvalidParamsError('姓名错误')
        if len(密码) < 4:
            raise InvalidParamsError('用户名或密码错误')

        if len(账号) > 14:
            raise InvalidParamsError('账号错误')
            return
        raise InvalidParamsError('账号或密码错误')
Example #29
0
    def _do_login(self, username, password, vc):
        """使用web driver模拟登录过程"""
        with self.dsc.get_driver_ctx() as driver:
            # 打开登录页
            driver.get(LOGIN_PAGE_URL)
            # 等待lk请求
            WebDriverWait(driver, 10).until(
                value_is_number((By.XPATH, '//*[@id="lk"]')))

            for l in driver.get_log('browser'):
                print(l)

            # 选择身份证号方式登录
            driver.find_element_by_xpath(
                '/html/body/table[2]/tbody/tr[3]/td/table/tbody/tr/td/div/form/div[1]/ul/li[3]/a'
            ).click()

            username_input = driver.find_element_by_xpath('//*[@id="bh1"]')
            password_input = driver.find_element_by_xpath('//*[@id="mm1"]')
            vc_input = driver.find_element_by_xpath(
                '//*[@id="login_tab_2"]/div/div[3]/input')
            submit_btn = driver.find_element_by_xpath(
                '//*[@id="login_tab_2"]/div/div[4]/input[1]')

            # 用户名
            username_input.clear()
            username_input.send_keys(username)

            # 密码
            password_input.clear()
            password_input.send_keys(password)
            vc_input.clear()
            vc_input.send_keys(vc)
            # 提交
            submit_btn.click()

            if not driver.current_url == 'http://www.bjgjj.gov.cn/wsyw/wscx/gjjcx-choice.jsp':
                # FIXME: debug
                for l in driver.get_log('browser'):
                    print(l)
                print(driver.get_cookies())

                # FIXME: 尝试处理alert
                err_msg = '登录失败,请检查输入'
                alert = driver.switch_to.alert
                try:
                    err_msg = alert.text
                    # alert.accept()
                finally:
                    raise InvalidParamsError(err_msg)

            # 登录成功

            # 保存登录后的页面内容供抓取单元解析使用
            self.g.login_page_html = driver.find_element_by_tag_name(
                'html').get_attribute('innerHTML')
            self.g.current_url = driver.current_url
Example #30
0
 def _check_login_params(self, params):
     assert params is not None, '缺少参数'
     assert '账号' in params, '缺少账号'
     assert '密码' in params, '缺少密码'
     # other check
     账号 = params['账号']
     密码 = params['密码']
     if len(密码) < 4:
         raise InvalidParamsError('账号或密码错误')
     if 账号.isdigit():
         if len(账号) < 15:
             raise InvalidParamsError('身份证错误')
         return
     if '@' in 账号:
         if not 账号.endswith('@hz.cn'):
             raise InvalidParamsError('市民邮箱错误')
         return
     raise InvalidParamsError('账号或密码错误')