Есть основной код авторизации:
def login():
chrome = CHROME
print("Запускаем браузер, подождите...")
login = "логин"
password = "пароль"
print("Текущая сессия открыта: ", chrome.session_id)
chrome.get("http://seosprint.net")
# Ищем форму для ввода данных
try:
login_but = chrome.find_element_by_id("mnu302")
login_but.click()
sleep(5)
try:
chrome.find_element_by_css_selector("form.auth") # поиск формы для ввода данных
print("Форма авторизации найдена!")
except NoSuchElementException:
print("Элемент не найден на странице, введите логин и пароль вручную")
pass
except NoSuchElementException:
print("Браузер не переходит по ссылке, проверьте соединение с интернетом.")
# TODO авторзация из файла
# Проводим авторизацию
find_login_inp = "//form[@class='auth']/div[@class='auth-note']/input"
find_password_inp = "//form[@class='auth']/div[@class='auth-note']/..//input[@type='password']"
login_inp = chrome.find_element_by_xpath(find_login_inp)
password_inp = chrome.find_element_by_xpath(find_password_inp)
login_inp.send_keys(login)
password_inp.send_keys(password)
print("Логин и пароль введены в форму!")
# Проверка авторизации
wait_until("//div[@class='nameblock']", 20)
name = chrome.find_element_by_xpath("//div[@class='nameblock']/b").text
print("Здравствуйте, ", name, ", вы авторизированы под логином: ", login)
return True
#ввод капчи
Теперь мне нужно как-то разобраться с капчой. На данном этапе это будет просто банальный клик по кнопке, независимо от того, что будет дальше. Но проблема в том, что импортируемый модуль не продолжает работу в браузере, а запускает новый браузер. Как это исправить?
import time
import random
from selenium.common.exceptions import NoSuchElementException
MIN_RAND = 0.64
MAX_RAND = 1.27
LONG_MIN_RAND = 4.78
LONG_MAX_RAND = 11.1
CAPTCHA_xpath="//div[@class='recaptcha-checkbox-checkmark' and @role='presentation']"
def is_exists_by_xpath(xpath):
try:
chrome.find_element_by_xpath(xpath)
except NoSuchElementException:
return False
return True
def get_recaptcha_challenge():
while 1:
# Navigate to a ReCaptcha pag
time.sleep(random.uniform(MIN_RAND, MAX_RAND))
# Get all the iframes on the page
iframes = chrome.find_elements_by_tag_name("iframe")
# Switch focus to ReCaptcha iframe
chrome.switch_to_frame(iframes[0])
time.sleep(random.uniform(MIN_RAND, MAX_RAND))
# Verify ReCaptcha checkbox is present
if not is_exists_by_xpath(CAPTCHA_xpath):
print("[{0}] No element in the frame!!")
continue
# Click on ReCaptcha checkbox
chrome.driver.find_element_by_xpath().click()
time.sleep(random.uniform(LONG_MIN_RAND, LONG_MAX_RAND))
# Check if the ReCaptcha has no challenge
if is_exists_by_xpath('//span[@aria-checked="true"]'):
print("[{0}] ReCaptcha has no challenge. Trying again!")
else:
return
def solve(self, current_iteration):
# Get a ReCaptcha Challenge
self.get_recaptcha_challenge()
# Switch to page's main frame
self.driver.switch_to.default_content()
# Get all the iframes on the page again- there is a new one with a challenge
iframes = self.driver.find_elements_by_tag_name("iframe")
# Switch to the ReCaptcha iframe to verify it is solved
self.driver.switch_to.default_content()
self.driver.switch_to_frame(iframes[0])
return self.is_exists_by_xpath('//span[@aria-checked="true"]')
Мне нужно, чтобы при вызове этого модуля он продолжать работать с открытым браузером, а не запускал новый поисковик.