Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from selenium import webdriver
- from selenium.webdriver.common.by import By
- from cookies import get_cookie_dict
- from use_db import Database
- from time import sleep
- from selenium.common.exceptions import NoSuchElementException
- import re
- from numexpr import evaluate
- class LolzWorker:
- url = ""
- url_contest = ""
- options = webdriver.ChromeOptions()
- # options.add_argument('--headless')
- options.add_argument('--log-level=3')
- def __init__(self):
- self.count_page = 1
- self.cookies = get_cookie_dict()
- self.timeout = 0
- self.blacklist = set()
- self.driver = webdriver.Chrome(chrome_options=self.options, executable_path=r'chromedriver.exe')
- self.settings()
- def settings(self):
- """Настройка двайвера Selenium"""
- self.driver.set_window_size(1920, 1080)
- self.driver.get(self.url)
- for cook in self.cookies:
- self.driver.add_cookie(cook)
- def add_blacklist(self, url):
- self.timeout += 1
- if self.timeout == 100:
- self.blacklist.clear()
- self.timeout = 0
- self.blacklist.add(url)
- def get_page_count(self):
- """Получения количества страниц со страницы розыгрышей"""
- pass
- def get_contest_list(self):
- """Получение ссыок на все розыгрыши"""
- pass
- def get_captcha_info(self):
- """Получение капчи, поле помощи и возврат этих значений"""
- pass
- def send_answer_captcha(self, captcha_answer):
- """Отправка капчи"""
- try:
- print("Отправляю ответ")
- self.driver.find_element(By.ID, "CaptchaQuestionAnswer").send_keys(captcha_answer)
- sleep(3)
- self.driver.find_element(By.CSS_SELECTOR, "a.Contest--Participate.button.mn-15-0-0.primary").click()
- print(self.driver.current_url)
- except:
- pass
- def join_contests(self, contest_list):
- """Участие в конкурсах"""
- for page in contest_list:
- if page in self.blacklist:
- continue
- try:
- self.driver.get(page)
- captcha_text, captcha_placeholder = self.get_captcha_info()
- except NoSuchElementException:
- self.add_blacklist(page)
- continue
- captcha_answer = answer_db.get_data(captcha_text, captcha_placeholder)
- if captcha_answer is None:
- # Если ответа нету, пробуем решить через evaluate(eval)
- try:
- captcha_answer = str(int(evaluate(captcha_text)))
- print(f"Eval: В: {captcha_text} П: {captcha_placeholder} О: {captcha_answer}")
- if captcha_placeholder != 'None':
- # Если есть подсказка, то проверяем ответ с помощью нее.
- if captcha_answer.startswith(captcha_placeholder.split("начинаетсяссимвола")[1].strip("'")):
- self.send_answer_captcha(captcha_answer)
- answer_db.add_data(captcha_text, captcha_placeholder, captcha_answer)
- else:
- print('Проверка подсчета - неверно, добавляю в базу без ответа.')
- answer_db.add_data(captcha_text, captcha_placeholder, "Нет ответа")
- else:
- # Если подсказки нету, отправляем ответ
- self.send_answer_captcha(captcha_answer)
- answer_db.add_data(captcha_text, captcha_placeholder, captcha_answer)
- except:
- # Если ответа нет и не получилось решить, то добавляем вопрос, подсказку и "Нет ответа"
- print("Новый вопрос, добавляю в базу.")
- answer_db.add_data(captcha_text, captcha_placeholder, "Нет ответа")
- self.add_blacklist(page)
- elif captcha_answer is False:
- # Если нерешаемый вопрос или нету ответа, но есть поле помощи, то страница в банлист
- print('Нету ответа или нерешаемый вопрос, страница в банлист')
- else:
- print(f"В: {captcha_text}", f'П: {captcha_placeholder}', f'О: {captcha_answer}')
- self.send_answer_captcha(captcha_answer)
- self.add_blacklist(page)
- if __name__ == '__main__':
- account = LolzWorker()
- answer_db = Database()
- while True:
- account.get_page_count()
- try:
- all_contests = account.get_contest_list()
- except NoSuchElementException:
- continue
- if len(all_contests):
- account.join_contests(all_contests)
- print('Сплю указанное время')
- sleep(15)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement