示例#1
0
class yanzhengma(object):
    """docstring for yanzhengma"""
    def __init__(self, browser):
        super(yanzhengma, self).__init__()
        # self.arg = arg
        self.browser = browser

        # 用户名
        username = '******'
        # 密码
        password = '******'
        # 软件ID,开发者分成必要参数。登录开发者后台【我的软件】获得!
        appid = 3035
        # 软件密钥,开发者分成必要参数。登录开发者后台【我的软件】获得!
        appkey = '0856355e1dd686e7819093bcd2843176'
        # 图片文件
        # filename	= 'getimage.jpg'
        # 验证码类型,# 例:1004表示4位字母数字,不同类型收费不同。请准确填写,否则影响识别率。在此查询所有类型 http://www.yundama.com/price.html
        # codetype	= 1004
        self.codetype = 5000
        # 超时时间,秒
        self.timeout = 60

        # 初始化
        self.yundama = YDMHttp(username, password, appid, appkey)

        # 登陆云打码
        uid = self.yundama.login()
        print 'uid: %s' % uid
        # 查询余额
        balance = self.yundama.balance()
        print 'balance: %s' % balance

    def recognise(self, imgfilename):

        # 开始识别,图片路径,验证码类型ID,超时时间(秒),识别结果
        cid, result = self.yundama.decode(imgfilename, self.codetype,
                                          self.timeout)
        print 'cid: %s, result: %s' % (cid, result)
        result = str(result)
        # print result
        result = result.replace('c_char_p', '')
        result = result.replace('(', '')
        result = result.replace(')', '')
        result = result.replace('\'', '')

        img_to_text = result

        #得到的是原始对象,使用原始的send_keys方法发送消息
        self.browser.getelementbycss('#ccode').send_keys(img_to_text.decode())
        time.sleep(0.3)
        self.browser.getelementbycss('#Button1').send_keys(Keys.ENTER)
        time.sleep(0.3)
示例#2
0
from yundama import YDMHttp

ydm = YDMHttp(username='******', password='******')
uid = ydm.login()
if not uid:
    print("登录失败!")

balance = ydm.balance()
if balance < 10:
    print("余额不足!")

_, result = ydm.decode(filename='image.jpg', codetype="3004")
print(result)
示例#3
0
class ReadFree(object):
    def __init__(self):
        self.url = 'http://readfree.me/accounts/login/?next=/'
        self.headers = {
            "Accept":
            "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
            "Accept-Encoding":
            "gzip, deflate",
            "Accept-Language":
            "zh-CN,zh;q=0.9,en-GB;q=0.8,en;q=0.7,ja;q=0.6",
            "Cache-Control":
            "max-age=0",
            "Connection":
            "keep-alive",
            "Host":
            "readfree.me",
            "Upgrade-Insecure-Requests":
            "1",
            "User-Agent":
            "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
        }
        self.s = requests.Session()
        self.yundama = YDMHttp()
        self.verify_code_url = ''
        self.verify_code_id = ''
        self.captcha_id = ''
        self.result = ''

    def to_douban(self):
        t = self.s.get(self.url, headers=self.headers)
        selector = etree.HTML(t.text)
        douban_url = urljoin(self.url,
                             selector.xpath(".//*/a[text()='豆瓣登录']/@href")[0])
        douban_response = self.s.get(douban_url)
        douban_selector = etree.HTML(douban_response.text)

        self.verify_code_url = douban_selector.xpath(
            ".//*/img[@id='captcha_image']/@src")
        self.verify_code_id = douban_selector.xpath(
            ".//*/input[@name='captcha-id']/@value")
        if self.verify_code_url and self.verify_code_id:
            verify_code_res = requests.get(self.verify_code_url[0])
            self.captcha_id = self.verify_code_id[0]
            with open('douban.png', 'wb') as f:
                f.write(verify_code_res.content)
        try:
            self.yundama.login()
            self.result = self.yundama.decode('douban.png')
        except Exception as e:
            logger.error('云打码出错, 不能登录或者识别验证码失败', exc_info=True)
        douban_form_state = douban_selector.xpath(
            "substring-before(substring-after(.//*/form[@id='refuse_form']/@action, '?state='), '&')"
        )
        if douban_form_state:
            douban_state = douban_form_state
            to_readfree_url = 'https://www.douban.com/service/auth2/auth?state=' + douban_state + '&redirect_uri=http://readfree.me/auth/douban/login/callback/&scope=&client_id=018746ee51b1a6ad0495d4caf514f407&response_type=code'
        else:
            to_readfree_url = None
        return to_readfree_url

    def to_readfree(self):
        to_readfree_url = self.to_douban()
        if self.verify_code_id:
            data = {
                "user_alias": "*****",
                "user_passwd": "***",
                "captcha-id": self.captcha_id,
                "captcha-solution": self.result[1],
                "confirm": "授权"
            }
        else:
            data = {
                "user_alias": "****",
                "user_passwd": "****",
                "confirm": "授权"
            }

        if to_readfree_url:
            response = self.s.post(to_readfree_url, data=data)
            if '亚马逊' in response.url:
                response = self.s.get('http://readfree.me/')
            elif 'readfree' in response.url:
                logger.info('没有跳转到亚马逊')
            readfree_selector = etree.HTML(response.text)
            user_url = readfree_selector.xpath(".//*/a[text()='个人中心']/@href")
            return user_url

    def get_score(self):
        user_url = self.to_readfree()
        if user_url:
            url = urljoin('http://readfree.me', user_url[0])
            user_page_res = self.s.get(url, headers=self.headers)
            score_selector = etree.HTML(user_page_res.text)
            score = score_selector.xpath(
                "substring-before(substring-after(.//*/div[@class='clearfix']/following-sibling::p[1]/text(), '剩余额度:'), ',')"
            )
            return str(score).strip() if score else None

    def mail_run(self):
        email = EMAIL()
        score = self.get_score()
        balance = self.yundama.balance()
        time = datetime.now() + timedelta(days=-1)
        if balance < 10 and score:
            contents = '{0} 云打码余额为: {1}, 余额已经不足请尽快充值。'.format(
                time.strftime('%Y-%m-%d %H:%M'), balance)
        elif balance <= 0 and score:
            contents = '{0} 云打码余额为: {1}, 余额已经不足,无法用于下次验证。\n现在积分为{2}。'.format(
                time.strftime('%Y-%m-%d %H:%M'), balance, score)
        elif balance >= 10 and score:
            contents = '{0} 云打码余额为: {1}, 余额较为充裕。\n现在ReadFree额度为{2}。'.format(
                time.strftime('%Y-%m-%d %H:%M'), balance, score)
        else:
            contents = '{0} 没有获取到ReadFree额度。'.format(
                time.strftime('%Y-%m-%d %H:%M'))
        try:
            email.send(contents, config['email_subject1'])
        except Exception as e:
            logger.error('邮件模块出现问题,不能正常发送邮件', exc_info=True)
        else:
            logger.info('邮件发送成功\n')