Можно ли использовать `element.click ()` в Selenium с Chrome даже в автономном режиме? - PullRequest
0 голосов
/ 14 мая 2018

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

Так что я скорее хочу использовать режим без головы. Но тогда элемент всегда вызывает следующую ошибку:

WebDriverException: Сообщение: неизвестная ошибка: Элемент ... не активен в точке (435, 575). Другой элемент получит клик:

...

(Информация о сеансе: безголовый хром = 66.0.3359.139) (Информация о драйвере: chromedriver = 2.37.544337 (8c0344a12e552148c185f7d5117db1f28d6c9e85), платформа = Mac OS X 10.13.4 x86_64)

Эта ошибка однажды произошла в моем режиме без заголовка, но поскольку я изменил размер браузера на driver.maximize_window(), ошибка исчезла. Это может дать понять, что кнопка должна быть видна на экране, чтобы ее можно было нажимать в Chrome.

Но в безголовом режиме может показаться, что кнопка скрыта, и поэтому элемент всегда можно щелкнуть, что приводит к ошибке. Так есть ли способ сделать кнопку нажатой даже в безголовом режиме?

Соответствующий код следующий, а последняя строка вызывает ошибку:

def login(driver, url, username, password):
    driver.get(url)
    uname = driver.find_element_by_name("login")
    uname.send_keys(username) 

    passw = driver.find_element_by_name("password")
    passw.send_keys(password)
    submit_button = driver.find_element_by_class_name("button")
    action = webdriver.ActionChains(driver)
    action.move_to_element(submit_button)
    submit_button.click()

1 Ответ

0 голосов
/ 14 мая 2018

но так как я изменил размер браузера с помощью driver.maximize_window ()

Я столкнулся с этой проблемой однажды, когда работал с headless Chrome в Jenkins. Проблема заключалась в том, что браузер в безголовом режиме не открывался в полном разрешении. Поэтому я добавил строку, чтобы открыть браузер в определенном разрешении, используя

driver.set_window_size(1440, 900)

А затем передавая URL и получая все. Вы можете попробовать этот подход один раз, чтобы увидеть, если это проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...