Ejemplo n.º 1
0
    def searchProduct(self, keywords):
        url = 'http://s.1688.com/selloffer/offer_search.htm'
        postdata = {'keywords': keywords.encode('gbk')}
        product = CompanyFromProduct(url, postdata)
        page, maxpage = product.getFirstPageData()
        pages = []
        pages.append(page)
        # for debug, in release please remove counter
        counter = 3
        finished = 1
        self.runStatus[self.taskName] = (finished / maxpage) * 50
        while page and counter > 0:
            page = product.getNextPageData(page)
            pages.append(page)
            counter -= 1
            finished += 1
            self.runStatus[self.taskName] = (finished / maxpage) * 50

        with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
            futures = {executor.submit(GetCompanies,
                                       product,
                                       page): page for page in pages}
            maxnumer = len(futures) + maxpage
            
            for future in concurrent.futures.as_completed(futures):
                try:
                    ents = future.result()
                except Exception as exc:
                    debug.error(str(exc))
                else:
                    finished += 1
                    pc = (finished / maxnumer) * 100
                    self.runStatus[self.taskName] = pc
                    for ent in ents:
                        ent.save()
Ejemplo n.º 2
0
 def __init__(self, confFile):
     self.conf_file = confFile
     if os.path.exists(confFile):
         self.cf = configparser.ConfigParser()
         self.cf.read(confFile, encoding='utf8')
     else:
         debug.error('%s not found' % confFile)
Ejemplo n.º 3
0
 def _storeToDefault(self, task):
     try:
         taskfile = self.appContext.getDefaultTaskFile()
         with open(taskfile, 'wb') as f:
             pickle.dump(task, f)
     except Exception as e:
         debug.error('Error write %s %s' % (taskfile, str(e)))
Ejemplo n.º 4
0
    def get_verification_code_pic(self):
        try:
            getData = {}
            getData['key'] = self.get_tag_value("input", {'id': 'captchaKey'})
            getData['format'] = self.get_tag_value("input",
                                                   {'id': "captchaFormat"})
            timeStamp = str(time.time()).replace('.', '')
            getData['t'] = timeStamp
            if not self.geniusbarUrl:
                self.geniusbarUrl = self.get_geniusbar_url()

            url = "%s/captcha?&%s" % (self.geniusbarUrl,
                                      urllib.urlencode(getData))

            if not self.pageHeader:
                self.pageHeader = GeniusbarPage.headers
            headers = self.pageHeader
            headers['Accept'] = 'image/png,image/*;q=0.8,*/*;q=0.5'
            headers['Accept-Encoding'] = 'gzip, deflate'
            request = urllib2.Request(url, headers=headers)
            try:
                data = urllib2.urlopen(request).read()
            except:
                debug.debug('read pic err')
            return (data, timeStamp)
        except Exception as e:
            debug.error(str(e))
            return (None, None)
Ejemplo n.º 5
0
 def accept(self):
     confhelper = ConfHelper()
     appleid = str(self.ui.lEAccount.text())
     accounts = confhelper.getAccounts(self.accountfile)
     account = {}
     account['id'] = str(len(accounts)+1)
     account['appleid'] = appleid
     account['passwd'] = str(self.ui.lEPasswd.text())
     account['governmentid'] = str(self.ui.lEGovId.text())
     account['phonenumber'] = str(self.ui.lEPhoneNumber.text())
     accounts[account['id']] = account
     isOk = True
     for key, val in account.items():
         if not val:
             isOk = False
             debug.debug('Please type %s' % key)
             QtGui.QMessageBox.warning(self, "Info",
                                       "Please input %s" % key,
                                       QtGui.QMessageBox.Yes)
             break
     if isOk:
         confhelper.addAccounts(self.accountfile, accounts)
         super(AddAccountDLG, self).accept()
     else:
         debug.error('empty field')
Ejemplo n.º 6
0
 def accept(self):
     confhelper = ConfHelper()
     appleid = str(self.ui.lEAccount.text())
     accounts = confhelper.getAccounts(self.accountfile)
     account = {}
     account['id'] = str(len(accounts) + 1)
     account['appleid'] = appleid
     account['passwd'] = str(self.ui.lEPasswd.text())
     account['governmentid'] = str(self.ui.lEGovId.text())
     account['phonenumber'] = str(self.ui.lEPhoneNumber.text())
     accounts[account['id']] = account
     isOk = True
     for key, val in account.items():
         if not val:
             isOk = False
             debug.debug('Please type %s' % key)
             QtGui.QMessageBox.warning(self, "Info",
                                       "Please input %s" % key,
                                       QtGui.QMessageBox.Yes)
             break
     if isOk:
         confhelper.addAccounts(self.accountfile, accounts)
         super(AddAccountDLG, self).accept()
     else:
         debug.error('empty field')
Ejemplo n.º 7
0
    def getDetails(self, ent):
        try:
            pageParser = CompanyPageParser(ent.company_website)
            certifUrl = pageParser.getCertifyInfoUrl()

            pageParser = CertifiactePageParser(certifUrl)
            pageParser.parserInfo()
            ent.company_contacts = pageParser.contactPerson
            ent.company_mobile_phone = pageParser.mobilePhone
            ent.company_phone_number = pageParser.phoneNumber

            yellowpageUrl = pageParser.getYellowPageUrl()
            pageParser = YellowPageParser(yellowpageUrl)

            contactUrl = pageParser.getContactInfoUrl()
            pageParser = ContactInfoPageParser(contactUrl)
            contactinfo = pageParser.getContactInfo()
            if not ent.company_mobile_phone:
                ent.company_mobile_phone = contactinfo.mobilePhone
            if not ent.company_phone_number:
                ent.company_phone_number = contactinfo.phoneNumber
            ent.company_fax = contactinfo.faxNumber
            ent.company_postcode = contactinfo.postcode
            ent.company_addr = contactinfo.address

        except AttributeError as e:
            debug.error('AttributeError %s' % str(e))

        return ent
Ejemplo n.º 8
0
    def get_verification_code_pic(self):
        try:
            getData = {}
            getData['key'] = self.get_tag_value("input", {'id': 'captchaKey'})
            getData['format'] = self.get_tag_value("input",
                                                   {'id': "captchaFormat"})
            timeStamp = str(time.time()).replace('.', '')
            getData['t'] = timeStamp
            if not self.geniusbarUrl:
                self.geniusbarUrl = self.get_geniusbar_url()

            url = "%s/captcha?&%s" % (self.geniusbarUrl,
                                      urllib.urlencode(getData))

            if not self.pageHeader:
                self.pageHeader = GeniusbarPage.headers
            headers = self.pageHeader
            headers['Accept'] = 'image/png,image/*;q=0.8,*/*;q=0.5'
            headers['Accept-Encoding'] = 'gzip, deflate'
            request = urllib2.Request(url, headers=headers)
            try:
                data = urllib2.urlopen(request).read()
            except:
                debug.debug('read pic err')
            return (data, timeStamp)
        except Exception as e:
            debug.error(str(e))
            return (None, None)
Ejemplo n.º 9
0
    def submit(self):
        taskStatus = self._getCurrentTaskStatus()
        if taskStatus:
            captcha = self.lECaptchaAnswer.text()
            taskStatus['captchaAnswer'] = str(captcha)
            phoneNumber = self.lEPhoneNumber.text()
            taskStatus['phoneNumber'] = str(phoneNumber)
            taskStatus['smsCode'] = str(self.lESmsCode.text())
            taskStatus['clientTimezone'] = 'Asia/Shanghai'
            taskStatus['countryISDCode'] = '86'
            taskStatus['cmdStatus'] = None
            taskStatus['taskCmd'] = 'submit'
            timer = 30
            while not taskStatus['cmdStatus'] and timer > 0:
                time.sleep(1)
                #debug.debug('check cmdStatus')
                timer -= 1
            print('end check cmdStatus')
            if taskStatus['cmdStatus'] == 'NOK':
                debug.info('submit error')
                debug.info(taskStatus['prompInfo'])
                self.refresh()

            elif taskStatus['cmdStatus'] == 'OK':
                result = taskStatus['timeSlots']
                self.fillTableWidget(result[0], result[1])
                self.showTimeSlots(1)
            else:
                debug.error('submit task error')

        else:
            debug.error('submit error')
Ejemplo n.º 10
0
    def submit(self):
        taskStatus = self._getCurrentTaskStatus()
        if taskStatus:
            captcha = self.lECaptchaAnswer.text()
            taskStatus['captchaAnswer'] = str(captcha)
            phoneNumber = self.lEPhoneNumber.text()
            taskStatus['phoneNumber'] = str(phoneNumber)
            taskStatus['smsCode'] = str(self.lESmsCode.text())
            taskStatus['clientTimezone'] = 'Asia/Shanghai'
            taskStatus['countryISDCode'] = '86'
            taskStatus['cmdStatus'] = None
            taskStatus['taskCmd'] = 'submit'
            timer = 30
            while not taskStatus['cmdStatus'] and timer > 0:
                time.sleep(1)
                #debug.debug('check cmdStatus')
                timer -= 1
            print('end check cmdStatus')
            if taskStatus['cmdStatus'] == 'NOK':
                debug.info('submit error')
                debug.info(taskStatus['prompInfo'])
                self.refresh()

            elif taskStatus['cmdStatus'] == 'OK':
                result = taskStatus['timeSlots']
                self.fillTableWidget(result[0], result[1])
                self.showTimeSlots(1)
            else:
                debug.error('submit task error')

        else:
            debug.error('submit error')
Ejemplo n.º 11
0
 def _storeToDefault(self, task):
     try:
         taskfile = self.appContext.getDefaultTaskFile()
         with open(taskfile, 'wb') as f:
             pickle.dump(task, f)
     except Exception as e:
         debug.error('Error write %s %s' % (taskfile, str(e)))
Ejemplo n.º 12
0
 def fillResultView(self, appleId):
     currentTaskName = self.appContext.getCurrentTaskName()
     results = self.reserverResult.getData(currentTaskName)
     if not results:
         debug.info('Can not find %s' % currentTaskName)
         return
     findResult = None
     for result in results:
         if appleId in result.values():
             findResult = result
     if not findResult:
         debug.error('can not found verifyData %s,%s'
                     % (appleId, currentTaskName))
         return
     verifyData = findResult['verifyCodeData']
     if verifyData:
         self.fillVerifyCodePic(verifyData)
     else:
         debug.debug('can not get verfiy pic')
     smsMsg = findResult['smsMsg']
     if smsMsg:
         self.pTSmsChallengeTip.setPlainText(smsMsg)
     else:
         debug.error('Can not found smsMsg %s %s'
                     % (appleId, currentTaskName))
Ejemplo n.º 13
0
 def fillResultView(self, appleId):
     currentTaskName = self.appContext.getCurrentTaskName()
     results = self.reserverResult.getData(currentTaskName)
     if not results:
         debug.info('Can not find %s' % currentTaskName)
         return
     findResult = None
     for result in results:
         if appleId in result.values():
             findResult = result
     if not findResult:
         debug.error('can not found verifyData %s,%s' %
                     (appleId, currentTaskName))
         return
     verifyData = findResult['verifyCodeData']
     if verifyData:
         self.fillVerifyCodePic(verifyData)
     else:
         debug.debug('can not get verfiy pic')
     smsMsg = findResult['smsMsg']
     if smsMsg:
         self.pTSmsChallengeTip.setPlainText(smsMsg)
     else:
         debug.error('Can not found smsMsg %s %s' %
                     (appleId, currentTaskName))
Ejemplo n.º 14
0
def display_json(filename, display_indent=4):
    json_val = jsonToDict(filename)
    if json_val:
        message.success(filename + ' loaded successfully')
        printy(json_val, indentation=display_indent)
    else:
        message.error('JSON couldn\'t be loaded')
        debug.error('JSON to Dict Failed')
Ejemplo n.º 15
0
 def get_tag_text(self, taglabel, attrs):
     soup = self.get_soup()
     try:
         tag = soup.find(taglabel, attrs=attrs)
         return tag.text
     except AttributeError as e:
         debug.error('cannot find %s %s %s' %
                     (taglabel, str(attrs), str(e)))
         return None
Ejemplo n.º 16
0
 def select(self, sql):
     try:
         cursor = self.db.cursor()
         cursor.execute(sql)
         debug.debug(sql)
         return cursor.fetchall()
     except sqlite3.OperationalError as e:
         debug.error(str(e))
         return []
Ejemplo n.º 17
0
 def get_tag_text(self, taglabel, attrs):
     soup = self.get_soup()
     try:
         tag = soup.find(taglabel, attrs=attrs)
         return tag.text
     except AttributeError as e:
         debug.error('cannot find %s %s %s' %
                     (taglabel, str(attrs), str(e)))
         return None
Ejemplo n.º 18
0
def dictToJson(inputDict, filename, indents=2):
    try:
        with open(filename, 'w') as fh2:
            fh2.write(json.dumps(inputDict, indent=indents, sort_keys=True))
        message.success('Keys stored successfully')
        return True
    except Exception as e:
        message.error('Couldn\'t write to JSON')
        debug.error(str(e))
        return False
Ejemplo n.º 19
0
def keygen():
    try:
        #generating the key and storing them in a file
        key = Fernet.generate_key()
        message.success("Encryption key generated successfully")
    except Exception as e:
        message.error('Couldn\'t generate encryption key')
        debug.error(str(e))
        return False
    return key.decode('utf-8')
Ejemplo n.º 20
0
    def Jump_login_page(self, supporturl, taskStatus=None):
        self.initUrls()
        self.taskStatus = taskStatus
        self.update_progress(10)
        supportPage = self.get_techsupport_page(supporturl)
        self.update_progress(20)
        # get selected store
        self.post_reserv_page(supportPage)
        # ###
        self.update_progress(30)
        getGeniusbarPage = self.get_geniusbar_page(supportPage)
        self.update_progress(40)

        postGeniusPage = self.post_geniusbar_page(getGeniusbarPage)
        self.update_progress(50)
        # # auth
        authPage = self.post_anth_page(postGeniusPage)
        self.update_progress(60)

        # ## send governmentId
        governmentUrl = self.govUrlFormat % GeniusbarPage.storeNumber
        govPage = self.post_governmenid(governmentUrl, authPage)
        self.update_progress(70)
        smschallengePage = self.post_smschallenge(govPage)
        # Writefile('tmp/smschallengepage.html', smschallengePage.get_data())
        self.update_progress(80)
        text = smschallengePage.get_smschalleng_steps()
        if not text:
            msg = 'Reserved failed %s' % self.taskStatus['appleId']
            debug.error(msg)
            self.taskStatus['prompInfo'] = msg
            self.update_progress(100)
            # self.waitingCmd(smschallengePage, taskStatus)
            return None
        self.taskStatus['prompInfo'] = text
        self.update_progress(85)
        attrs = {'class': "ValidatedField SmsCode"}
        if not smschallengePage.check('div', attrs):
            # get validcode picture
            self.update_progress(86)
            verifyData, tSt = smschallengePage.get_verification_code_pic()
            self.update_progress(87)
            if verifyData:
                self.taskStatus['verifyCodeData'] = verifyData
                # WriteVerifyPic('tmp/%s.jpg' % tSt, verifyData)
                self.update_progress(100)
                self.waitingCmd(smschallengePage, taskStatus)
                # get the smschallenge info phone number
            else:
                debug.error('verfyData error')
            self.update_progress(100)
            return verifyData

        self.update_progress(100)
        return None
