@PythonBeginner20

Как продолжить действие Selenium в другом модуле?

Есть основной код авторизации:
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"]')


Мне нужно, чтобы при вызове этого модуля он продолжать работать с открытым браузером, а не запускал новый поисковик.
  • Вопрос задан
  • 253 просмотра
Пригласить эксперта
Ответы на вопрос 1
В вашем говнокоде сложно разобраться, но что бы вам работать с одним и тем же браузером, надо во все модули передавать ссылку на уже созданные объект
очень грубый пример
test.py:
from selenium import webdriver

driver = webdriver.Chrome()

test1.py:
from test import driver
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы