def single_page_members(self, page_number=1):
        """获取单个页面内的小组成员信息

        :param page_number: 页码
        :return: 包含小组成员信息的列表

        返回值示例: ::

            [{
                'id': 123,                  # member_id
                'username': 'jim',          # username
                'nickname': 'Jim',          # 昵称
                'role': u'小组长',          # 身份
                'points': 1234,             # 贡献成长值
                'days': 100,                # 组龄
                'rate': 99.9,               # 打卡率
                'checked_yesterday': True,  # 昨天是否打卡
                'checked': False,           # 今天是否打卡
            }, {
                # ...
            }]


        """
        url = '%s?page=%s' % (self.dismiss_url, page_number)
        html = self.request(url).text
        soup = BeautifulSoup(html)
        members_html = soup.find(id='members')
        if not members_html:
            return []

        def get_tag_string(html, class_, tag='td', n=0):
            """获取单个 tag 的文本数据"""
            return html.find_all(tag, class_=class_)[n].get_text().strip()

        members = []
        # 获取成员信息
        for member_html in members_html.find_all('tr', class_='member'):
            _id = member_html.attrs['data-id']
            try:
                user_url = member_html.find_all('td', class_='user'
                                                )[0].find('a').attrs['href']
                username = self.get_username('http://www.shanbay.com'
                                             + user_url)
            except Exception as e:
                logger.exception(e)
                username = ''
            try:
                nickname = get_tag_string(member_html, 'nickname', 'a')
            except Exception as e:
                logger.exception(e)
                nickname = username
            try:
                role = member_html.find_all('td', class_='user'
                                            )[0].find_all('span', class_='label'
                                                          )[0].get_text().strip()
            except IndexError:
                role = ''
            except Exception as e:
                logger.exception(e)
                role = ''

            member = {
                'id': int(_id),
                'username': username,
                # 昵称
                'nickname': nickname,
                # 身份
                'role': role,
                # 贡献成长值
                'points': int(get_tag_string(member_html, 'points')),
                # 组龄
                'days': int(get_tag_string(member_html, 'days')),
                # 打卡率
                'rate': float(get_tag_string(member_html, 'rate'
                                             ).split('%')[0]),
                # 昨天是否打卡
                'checked_yesterday': get_tag_string(member_html, 'checked'
                                                    ) != '未打卡',
                # 今天是否打卡
                'checked': get_tag_string(member_html, 'checked',
                                          n=1) != '未打卡',
            }
            members.append(member)
        return members