Как передать зарегистрированный объект Selenium Webdriver в функцию в Python 3 - PullRequest
0 голосов
/ 25 марта 2020

Я могу войти на веб-сайт, используя Selenium без головы Chrome Веб-драйвер, используя следующую функцию:

def getChromeDriver():
    # instantiate a chrome options object so you can set the size and headless preference
    chrome_options = Options()
    chrome_options.add_argument("--headless")
    chrome_options.add_argument("--window-size=1920x1080")

    chrome_driver = getcwd() + "/chromedriver"

    driver = webdriver.Chrome(chrome_options=chrome_options, executable_path=chrome_driver)

    # return driver object
    return driver


def login(driver, url):
    try:
            # go to the webpage
            driver.get(url)

            # login to site
            driver.find_element_by_id('loginform-username').send_keys('<username>')
            driver.find_element_by_id('loginform-password').send_keys('<password>')

            # hit submit
            driver.find_element_by_name('login-button').click()
            success = True

    except Exception as e:
            print("ERROR!!! : " + e)
            success = False

    finally:
            return (driver, success)


if __name__ == "__main__":
    chrome_driver = getChromeDriver()

    (chrome_driver, success) = login(chrome_driver, 'http://example.com/site/login')

После этого я передаю этот объект веб-драйвера другой функции, чтобы сделать снимок экрана веб-страницы. следующим образом:

def takeScreenshot(driver, pagename, url):
    # go to the webpage
    driver.get(url)

    # capture the screen
    driver.get_screenshot_as_file("./screenshots/" + pagename + ".png")


if __name__ == "__main__":
    ...
    ...
    takeScreenshot(chrome_driver, "Customers", "http://example.com/customer/index.php")

Но когда я открываю скриншот, это страница входа, хотя я знаю, что я уже успешно вошел в систему.

С другой стороны, когда я сделать снимок экрана, не передавая объект драйвера какой-либо функции, он работает просто отлично:

if __name__ == "__main__":
    ...
    ...
    chrome_driver.get("http://example.com/customer/index.php")
    chrome_driver.get_screenshot_as_file("/home/ubuntu/customer.png")

Вышеуказанные строки кода работают точно так, как ожидалось. Есть ли другой способ, которым объект Webdriver должен передаваться в качестве аргумента, или мне нужно передавать куки отдельно? Заранее спасибо.

1 Ответ

0 голосов
/ 26 марта 2020

Мне просто нужно было перевести скрипт в спящий режим на 5 секунд, чтобы разрешить сохранение файлов cookie, например:

def login(driver, url):
    try:
        ...
        ...
        driver.find_element_by_id('loginform-username').send_keys('<username>')
        driver.find_element_by_id('loginform-password').send_keys('<password>')

        # hit submit
        driver.find_element_by_name('login-button').click()
        time.sleep(5)
        success = True
...