def voteFromFile(self, filePath, name, delay): url, msg = self.getLinkWithNamecheck(name) if not url: return msg INFO('验证成功,倒计时13s后开始投票给(%s),如果有任何疑问,您可以使用(ctrl + c)主动退出程序' % name) countdown(13) INFO('投票开始(%s)' % name) return self.voteBatchNoSafeCheck(filePath, url, name, delay)
def func(args, fname): bot = botInit(args) nname, ename, url = bot.find_link_by_name(args.name) if url: threading.current_thread().setName(os.path.basename(fname)) INFO(bot.voteBatchNoSafeCheck(fname, url, args.name, args.delay)) else: INFO('(%s)不是有效的成员姓名,请检查你的输入' % name) bot.close()
def batchVoteMultiProcessing(args): if args.file and not os.path.exists(args.file): ERROR('(%s)文件未找到' % args.file) return s = RAWINPUT("确认要投票给(%s),请再次输入成员姓名:" % args.name) if s != args.name: ERROR('输入(%s)与预期不符,退出程序' % s) return bot = botInit(args) INFO("验证成员姓名(%s)合法性" % args.name) nname, ename, url = bot.find_link_by_name(args.name) if not url: ERROR('(%s)不是有效的成员姓名,请检查你的输入' % args.name) return INFO('验证成功,倒计时13s后开始投票给(%s),如果有任何疑问,您可以使用(ctrl + c)主动退出程序' % args.name) def ext(signum, frame): print('') ERROR('您使用(ctrl + c)主动退出了程序') exit(0) signal.signal(signal.SIGINT, ext) signal.signal(signal.SIGTERM, ext) countdown(13) INFO('投票开始(%s)' % args.name) if args.pnum[0] <= 1: INFO(bot.voteBatchNoSafeCheck(args.file, url, args.name, args.delay)) bot.close() else: bot.close() dirname = '%s-%s' % (args.name, args.file) tempFileCount = ft.split(args.file, dirname, args.pnum[1] if args.pnum[1] > 0 else 1024) p = Pool(cpu_count() * 2 if (args.pnum[0] > cpu_count() * 2) else args.pnum[0]) for partnum in range(tempFileCount): fname = os.path.join(dirname, 'part%04d' % partnum) p.apply_async(func, (args, fname)) p.close() p.join() fname = os.path.join(dirname, args.file + ".log") INFO('合并文件到(%s)' % fname) ft.merge(dirname, fname)
def oneVote(arg): if arg.serial and None in _serialCheck(arg.serial[0], arg.serial[1]): ERROR('(%s,%s)错误的序列号格式' % (arg.serial[0], arg.serial[1])) else: bot = botInit(arg) INFO(bot.vote(arg.serial[0], arg.serial[1], arg.name)) bot.close()
def initVoteInfo(self): fp = os.path.abspath('numberList.pickle') self.team, self.number = pt.load(fp) if not self.number or not self.team: self.team = self.getTeamList() self.number = self.getNumberList(self.team) pt.save(fp, (self.team, self.number)) else: self.get('https://akb48-sousenkyo.jp/akb/search/results?t_id=1', '.wrap h1') INFO("成员列表获取成功")
def voteOneByOne(self, name, out=False): url, msg = self.getLinkWithNamecheck(name, False) if not url: return [msg] id = 0 while True: s = RAWINPUT('请输入序列号(输入exit退出):') if s == 'exit': return '退出脚本' s1, s2 = self.serialCheck(s) if s1 and s2: state = self.voteNoSafeCheck(s1, s2, name, url) else: state = State(s.strip(), '', name, url, ('投票エラー', '投票码格式错误')) INFO('%d, ' % id + str(state)) if not out: FILE('%d, ' % id + str(state)) id += 1
def voteBatchNoSafeCheck(self, filePath, url, name, delay): id = 0 for serial in self.readline(filePath, 100): if not serial: break serial = serial.strip() if len(serial) > 0: s1, s2 = self.serialCheck(serial) if s1 and s2: state = self.voteNoSafeCheck(s1, s2, name, url) else: state = State(serial.strip(), '', name, url, ('投票エラー', '投票码格式错误')) INFO("%s, %d, " % (threading.current_thread().name, id) + str(state)) FILE("%d, " % id + str(state), filePath) id += 1 return '投票完成(%s)' % name
def __init__(self, headless=False, noimages=False): self.driver = self.getBrowser(headless, noimages) INFO('浏览器初始化完成' + ('(headless)' if headless else '') + ('(noimages)' if noimages else ''))
def stepVote(arg): bot = botInit(arg) INFO(bot.voteOneByOne(arg.name, arg.out)) bot.close()