예제 #1
0
def login_user(browser,
               username,
               userid,
               password,
               logger,
               logfolder,
               switch_language=True,
               bypass_suspicious_attempt=False,
               bypass_with_mobile=False):
    """Logins the user with the given username and password"""
    assert username, 'Username not provided'
    assert password, 'Password not provided'

    print(username, password)
    ig_homepage = "https://www.facebook.com"
    web_address_navigator(browser, ig_homepage, Settings)
    cookie_loaded = False

    # try to load cookie from username
    try:
        for cookie in pickle.load(
                open('{0}{1}_cookie.pkl'.format(logfolder, username), 'rb')):
            browser.add_cookie(cookie)
            cookie_loaded = True
    except (WebDriverException, OSError, IOError):
        print("Cookie file not found, creating cookie...")

    # include time.sleep(1) to prevent getting stuck on google.com
    time.sleep(1)

    # changes facebook website language to english to use english xpaths
    if switch_language:
        links = browser.find_elements_by_xpath('//*[@id="pageFooter"]/ul/li')
        for link in links:
            if link.get_attribute('title') == "English (UK)":
                click_element(browser, Settings, link)

    web_address_navigator(browser, ig_homepage, Settings)
    reload_webpage(browser, Settings)

    # cookie has been LOADED, so the user SHOULD be logged in
    # check if the user IS logged in
    login_state = check_authorization(browser, Settings,
                                      "https://www.facebook.com/", username,
                                      userid, "activity counts", logger,
                                      logfolder, True)
    print('check_authorization:', login_state)
    if login_state is True:
        # dismiss_notification_offer(browser, logger)
        return True

    # if user is still not logged in, then there is an issue with the cookie
    # so go create a new cookie..
    if cookie_loaded:
        print("Issue with cookie for user {}. Creating "
              "new cookie...".format(username))

    # # Check if the first div is 'Create an Account' or 'Log In'
    # login_elem = browser.find_element_by_xpath(
    #     '//*[@id="email"]'
    #     )

    # if login_elem is not None:
    #     try:
    #         (ActionChains(browser)
    #          .move_to_element(login_elem)
    #          .click()
    #          .perform())
    #     except MoveTargetOutOfBoundsException:
    #         login_elem.click()

    #     # update server calls
    #     update_activity(Settings)

    # Enter username and password and logs the user in
    # Sometimes the element name isn't 'Username' and 'Password'
    # (valid for placeholder too)

    # wait until it navigates to the login page
    # login_page_title = "Login"
    # explicit_wait(browser, "TC", login_page_title, logger)

    # wait until the 'username' input element is located and visible
    input_username_XP = '//*[@id="email"]'
    # explicit_wait(browser, "VOEL", [input_username_XP, "XPath"], logger)

    input_username = browser.find_element_by_xpath(input_username_XP)

    print('moving to input_username')
    print('entering input_username')
    (ActionChains(browser).move_to_element(input_username).click().send_keys(
        username).perform())

    # update server calls for both 'click' and 'send_keys' actions
    for i in range(2):
        update_activity(Settings)

    sleep(1)

    #  password
    input_password = browser.find_elements_by_xpath('//*[@id="pass"]')

    if not isinstance(password, str):
        password = str(password)

    print('entering input_password')
    (ActionChains(browser).move_to_element(
        input_password[0]).click().send_keys(password).perform())

    # update server calls for both 'click' and 'send_keys' actions
    for i in range(2):
        update_activity(Settings)

    sleep(1)

    print('submitting login_button')
    login_button = browser.find_element_by_xpath('//*[@type="submit"]')

    (ActionChains(browser).move_to_element(login_button).click().perform())

    # update server calls
    update_activity(Settings)

    sleep(1)

    # dismiss_get_app_offer(browser, logger)
    # dismiss_notification_offer(browser, logger)

    if bypass_suspicious_attempt is True:
        bypass_suspicious_login(browser, bypass_with_mobile)

    # wait until page fully load
    # explicit_wait(browser, "PFL", [], logger, 5)

    # Check if user is logged-in (If there's two 'nav' elements)
    nav = browser.find_elements_by_xpath('//div[@role="navigation"]')
    if len(nav) == 2:
        # create cookie for username
        print('logged in')
        pickle.dump(
            browser.get_cookies(),
            open('{0}{1}_cookie.pkl'.format(logfolder, username), 'wb'))
        return True
    else:
        return False
예제 #2
0
def login_user(
    browser,
    username,
    userid,
    password,
    logger,
    logfolder,
    switch_language=True,
    bypass_suspicious_attempt=False,
    bypass_with_mobile=False,
):
    """Logins the user with the given username and password"""
    assert username, "Username not provided"
    assert password, "Password not provided"

    ig_homepage = "https://www.facebook.com"
    web_address_navigator(browser, ig_homepage, logger, Settings)
    cookie_loaded = False

    # try to load cookie from username
    try:
        for cookie in pickle.load(
                open("{0}{1}_cookie.pkl".format(logfolder, username), "rb")):
            browser.add_cookie(cookie)
            cookie_loaded = True
    except (WebDriverException, OSError, IOError):
        logger.info("Cookie file not found, creating cookie...")

    # include time.sleep(1) to prevent getting stuck on google.com
    time.sleep(1)

    # changes facebook website language to english to use english xpaths
    if switch_language:
        links = browser.find_elements_by_xpath('//*[@id="pageFooter"]/ul/li')
        for link in links:
            if link.get_attribute("title") == "English (UK)":
                click_element(browser, Settings, link)

    web_address_navigator(browser, ig_homepage, logger, Settings)
    reload_webpage(browser, Settings)

    # cookie has been LOADED, so the user SHOULD be logged in
    # check if the user IS logged in
    login_state = check_authorization(
        browser,
        Settings,
        "https://www.facebook.com/",
        username,
        userid,
        "activity counts",
        logger,
        logfolder,
        True,
    )
    logger.info("check_authorization: {}".format(login_state))
    if login_state is True:
        # dismiss_notification_offer(browser, logger)
        return True

    # if user is still not logged in, then there is an issue with the cookie
    # so go create a new cookie..
    if cookie_loaded:
        logger.info(
            "Issue with cookie for user {}. Creating new cookie...".format(
                username))

    # wait until the 'username' input element is located and visible
    input_username_XP = '//*[@id="email"]'
    # explicit_wait(browser, "VOEL", [input_username_XP, "XPath"], logger)

    input_username = browser.find_element_by_xpath(input_username_XP)

    logger.info("moving to input_username")
    logger.info("entering input_username")
    (ActionChains(browser).move_to_element(input_username).click().send_keys(
        username).perform())

    # update server calls for both 'click' and 'send_keys' actions
    for i in range(2):
        update_activity(Settings)

    sleep(1)

    #  password
    input_password = browser.find_elements_by_xpath('//*[@id="pass"]')

    if not isinstance(password, str):
        password = str(password)

    logger.info("entering input_password")
    (ActionChains(browser).move_to_element(
        input_password[0]).click().send_keys(password).perform())

    # update server calls for both 'click' and 'send_keys' actions
    for i in range(2):
        update_activity(Settings)

    sleep(1)

    logger.info("submitting login_button")
    login_button = browser.find_element_by_xpath('//*[@type="submit"]')

    (ActionChains(browser).move_to_element(login_button).click().perform())

    # update server calls
    update_activity(Settings)

    sleep(1)

    if bypass_suspicious_attempt is True:
        bypass_suspicious_login(browser, bypass_with_mobile, logger)

    # Check if user is logged-in (If there's two 'nav' elements)
    nav = browser.find_elements_by_xpath('//div[@role="navigation"]')
    if len(nav) == 2:
        # create cookie for username
        logger.info("logged in")
        pickle.dump(
            browser.get_cookies(),
            open("{0}{1}_cookie.pkl".format(logfolder, username), "wb"),
        )
        return True
    else:
        return False