Ejemplo n.º 21
0
    def Jump_login_page(self, supporturl, taskStatus=None):
        self.initUrls()
        self.taskStatus = taskStatus
        self.update_progress(10)
        supportPage = self.get_techsupport_page(supporturl)
        self.update_progress(20)
        # get selected store
        self.post_reserv_page(supportPage)
        # ###
        self.update_progress(30)
        getGeniusbarPage = self.get_geniusbar_page(supportPage)
        self.update_progress(40)

        postGeniusPage = self.post_geniusbar_page(getGeniusbarPage)
        self.update_progress(50)
        # # auth
        authPage = self.post_anth_page(postGeniusPage)
        self.update_progress(60)

        # ## send governmentId
        governmentUrl = self.govUrlFormat % GeniusbarPage.storeNumber
        govPage = self.post_governmenid(governmentUrl, authPage)
        self.update_progress(70)
        smschallengePage = self.post_smschallenge(govPage)
        # Writefile('tmp/smschallengepage.html', smschallengePage.get_data())
        self.update_progress(80)
        text = smschallengePage.get_smschalleng_steps()
        if not text:
            msg = 'Reserved failed %s' % self.taskStatus['appleId']
            debug.error(msg)
            self.taskStatus['prompInfo'] = msg
            self.update_progress(100)
            # self.waitingCmd(smschallengePage, taskStatus)
            return None
        self.taskStatus['prompInfo'] = text
        self.update_progress(85)
        attrs = {'class': "ValidatedField SmsCode"}
        if not smschallengePage.check('div', attrs):
            # get validcode picture
            self.update_progress(86)
            verifyData, tSt = smschallengePage.get_verification_code_pic()
            self.update_progress(87)
            if verifyData:
                self.taskStatus['verifyCodeData'] = verifyData
                # WriteVerifyPic('tmp/%s.jpg' % tSt, verifyData)
                self.update_progress(100)
                self.waitingCmd(smschallengePage, taskStatus)
                # get the smschallenge info phone number
            else:
                debug.error('verfyData error')
            self.update_progress(100)
            return verifyData

        self.update_progress(100)
        return None
Ejemplo n.º 22
0
 def saveTask(self, tasks):
     for task in tasks:
         fileName = self.mkTaskListName(task.taskName)
         debug.debug('save task %s' % fileName)
         taskdir = self.appContext.getTaskStoreDir()
         taskfile = os.path.join(taskdir, fileName)
         try:
             with open(taskfile, 'wb') as f:
                 pickle.dump(task, f)
         except Exception as e:
             debug.error('Error write %s %s' % (taskfile, str(e)))
Ejemplo n.º 23
0
 def saveTask(self, tasks):
     for task in tasks:
         fileName = self.mkTaskListName(task.taskName)
         debug.debug('save task %s' % fileName)
         taskdir = self.appContext.getTaskStoreDir()
         taskfile = os.path.join(taskdir, fileName)
         try:
             with open(taskfile, 'wb') as f:
                 pickle.dump(task, f)
         except Exception as e:
             debug.error('Error write %s %s' % (taskfile, str(e)))
Ejemplo n.º 24
0
 def _deleteTaskList(self, taskName):
     del self.tasks[taskName]
     self.updateTaskTableWidget()
     #del taskfile
     filedir = self.appContext.getTaskStoreDir()
     filedir = os.path.join(filedir, self.mkTaskListName(taskName))
     try:
         debug.debug('delete %s' % filedir)
         os.remove(filedir)
     except Exception as e:
         debug.error('Can not del %s %s' % (filedir, str(e)))
Ejemplo n.º 25
0
def get_value(soup,idname, tagname='input', attrs=None):
    tmpattrs = None
    if attrs:
        tmpattrs = attrs
    else:
        tmpattrs = {'id': idname}
    try:
        result = soup.find(tagname, attrs=tmpattrs)
        return result.get('value')
    except AttributeError as e:
        debug.error('tagname %s %s' % (tagname, str(e)))
Ejemplo n.º 26
0
 def getTasksFromdisk(self, taskfiles):
     debug.debug('read taskfiles %s' % taskfiles)
     tasks = {}
     for taskfile in taskfiles:
         try:
             with open(taskfile, 'rb') as f:
                 task = pickle.load(f)
                 tasks[task.taskName] = task
         except Exception as e:
             debug.error('can not found %s %s' % (taskfile, str(e)))
     return tasks
Ejemplo n.º 27
0
 def getTasksFromdisk(self, taskfiles):
     debug.debug('read taskfiles %s' % taskfiles)
     tasks = {}
     for taskfile in taskfiles:
         try:
             with open(taskfile, 'rb') as f:
                 task = pickle.load(f)
                 tasks[task.taskName] = task
         except Exception as e:
             debug.error('can not found %s %s' % (taskfile, str(e)))
     return tasks
Ejemplo n.º 28
0
def get_value(soup, idname, tagname='input', attrs=None):
    tmpattrs = None
    if attrs:
        tmpattrs = attrs
    else:
        tmpattrs = {'id': idname}
    try:
        result = soup.find(tagname, attrs=tmpattrs)
        return result.get('value')
    except AttributeError as e:
        debug.error('tagname %s %s' % (tagname, str(e)))
Ejemplo n.º 29
0
 def _deleteTaskList(self, taskName):
     del self.tasks[taskName]
     self.updateTaskTableWidget()
     #del taskfile
     filedir = self.appContext.getTaskStoreDir()
     filedir = os.path.join(filedir, self.mkTaskListName(taskName))
     try:
         debug.debug('delete %s' % filedir)
         os.remove(filedir)
     except Exception as e:
         debug.error('Can not del %s %s' % (filedir, str(e)))
Ejemplo n.º 30
0
 def getDefaultTask(self):
     if self.defultTask:
         return self.defultTask
     # read from dump file
     taskfile = self.appContext.getDefaultTaskFile()
     try:
         with open(taskfile, 'rb') as f:
             self.defultTask = pickle.load(f)
             return self.defultTask
     except Exception as e:
         debug.error('can not found %s %s' % (taskfile, str(e)))
     return None
Ejemplo n.º 31
0
 def getDefaultTask(self):
     if self.defultTask:
         return self.defultTask
     # read from dump file
     taskfile = self.appContext.getDefaultTaskFile()
     try:
         with open(taskfile, 'rb') as f:
             self.defultTask = pickle.load(f)
             return self.defultTask
     except Exception as e:
         debug.error('can not found %s %s' % (taskfile, str(e)))
     return None
Ejemplo n.º 32
0
 def _getSoup(self):
     counter = 3
     while counter > 0:
         try:
             response = request.urlopen(self.pageUrl)
             html = response.read()
             data = html.decode('gbk', 'ignore').replace('&nbsp', '')
             data = data.encode('utf-8')
             self.data = data
             self.soup = BeautifulSoup(markup=data)
             return self.soup
         except Exception as e:
             debug.error('%s %s will retry again' % (self.pageUrl, str(e)))
             counter -= 1
Ejemplo n.º 33
0
 def getData(self):
     if self.data:
         return self.data
     counter = 3
     while counter > 0:
         try:
             response = request.urlopen(self.pageUrl)
             html = response.read()
             data = html.decode('gbk', 'ignore').replace('&nbsp', '')
             data = data.encode('utf-8')
             return data
         except Exception as e:
             debug.error('%s %s will retry again' % (self.pageUrl, str(e)))
             counter -= 1
Ejemplo n.º 34
0
 def getTaskResult(self, appleId):
     currentTaskName = self.appContext.getCurrentTaskName()
     results = self.reserverResult.getData(currentTaskName)
     if not results:
         debug.info('Can not find %s' % currentTaskName)
         return
     findResult = None
     for result in results:
         if appleId in result.values():
             findResult = result
     if not findResult:
         debug.error('can not found verifyData %s,%s' %
                     (appleId, currentTaskName))
         return
     return findResult
Ejemplo n.º 35
0
def decryption(key, filename):
    try:
        with open(filename,'rb') as f:
            data = f.read()
        q = Fernet(key)
        decrypted_message = q.decrypt(data)
        with open(filename,'wb') as f:
            f.write(decrypted_message)
        message.success(filename + ' successfully decrypted')
    except Exception as e:
        message.error(filename + ' couldn\'t be decrypted')
        debug.error(filename + ' couldn\'t be decrypted')
        print(e)
        return False
    return True
Ejemplo n.º 36
0
 def getTaskResult(self, appleId):
     currentTaskName = self.appContext.getCurrentTaskName()
     results = self.reserverResult.getData(currentTaskName)
     if not results:
         debug.info('Can not find %s' % currentTaskName)
         return
     findResult = None
     for result in results:
         if appleId in result.values():
             findResult = result
     if not findResult:
         debug.error('can not found verifyData %s,%s'
                     % (appleId, currentTaskName))
         return
     return findResult
Ejemplo n.º 37
0
    def getNextPage(self, page):
        if not page:
            return None

        attrs = {'class': 'page-next'}
        item = page.find('a', attrs=attrs)
        if item:
            nexpage = item.get('href')
            counter = 3
            while counter > 0:
                try:
                    page = PageParser(nexpage).getSoup()
                    return page
                except Exception as e:
                    debug.error('%s will retry' % str(e))
                    counter -= 1
Ejemplo n.º 38
0
 def getFirstPage(self):
     postdata = parse.urlencode(self.keyWords)
     postdata = postdata.encode(encoding='utf-8')
     req = request.Request(url=self.url, data=postdata)
     counter = 3
     while counter > 0:
         try:
             result = request.urlopen(req).read()
             result = result.decode('gbk', 'ignore').encode('utf-8')
             page = BeautifulSoup(result)
             numberOfPage = self.getNumberOfPages(page)
             debug.output('first page max number %s' % numberOfPage)
             return (page, numberOfPage)
         except Exception as e:
             debug.error('%s will retry' % str(e))
             counter -= 1
Ejemplo n.º 39
0
def storeKey(key, filename = STORE_KEY_F):
    storeTo = os.path.join (STORAGE_DIR, filename) + "_keys.key"
    if init_default_key_storage():
        try:
            #creating the key file in which the key'll be stored
            file = open(storeTo,'w')
            file.write(key)
            file.close()
            message.success("Key was stored to " + storeTo + " successfully")
        except Exception as e:
            message.error("Key couldn't be stored to " + storeTo)
            debug.error("Key couldn't be stored to " + storeTo)
            return False
        return True
    else:
        return False
Ejemplo n.º 40
0
 def get_smschalleng_steps(self, data=None):
     soup = self.get_soup(data)
     tag = soup.find('div', {'class': "info"})
     if not tag:
         return None
     try:
         text = tag.getText().replace(' ', '')
         pos = text.find(u'第1步')
         pose = text.find(u'第2步')
         text = text[pos:pose]
         text = text[text.find(':'):]
         text = text.replace(':', '\n').replace(':', '\n')
         return text
     except Exception as e:
         debug.error('get_challeng_steps function: %s' % str(e))
         return None
Ejemplo n.º 41
0
def encryption(key, filename):
    try:
        with open(filename, 'rb') as f:
            data = f.read()
        #encrypting the data from the given file name
        fernet = Fernet(key)
        encrypted=fernet.encrypt(data)    
        with open(filename,'wb') as f:
            f.write(encrypted)
        message.success(filename + ' successfully encrypted')
    except Exception as e:
        message.error(filename + ' couldn\'t be encrypted')
        debug.error(filename + ' couldn\'t be encrypted')
        print (e)
        return False
    return True
Ejemplo n.º 42
0
 def get_smschalleng_steps(self, data=None):
     soup = self.get_soup(data)
     tag = soup.find('div', {'class': "info"})
     if not tag:
         return None
     try:
         text = tag.getText().replace(' ', '')
         pos = text.find(u'第1步')
         pose = text.find(u'第2步')
         text = text[pos: pose]
         text = text[text.find(':'):]
         text = text.replace(':', '\n').replace(':', '\n')
         return text
     except Exception as e:
         debug.error('get_challeng_steps function: %s' % str(e))
         return None
Ejemplo n.º 43
0
def getKey(filename = STORE_KEY_F):
    getFrom = os.path.join (STORAGE_DIR, filename) + "_keys.key"
    if init_default_key_storage():
        try:
            # retriving key file
            file = open (getFrom, 'r')
            key = file.read ()
            file.close ()
            message.success ('Loaded encryption key successfully')
            return key
        except:
            message.error ('Couldn\'t load encryption key')
            debug.error ('Couldn\'t load encryption key')
            return False
    else:
        message.error ('Couldn\'t load encryption key')
        debug.error ('Couldn\'t load encryption key')
        return False
Ejemplo n.º 44
0
 def _read_page(self):
     self.init_cookie()
     if self.post_data:
         debug.debug('post %s' % self.url)
     else:
         debug.debug('read %s' % self.url)
     req = urllib2.Request(self.url,
                           data=self.post_data,
                           headers=self.headers)
     counter = 3
     while counter > 0:
         try:
             res = urllib2.urlopen(req, data=None, timeout=self.timeout)
             data = res.read()
             return data
         except Exception as e:
             debug.info(str(e))
             counter -= 1
     debug.error('Read failed')
     return None
Ejemplo n.º 45
0
 def _read_page(self):
     self.init_cookie()
     if self.post_data:
         debug.debug('post %s' % self.url)
     else:
         debug.debug('read %s' % self.url)
     req = urllib2.Request(self.url,
                           data=self.post_data,
                           headers=self.headers)
     counter = 3
     while counter > 0:
         try:
             res = urllib2.urlopen(req, data=None, timeout=self.timeout)
             data = res.read()
             return data
         except Exception as e:
             debug.info(str(e))
             counter -= 1
     debug.error('Read failed')
     return None
Ejemplo n.º 46
0
    def selectTimeSlot(self, timeSlotId):
        '''post the timeslot data'''
        taskStatus = self._getCurrentTaskStatus()
        if taskStatus:
            taskStatus['id'] = timeSlotId
            taskStatus['taskCmd'] = 'timeslot'
            taskStatus['clientTimezone'] = 'Asia/Shanghai'
            taskStatus['cmdStatus'] = None
            timer = 30
            while not taskStatus['cmdStatus'] and timer > 0:
                time.sleep(1)
                timer -= 1

            if taskStatus['cmdStatus'] == 'OK':
                # result = self.getTaskResult(taskStatus['appleId'])
                self.addReservResult(taskStatus['appleId'],
                                     taskStatus['prompInfo'])
            elif taskStatus['cmdStatus'] == 'NOK':
                debug.error('selected time error')
            else:
                debug.error('selectTimeSlot failed')
Ejemplo n.º 47
0
    def selectTimeSlot(self, timeSlotId):
        '''post the timeslot data'''
        taskStatus = self._getCurrentTaskStatus()
        if taskStatus:
            taskStatus['id'] = timeSlotId
            taskStatus['taskCmd'] = 'timeslot'
            taskStatus['clientTimezone'] = 'Asia/Shanghai'
            taskStatus['cmdStatus'] = None
            timer = 30
            while not taskStatus['cmdStatus'] and timer > 0:
                time.sleep(1)
                timer -= 1

            if taskStatus['cmdStatus'] == 'OK':
                # result = self.getTaskResult(taskStatus['appleId'])
                self.addReservResult(taskStatus['appleId'],
                                     taskStatus['prompInfo'])
            elif taskStatus['cmdStatus'] == 'NOK':
                debug.error('selected time error')
            else:
                debug.error('selectTimeSlot failed')
Ejemplo n.º 48
0
 def parserInfo(self):
     if not self.soup:
         self.soup = self.getSoup()
         if not self.soup:
             return None
     keywords = {'class': 'module-content gray-b-bg'}
     contactItems = self.soup.find('div', attrs=keywords)
     if not contactItems:
         debug.error('Can not found div tag %s' % self.pageUrl)
         return
     dditems = contactItems.find_all('dd')
     for dditem in dditems:
         tmplist = dditem.text.expandtabs(1)
         tmplist = tmplist.replace(';', '').strip().split(':')
         if len(tmplist) == 2:
             if '联系人' in tmplist[0]:
                 self.contactPerson = tmplist[1]
             elif '固定电话' in tmplist[0]:
                 self.phoneNumber = tmplist[1]
             elif '联系电话' in tmplist[0]:
                 self.mobilePhone = tmplist[1]
         else:
             debug.error('%s %s' % (tmplist, self.pageUrl))
Ejemplo n.º 49
0
    def submit(self):
        taskStatus = self._getCurrentTaskStatus()
        if taskStatus:
            captcha = self.lECaptchaAnswer.text()
            taskStatus['captchaAnswer'] = str(captcha)
            phoneNumber = self.lEPhoneNumber.text()
            taskStatus['phoneNumber'] = str(phoneNumber)
            taskStatus['smsCode'] = str(self.lESmsCode.text())
            taskStatus['clientTimezone'] = 'Asia/Shanghai'
            taskStatus['countryISDCode'] = '86'
            taskStatus['taskCmd'] = 'submit'
            while not taskStatus['cmdStatus']:
                time.sleep(1)
            if taskStatus['cmdStatus'] == 'NOK':
                debug.info('submit error')
                self.refresh()

            if taskStatus['cmdStatus'] == 'Ok':
                result = taskStatus['cmdResult']
                self.fillTableWidget(result[0], result[1])
                self.viewDetail(1)
        else:
            debug.error('submit error')
Ejemplo n.º 50
0
    def submit(self):
        taskStatus = self._getCurrentTaskStatus()
        if taskStatus:
            captcha = self.lECaptchaAnswer.text()
            taskStatus['captchaAnswer'] = str(captcha)
            phoneNumber = self.lEPhoneNumber.text()
            taskStatus['phoneNumber'] = str(phoneNumber)
            taskStatus['smsCode'] = str(self.lESmsCode.text())
            taskStatus['clientTimezone'] = 'Asia/Shanghai'
            taskStatus['countryISDCode'] = '86'
            taskStatus['taskCmd'] = 'submit'
            while not taskStatus['cmdStatus']:
                time.sleep(1)
            if taskStatus['cmdStatus'] == 'NOK':
                debug.info('submit error')
                self.refresh()

            if taskStatus['cmdStatus'] == 'Ok':
                result = taskStatus['cmdResult']
                self.fillTableWidget(result[0], result[1])
                self.viewDetail(1)
        else:
            debug.error('submit error')
Ejemplo n.º 51
0
    def contextMenuEvent(self, event):
        curItem = None
        indexTab = self.ui.tbwg_menubar.currentIndex()
        # finished tasks

        if 2 == indexTab:
            curItem = self.ui.lw_finished_tasks.currentItem()
            if not curItem:
                debug.error('There is no select items %s' % curItem)
                return
            popMenu = QtWidgets.QMenu()
            popMenu.addAction(self.actionExportToExcel)
            action = popMenu.exec(self.cursor().pos())
            if not action:
                return

            if action == self.actionExportToExcel:
                self.onExportToExcel(curItem.text())
            else:
                debug.info('action error')
    
        if 1 == indexTab:
            pass
Ejemplo n.º 52
0
 def getDBHelper():
     try:
         return DBHelper.getInstance()
     except Exception as e:
         debug.error(str(e))
         pass
Ejemplo n.º 53
0
 def startTask(self, task):
     self.taskManager.resetDb('tasks.db')
     task.save()
     self.taskManager.addTask(task)
     debug.error('new Task id %s' % task.id)
Ejemplo n.º 54
0
    def waitingCmd(self, page, taskStatus):
        '''
        waiting the input
        '''
        runtime = 300  # waiting time
        storeUrl = taskStatus['storeUrl']
        debug.debug(storeUrl)

        while runtime > 0:
            taskCmd = taskStatus['taskCmd']
            if taskCmd == 'refresh':
                debug.debug('refresh cmd %s' % taskStatus['appleId'])
                verifycodedata, tSt = page.get_verification_code_pic()
                taskStatus['verifyCodeData'] = verifycodedata
                taskStatus['taskCmd'] = None
                time.sleep(1)
                continue
            if taskCmd == 'submit':
                debug.debug('get submit cmd %s' % taskStatus['appleId'])
                postData = page.build_submit_post_data()
                postData['captchaAnswer'] = taskStatus['captchaAnswer']
                postData['phoneNumber'] = taskStatus['phoneNumber']
                postData['smsCode'] = taskStatus['smsCode']
                postData['clientTimezone'] = taskStatus['clientTimezone']
                # 'Asia/Shanghai'
                submitUrl = self.challengeUrlFormat % GeniusbarPage.storeNumber
                headers = page.headers
                headers['Referer'] = submitUrl
                headers.pop('Accept-Encoding')
                submitpage = GeniusbarPage(submitUrl,
                                           data=urllib.urlencode(postData),
                                           headers=headers)
                data = submitpage.get_data()
                resultfile = 'tmp/%s.htm' % taskStatus['appleId']
                Writefile(resultfile, data)

                attrs = {
                    "class": "error-message on",
                    "id": "error_message_generalError"
                }
                errorMsg = submitpage.get_tag_text('label', attrs=attrs)
                if errorMsg:
                    taskStatus['cmdStatus'] = 'NOK'
                    taskStatus['taskCmd'] = None
                    taskStatus['prompInfo'] = errorMsg
                    page = submitpage
                    debug.error(errorMsg)
                    Writefile('tmp/submiterr.html', page.get_data())
                    continue
                else:
                    # success for submit
                    # get the time slots
                    ret, maxrow = self.buildTimeSlotsTable(submitpage)
                    taskStatus['cmdStatus'] = 'OK'
                    taskStatus['timeSlots'] = (ret, maxrow)
                    taskStatus['taskCmd'] = None
                    page = submitpage
                    continue
            if taskCmd == 'timeslot':
                # post timeslots
                debug.debug('get timeslot cmd %s' % taskStatus['appleId'])
                postData = self.buildPostTimeSlotsData(page)
                postData['clientTimezone'] = taskStatus['clientTimezone']
                postData['id'] = taskStatus['id']
                tlsUrl = self.timeslotFormat % GeniusbarPage.storeNumber
                debug.debug('tls ulr %s' % tlsUrl)
                headers = {}
                headers[
                    'Accept-Language'] = 'zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3'
                headers[
                    'User-Agent'] = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0"
                headers[
                    'Accept'] = 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
                headers["Connection"] = 'keep-alive'
                headers["Host"] = 'concierge.apple.com'
                tlspage = GeniusbarPage(tlsUrl,
                                        data=urllib.urlencode(postData),
                                        headers=headers)
                data = tlspage.get_data()
                Writefile('tmp/posttimeslotsresult.html', data)
                text = self.getConfirmMsg(tlspage)
                taskStatus['prompInfo'] = text.replace(' ', '')
                Writefile('tmp/reserv-%s' % taskStatus['appleId'],
                          taskStatus['prompInfo'])
                taskStatus['taskCmd'] = None
                taskStatus['cmdStatus'] = 'OK'
                break
            if taskCmd == 'end':
                taskStatus['taskCmd'] = None
                break
            #debug.debug('waiting cmd')
            time.sleep(1)
            runtime -= 1
        debug.info('End task %s' % taskStatus['appleId'])
Ejemplo n.º 55
0
    def waitingCmd(self, page, taskStatus):
        '''
        waiting the input
        '''
        runtime = 300  # waiting time
        storeUrl = taskStatus['storeUrl']
        debug.debug(storeUrl)

        while runtime > 0:
            taskCmd = taskStatus['taskCmd']
            if taskCmd == 'refresh':
                debug.debug('refresh cmd %s' % taskStatus['appleId'])
                verifycodedata, tSt = page.get_verification_code_pic()
                taskStatus['verifyCodeData'] = verifycodedata
                taskStatus['taskCmd'] = None
                time.sleep(1)
                continue
            if taskCmd == 'submit':
                debug.debug('get submit cmd %s' % taskStatus['appleId'])
                postData = page.build_submit_post_data()
                postData['captchaAnswer'] = taskStatus['captchaAnswer']
                postData['phoneNumber'] = taskStatus['phoneNumber']
                postData['smsCode'] = taskStatus['smsCode']
                postData['clientTimezone'] = taskStatus['clientTimezone']
                # 'Asia/Shanghai'
                submitUrl = self.challengeUrlFormat % GeniusbarPage.storeNumber
                headers = page.headers
                headers['Referer'] = submitUrl
                headers.pop('Accept-Encoding')
                submitpage = GeniusbarPage(submitUrl,
                                           data=urllib.urlencode(postData),
                                           headers=headers)
                data = submitpage.get_data()
                resultfile = 'tmp/%s.htm' % taskStatus['appleId']
                Writefile(resultfile, data)

                attrs = {"class": "error-message on",
                         "id": "error_message_generalError"}
                errorMsg = submitpage.get_tag_text('label', attrs=attrs)
                if errorMsg:
                    taskStatus['cmdStatus'] = 'NOK'
                    taskStatus['taskCmd'] = None
                    taskStatus['prompInfo'] = errorMsg
                    page = submitpage
                    debug.error(errorMsg)
                    Writefile('tmp/submiterr.html', page.get_data())
                    continue
                else:
                    # success for submit
                    # get the time slots
                    ret, maxrow = self.buildTimeSlotsTable(submitpage)
                    taskStatus['cmdStatus'] = 'OK'
                    taskStatus['timeSlots'] = (ret, maxrow)
                    taskStatus['taskCmd'] = None
                    page = submitpage
                    continue
            if taskCmd == 'timeslot':
                # post timeslots
                debug.debug('get timeslot cmd %s' % taskStatus['appleId'])
                postData = self.buildPostTimeSlotsData(page)
                postData['clientTimezone'] = taskStatus['clientTimezone']
                postData['id'] = taskStatus['id']
                tlsUrl = self.timeslotFormat % GeniusbarPage.storeNumber
                debug.debug('tls ulr %s' % tlsUrl)
                headers = {}
                headers['Accept-Language'] = 'zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3'
                headers['User-Agent'] = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0"
                headers['Accept'] = 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
                headers["Connection"] = 'keep-alive'
                headers["Host"] = 'concierge.apple.com'
                tlspage = GeniusbarPage(tlsUrl,
                                        data=urllib.urlencode(postData),
                                        headers=headers)
                data = tlspage.get_data()
                Writefile('tmp/posttimeslotsresult.html', data)
                text = self.getConfirmMsg(tlspage)
                taskStatus['prompInfo'] = text.replace(' ', '')
                Writefile('tmp/reserv-%s' % taskStatus['appleId'],
                          taskStatus['prompInfo'])
                taskStatus['taskCmd'] = None
                taskStatus['cmdStatus'] = 'OK'
                break
            if taskCmd == 'end':
                taskStatus['taskCmd'] = None
                break
            #debug.debug('waiting cmd')
            time.sleep(1)
            runtime -= 1
        debug.info('End task %s' % taskStatus['appleId'])