def sendd_comment(num,access_token): global image_link response = requests.post(f'https://api.vk.com/method/wall.post?owner_id={owner_ids[num]}&from_group=0&message={messages[random.randint(0,len(messages)-1)]}&access_token={access_token}&v={version}') text = response.json() try: if len(text['response']) > 0: print(f'Отправил комментарий в группе - {owner_ids[num]}') except: print('Разгадываю капчу') balance = check_balance(RUCAPTCHA_KEY) if float(balance)>0: try: sid = text['error']['captcha_sid'] image_link = text['error']['captcha_img'] user_answer = ImageCaptcha.ImageCaptcha(rucaptcha_key=RUCAPTCHA_KEY).captcha_handler(captcha_link=image_link) if not user_answer['error']: # решение капчи key = user_answer['captchaSolve'] elif user_answer['error']: # Тело ошибки, если есть print(user_answer['errorBody']['text']) print(user_answer['errorBody']['id']) response_second = requests.post(f'https://api.vk.com/method/wall.post?owner_id={owner_ids[num]}&from_group=0&message={messages[random.randint(0, len(messages) - 1)]}&captcha_sid={sid}&captcha_key={key}&access_token={access_token}&v={version}') otvet = response_second.json() if len(otvet['response'])>0: print(f'Отправил комментарий в группе - {owner_ids[num]}') #print(response_second.json()) except: print('error! Возможно, группа не запрашивает капчу, либо закончились деньги') print(f'Отправил комментарий в группе - {owner_ids[num]}') else: print('Работа остановлена, т.к баланс ниже указанного')
def login(self) -> requests.Session: try: login_response = self._send_login_request() self._check_for_captcha(login_response) except CaptchaRequired as e: image_link = 'https://store.steampowered.com/login/rendercaptcha/?gid={}'.format( e.captcha_gid) user_answer = ImageCaptcha.ImageCaptcha( rucaptcha_key=self.rucaptcha_key).captcha_handler( captcha_link=image_link, **self.rucaptcha_kwargs) if user_answer['error']: raise RuCaptchaError(user_answer['error']) login_response = self._send_login_request({ 'captcha_text': user_answer['captchaSolve'], 'captchagid': e.captcha_gid }) self._check_for_captcha(login_response) login_response = self._enter_steam_guard_if_necessary(login_response) self._assert_valid_credentials(login_response) self._perform_redirects(login_response.json()) self.set_sessionid_cookies() return self.session
async def aiocontext(): with ImageCaptcha.aioImageCaptcha(rucaptcha_key=RUCAPTCHA_KEY, img_path='test_files', img_clearing=True, save_format='const', debug_dump=1) as img_captcha: result = await img_captcha.captcha_handler(captcha_link=image_link) print(result)
def _solve_captcha(self, rw, content, new_hook): """ Проходим капчу и возвращаем страницу с результатом :param rw: драйвер :param content: контент страницы :param new_hook: ссылка :return: None или контент страницы после решения капчи """ count = 0 # тридцать попыток решить капчу while count < 30: key = content.xpath('//input[@name="key"]/@value')[0] try: img_url = content.xpath( '//div[@class="captcha__image"]/img/@src')[0] except IndexError: return None rw.get(img_url) imgs = fromstring(rw.page_source) img_url = imgs.xpath('//img/@src')[0] rw.get(img_url) logger.info( f'Пытаемся получить итоговую картинку капчи и скачать ее {img_url}' ) headers = { "User-Agent": "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36" } s = requests.session() s.headers.update(headers) for cookie in rw.get_cookies(): c = {cookie['name']: cookie['value']} s.cookies.update(c) r = s.get(img_url, allow_redirects=True) open('captcha' + '.jpeg', 'wb').write(r.content) answer = ImageCaptcha.ImageCaptcha( rucaptcha_key=RUCAPTCHA_KEY, sleep_time=15, save_format='temp').captcha_handler( captcha_file='captcha.jpeg') if answer is None: answer = '' answer = answer.get('captchaSolve') new_hook[0] = new_hook[0].replace(':', '%3A').replace( '?', '%3F').replace('=', '%3D').replace('&', '%26') url = f'https://{self.origin}/checkcaptcha?key={key}&retpath={new_hook[0]}&rep={answer}' rw.get(url) content = fromstring(rw.page_source) if content is not None: # бывает когда content == None new_hook = content.xpath('//input[@name="retpath"]/@value') logger.info(f'new_hook 1: {new_hook}') if len(new_hook) == 0: return content count += 1
def captcha_handler(captcha): print(colorama.Fore.MAGENTA + '[' + datetime.strftime(datetime.now(), "%H:%M:%S") + '] ' + 'Решение капчи... Пожалуйста, подождите...' + colorama.Fore.RESET) image_link = captcha.get_url() user_answer = ImageCaptcha.ImageCaptcha(rucaptcha_key=ru_key).captcha_handler(captcha_link=image_link) if not user_answer['error']: key = user_answer['captchaSolve'] elif user_answer['error']: print(user_answer['errorBody']['text']) print(user_answer['errorBody']['id']) return captcha.try_again(key)
def captcha_solve(captcha_link): from python_rucaptcha import ImageCaptcha,RuCaptchaControl answer = RuCaptchaControl.RuCaptchaControl( rucaptcha_key=RUCAPTCHA_KEY ).additional_methods(action="getbalance") print("Checking Rucaptcha balance: ", answer['serverAnswer']) image_link = captcha_link user_answer = ImageCaptcha.ImageCaptcha(rucaptcha_key=RUCAPTCHA_KEY).captcha_handler(captcha_link=image_link) if not user_answer['error']: # решение капчи # print(user_answer['captchaSolve']) # print(user_answer['taskId']) return user_answer['captchaSolve'] elif user_answer['error']: # Тело ошибки, если есть print(user_answer['errorBody']['text']) print(user_answer['errorBody']['id']) return None
def __decide(self): user_answer_full = ImageCaptcha.ImageCaptcha( rucaptcha_key=self.__Token, service_type='rucaptcha', save_format="temp", phrase=0, regsense=0, numeric=0, calc=0, min_len=0, max_len=0, language=0, textinstructions="", pingback="", ).captcha_handler(captcha_link=self.__Image, verify=True, proxies={}) if not user_answer_full["error"]: # решение капчи self.__Task_id = user_answer_full["taskId"] return user_answer_full["captchaSolve"] elif user_answer_full["error"]: # Тело ошибки, если есть print(user_answer_full["errorBody"]["text"]) print(user_answer_full["errorBody"]["id"])
# Введите ключ от рукапчи из своего аккаунта RUCAPTCHA_KEY = "2597d7cb1f9435a3b531ac283ce987d5" # Для получения ссылки на обычную капчу нужно послать GET запрос с соответствующим парметром image_link = requests.get( "http://85.255.8.26/api/", params={"captcha_type": "get_common_captcha"} ).json()["captcha_src"] """ contextmanager пример """ # синхронный пример contextmanager with ImageCaptcha.ImageCaptcha( rucaptcha_key=RUCAPTCHA_KEY, img_path="test_files", img_clearing=True, save_format="const", debug_dump=1, ) as img_captcha: result = img_captcha.captcha_handler(captcha_link=image_link) print(result) # асинхронный пример contextmanager async def aiocontext(): with ImageCaptcha.aioImageCaptcha( rucaptcha_key=RUCAPTCHA_KEY, img_path="test_files", img_clearing=True, save_format="const", debug_dump=1, ) as img_captcha:
# Для получения ссылки на обычную капчу нужно послать GET запрос с соответствующим парметром image_link = requests.get("http://85.255.8.26/api/", params={ "captcha_type": "get_common_captcha" }).json()["captcha_src"] """ Синхронный метод """ """ Тут нужно воспользоваться бибилотекой, отослать на решение ссылку на капчу и получить ответ далее его записать в user_answer Первый пример демонстрирует сохранеие файла изображения как обычного файла в папу """ user_answer_const = ImageCaptcha.ImageCaptcha( rucaptcha_key=RUCAPTCHA_KEY, img_path='test_filels', img_clearing=False, save_format='const').captcha_handler(captcha_link=image_link) """ Второй пример демонстрирует сохранения файла как временного (temporary) - это стандартный вариант сохранения. Было выяснено, что он не работает с некоторыми видами капч - если возникают проблемы, то стоит использовать первый вариант """ user_answer_temp = ImageCaptcha.ImageCaptcha( rucaptcha_key=RUCAPTCHA_KEY, save_format='temp').captcha_handler(captcha_link=image_link) """ Пример работы с передачей файла капчи уже закодированного в base64 An example of working with captcha file already encoded in base64 """ # закодировано: 976979
1. Получить ссылку на изображение капчи(сртрока 15 в примере) 2. Передать эту ссылку в модуль ImageCaptcha(строка 20 в примере) """ # Введите ключ от рукапчи из своего аккаунта RUCAPTCHA_KEY = '' # Для получения ссылки на обычную капчу нужно послать GET запрос с соответствующим парметром image_link = requests.get("http://85.255.8.26/api/", params = {"captcha_type": "get_common_captcha"}).json()["captcha_src"] """ Тут нужно воспользоваться бибилотекой, отослать на решение ссылку на капчу и получить ответ далее его записать в user_answer Первый пример демонстрирует сохранеие файла изображения как обычного файла в папу """ user_answer_const = ImageCaptcha.ImageCaptcha(rucaptcha_key = RUCAPTCHA_KEY, save_format = 'const').captcha_handler(captcha_link = image_link) """ Второй пример демонстрирует сохранения файла как временного (temporary) - это стандартный вариант сохранения. Было выяснено, что он не работает с некоторыми видами капч - если возникают проблемы, то стоит использовать первый вариант """ user_answer_temp = ImageCaptcha.ImageCaptcha(rucaptcha_key = RUCAPTCHA_KEY, save_format = 'temp').captcha_handler(captcha_link = image_link) ''' user_answer_... - это JSON строка с соответствующими полями captchaSolve - решение капчи, taskId - находится Id задачи на решение капчи, errorId - 0 - если всё хорошо, 1 - если есть ошибка,
spl = el.split(" ") login = spl[0] password = spl[1] apivk = req.url_check(login, password) if('access_token' in apivk): save.write(apivk['access_token'] + '\r\n') valid += 1 else: print('Error: ' + apivk['error']) if(apivk['error'] == 'need_captcha'): idstr = req.save_image(apivk['captcha_img']) # Ссылка на изображения для расшифровки captcha_file = "temp/" + idstr + ".jpg" # Возвращается строка-расшифровка капчи user_answer = ImageCaptcha.ImageCaptcha(rucaptcha_key=RUCAPTCHA_KEY).captcha_handler(captcha_file=captcha_file) if user_answer['errorId'] == 0: # решение капчи # print(user_answer['captchaSolve']) # user_answer['taskId'] apivk1 = req.url_check(login, password, idstr, user_answer['captchaSolve']) if('access_token' in apivk1): save.write(apivk1['access_token'] + '\r\n') valid += 1 else: if(apivk1['error'] == 'need_captcha'): err += 1 elif user_answer['errorId'] == 1: # Тело ошибки, если есть print(user_answer['taskId']) print(user_answer['errorBody'])
def get_tables_massive(words): n = 0 while n < 10: try: n = +1 login = '******' password = '******' options = webdriver.ChromeOptions() options.add_argument("--headless") # Runs Chrome in headless mode. #options.add_argument('--no-sandbox') # # Bypass OS security model #options.add_argument('start-maximized') options.add_argument('disable-infobars') options.add_argument("--disable-extensions") browser = webdriver.Chrome( r'/home/egorholin/wordstat/chromedriver.exe', options=options) url = "https://wordstat.yandex.ru/#!/history?period=weekly" browser.get(url) elem = browser.find_element_by_xpath( '//a[@href="' + 'https://passport.yandex.ru/passport?mode=auth&msg=&retpath=https%3A%2F%2Fwordstat.yandex.ru%2F' + '"]') elem.click() elem = browser.find_element_by_id('b-domik_popup-username') elem.send_keys(login) sleep(random.randint(5, 10) / 10) elem = browser.find_element_by_id('b-domik_popup-password') elem.send_keys(password) sleep(random.randint(5, 10) / 10) button = browser.find_element_by_css_selector( 'span.b-form-button_valign_middle:nth-child(1)') sleep(random.randint(5, 10) / 10) button.click() sleep(random.randint(5, 10) / 10) captcha = browser.find_element_by_css_selector( 'td[class="b-popupa__image-td"]') sleep(random.randint(5, 10) / 10) soup = BeautifulSoup(captcha.get_attribute('innerHTML'), 'html.parser') print(captcha.get_attribute('innerHTML')) captcha_link = 'https:' + soup.img['src'] print(captcha_link) user_answer_temp = ImageCaptcha.ImageCaptcha( rucaptcha_key='0854df904af0d822315b96b6b0d210ef', save_format="temp").captcha_handler(captcha_link=captcha_link) answer = str(user_answer_temp['captchaSolve']) sleep(random.randint(5, 10) / 10) elem = browser.find_elements_by_css_selector( 'input[class="b-form-input__input"]')[1] elem.send_keys(answer) sleep(random.randint(5, 10) / 5) button2 = browser.find_elements_by_css_selector( 'input[class="b-form-button__input"]')[1] sleep(random.randint(5, 10) / 5) button2.click() sleep(random.randint(5, 10) / 5) sleep(random.randint(5, 10) / 10) # elem=browser.find_elements_by_css_selector('input[class="b-form-input__input"]')[0] # sleep(random.randint(5, 10)/10) # elem.send_keys('test') # sleep(random.randint(5, 10)/10) # button3=browser.find_elements_by_css_selector('input[class="b-form-button__input"]')[0] # button3.click() # browser.find_elements_by_css_selector('input[class="b-form-input__input"]')[0].clear() print(' captcha has been solved ') for word in words: k = 0 while k < 5: try: sleep(random.randint(5, 10) / 10) elem = browser.find_elements_by_css_selector( 'input[class="b-form-input__input"]')[0] sleep(random.randint(5, 10) / 10) elem.send_keys(word) sleep(random.randint(5, 10) / 10) button3 = browser.find_elements_by_css_selector( 'input[class="b-form-button__input"]')[0] button3.click() sleep(random.randint(5, 10) / 15) sleep(random.randint(5, 10) / 6) element = WebDriverWait(browser, 30).until_not( EC.element_to_be_clickable(( By.CSS_SELECTOR, 'div.b-spin.b-spin_size_45.b-spin_theme_grey-45.b-spin_progress_yes.i-bem.b-spin_js_inited' ))) sleep(random.randint(5, 10) / 6) content = browser.page_source soup = BeautifulSoup(content, 'html.parser') dates1 = [] numbers1 = [] for text in soup.find_all("tr", class_=["even", "odd"]): dates1.append(text.find("td").text) numbers1.append( text.find("td", class_="b-history__value-td").text) for n in range(len(numbers1)): numbers1[n] = int(numbers1[n]) browser.find_elements_by_css_selector( 'input[class="b-form-input__input"]')[0].clear() data = pd.DataFrame() data['dates'] = dates1 data[['First', 'Last']] = data.dates.str.split("-", n=1, expand=True) data['First'] = pd.to_datetime(data['First'], dayfirst=True) data['Last'] = pd.to_datetime(data['Last'], dayfirst=True) data = data.drop(columns='dates') data['numbers'] = numbers1 data['brand'] = word products[word] = data print('{} is parsed '.format(word)) print(data['numbers'][0]) break except Exception as e: print(e) continue break except Exception as e: print(e) browser.quit() continue browser.quit() return products