Есть ли лучший способ сделать этот код короче и без повторений? - PullRequest
0 голосов
/ 23 марта 2020

Я улучшаю свой код, делая его более удобным для чтения, коротким и динамичным c.

Я получил имя пользователя и пароль, спрятанные с помощью dotenv.

Как вы можете видеть первым открывает драйвер, а затем в функции я прошу его ввести URL-адрес, затем зависит от того, какую учетную запись я ввел в параметре, к которому драйвер получит доступ, указав c email.

Я уже думаю о назначении драйвер действует в нескольких переменных, но поскольку веб-вход в систему состоит из 2 шагов:

  1. учетная запись и пароль
  2. зашифрованный пароль

это не может быть сделано так.

Есть мысли?

load_dotenv()


options = webdriver.ChromeOptions()
executable_path = {"executable_path": "/usr/local/bin/chromedriver"}
browser = Browser("chrome", **executable_path, headless=False)
bw = browser.driver

html = browser.html
soup = BeautifulSoup(html, "html.parser")


def open_web_email(account):
    """[This function will open web email]

    Arguments:
        account {[account]} -- [returns what email will open]
    """
    bw.get("https://webemail.com/login")
    bw.set_window_size(1080, 820)
    # username = bw.find_element_by_xpath('//*[@id="username"]')
    # password = bw.find_element_by_xpath('//*[@id="password"]')
    # login_butt = bw.find_element_by_xpath('//*[@id="login_btn"]')
    if account == "1":
        time.sleep(2)
        bw.find_element_by_xpath('//*[@id="username"]').send_keys(os.getenv("P_USERNAME_ONE"))
        bw.find_element_by_xpath('//*[@id="password"]').send_keys(os.getenv("P_PSW_ONE"))
        bw.find_element_by_xpath('//*[@id="login_btn"]').click()


        bw.find_element_by_xpath('//*[@id="mailboxPassword"]').send_keys(os.getenv("P_MAILBOX_ONE"))
        bw.find_element_by_xpath('//*[@id="unlock_btn"]').click()
    elif account == "2":
        bw.find_element_by_xpath('//*[@id="username"]').send_keys(os.getenv("P_USERNAME_TWO"))
        bw.find_element_by_xpath('//*[@id="password"]').send_keys(os.getenv("P_PSW_TWO"))
        bw.find_element_by_xpath('//*[@id="login_btn"]').click()


        bw.find_element_by_xpath('//*[@id="mailboxPassword"]').send_keys(os.getenv("P_MAILBOX_TWO"))
        bw.find_element_by_xpath('//*[@id="unlock_btn"]').click()

Может быть, лучший способ сделать это - использовать классы?

1 Ответ

1 голос
/ 23 марта 2020

Вы можете создать другой метод и передать аргументы этому методу, чтобы сделать его короче. Исходя из вашего кода разные аргументы отличаются

load_dotenv()

options = webdriver.ChromeOptions()
executable_path = {"executable_path": "/usr/local/bin/chromedriver"}
browser = Browser("chrome", **executable_path, headless=False)
bw = browser.driver

html = browser.html
soup = BeautifulSoup(html, "html.parser")


def open_web_email(account):
    """[This function will open web email]

    Arguments:
        account {[account]} -- [returns what email will open]
    """
    bw.get("https://webemail.com/login")
    bw.set_window_size(1080, 820)
    if account == "1":
        time.sleep(2)
        createAccount(P_USERNAME_ONE,P_PSW_ONE,P_MAILBOX_ONE)
    elseif account == "2":
        createAccount(P_USERNAME_TWO,P_PSW_TWO,P_MAILBOX_TWO)


def createAccount(username,password,mailBox)
{

        bw.find_element_by_xpath('//*[@id="username"]').send_keys(os.getenv("username"))
        bw.find_element_by_xpath('//*[@id="password"]').send_keys(os.getenv("password"))
        bw.find_element_by_xpath('//*[@id="login_btn"]').click()


        bw.find_element_by_xpath('//*[@id="mailboxPassword"]').send_keys(os.getenv("mailBox"))
        bw.find_element_by_xpath('//*[@id="unlock_btn"]').click()

}
...