Advertisement
Guest User

Untitled

a guest
Apr 12th, 2022
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.31 KB | None | 0 0
  1. from selenium import webdriver
  2. from selenium.webdriver.common.by import By
  3. from cookies import get_cookie_dict
  4. from use_db import Database
  5. from time import sleep
  6. from selenium.common.exceptions import NoSuchElementException
  7. import re
  8. from numexpr import evaluate
  9.  
  10.  
  11. class LolzWorker:
  12.     url = ""
  13.     url_contest = ""
  14.     options = webdriver.ChromeOptions()
  15.     # options.add_argument('--headless')
  16.     options.add_argument('--log-level=3')
  17.  
  18.     def __init__(self):
  19.         self.count_page = 1
  20.         self.cookies = get_cookie_dict()
  21.         self.timeout = 0
  22.         self.blacklist = set()
  23.         self.driver = webdriver.Chrome(chrome_options=self.options, executable_path=r'chromedriver.exe')
  24.         self.settings()
  25.  
  26.     def settings(self):
  27.         """Настройка двайвера Selenium"""
  28.         self.driver.set_window_size(1920, 1080)
  29.         self.driver.get(self.url)
  30.         for cook in self.cookies:
  31.             self.driver.add_cookie(cook)
  32.  
  33.     def add_blacklist(self, url):
  34.         self.timeout += 1
  35.         if self.timeout == 100:
  36.             self.blacklist.clear()
  37.             self.timeout = 0
  38.         self.blacklist.add(url)
  39.  
  40.     def get_page_count(self):
  41.         """Получения количества страниц со страницы розыгрышей"""
  42.         pass
  43.  
  44.     def get_contest_list(self):
  45.         """Получение ссыок на все розыгрыши"""
  46.         pass
  47.  
  48.     def get_captcha_info(self):
  49.         """Получение капчи, поле помощи и возврат этих значений"""
  50.         pass
  51.  
  52.     def send_answer_captcha(self, captcha_answer):
  53.         """Отправка капчи"""
  54.         try:
  55.             print("Отправляю ответ")
  56.             self.driver.find_element(By.ID, "CaptchaQuestionAnswer").send_keys(captcha_answer)
  57.             sleep(3)
  58.             self.driver.find_element(By.CSS_SELECTOR, "a.Contest--Participate.button.mn-15-0-0.primary").click()
  59.             print(self.driver.current_url)
  60.         except:
  61.             pass
  62.  
  63.     def join_contests(self, contest_list):
  64.         """Участие в конкурсах"""
  65.         for page in contest_list:
  66.             if page in self.blacklist:
  67.                 continue
  68.             try:
  69.                 self.driver.get(page)
  70.                 captcha_text, captcha_placeholder = self.get_captcha_info()
  71.             except NoSuchElementException:
  72.                 self.add_blacklist(page)
  73.                 continue
  74.             captcha_answer = answer_db.get_data(captcha_text, captcha_placeholder)
  75.             if captcha_answer is None:
  76.                 # Если ответа нету, пробуем решить через evaluate(eval)
  77.                 try:
  78.                     captcha_answer = str(int(evaluate(captcha_text)))
  79.                     print(f"Eval: В: {captcha_text} П: {captcha_placeholder} О: {captcha_answer}")
  80.                     if captcha_placeholder != 'None':
  81.                         # Если есть подсказка, то проверяем ответ с помощью нее.
  82.                         if captcha_answer.startswith(captcha_placeholder.split("начинаетсяссимвола")[1].strip("'")):
  83.                             self.send_answer_captcha(captcha_answer)
  84.                             answer_db.add_data(captcha_text, captcha_placeholder, captcha_answer)
  85.                         else:
  86.                             print('Проверка подсчета - неверно, добавляю в базу без ответа.')
  87.                             answer_db.add_data(captcha_text, captcha_placeholder, "Нет ответа")
  88.                     else:
  89.                         # Если подсказки нету, отправляем ответ
  90.                         self.send_answer_captcha(captcha_answer)
  91.                         answer_db.add_data(captcha_text, captcha_placeholder, captcha_answer)
  92.                 except:
  93.                     # Если ответа нет и не получилось решить, то добавляем вопрос, подсказку и "Нет ответа"
  94.                     print("Новый вопрос, добавляю в базу.")
  95.                     answer_db.add_data(captcha_text, captcha_placeholder, "Нет ответа")
  96.                 self.add_blacklist(page)
  97.             elif captcha_answer is False:
  98.                 # Если нерешаемый вопрос или нету ответа, но есть поле помощи, то страница в банлист
  99.                 print('Нету ответа или нерешаемый вопрос, страница в банлист')
  100.             else:
  101.                 print(f"В: {captcha_text}", f'П: {captcha_placeholder}', f'О: {captcha_answer}')
  102.                 self.send_answer_captcha(captcha_answer)
  103.             self.add_blacklist(page)
  104.  
  105.  
  106. if __name__ == '__main__':
  107.     account = LolzWorker()
  108.     answer_db = Database()
  109.     while True:
  110.         account.get_page_count()
  111.         try:
  112.             all_contests = account.get_contest_list()
  113.         except NoSuchElementException:
  114.             continue
  115.         if len(all_contests):
  116.             account.join_contests(all_contests)
  117.  
  118.         print('Сплю указанное время')
  119.         sleep(15)
  120.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement