Selenium браузер в фоновом режиме
Селен + Python Настройка параметров браузера Chrome
1. Справочная информация
При использовании технологии рендеринга в браузере selenium для сканирования информации на сайте по умолчанию это обычный браузер с чистым Chrome, и мы обычно добавляем некоторые плагины, расширения, агенты и другие приложения при использовании браузера. Соответственно, когда мы используем браузер Chrome для сканирования веб-сайта, нам может потребоваться выполнить специальную настройку для этого хрома, чтобы он соответствовал поведению сканера.
Обычно используемые поведения:
Запретить загрузку изображений и видео. Увеличьте скорость загрузки веб-страниц.
Добавить прокси: технология защиты от лазания, используемая для доступа к определенным страницам через стену или реагирования на ограничения частоты доступа по IP.
Использовать мобильную голову: зайдите на мобильный сайт, как правило, технология против скалолазания на этом сайте относительно слаба.
Добавить расширения: функционирует как обычный браузер.
Установите код: ответьте на китайскую станцию, чтобы предотвратить искажение символов.
Блокировать выполнение JavaScript.
………
2. Окружающая среда
python 3.6.1
Система: win7
IDE:pycharm
Установили браузер Chrome
Хромированный драйвер настроен
selenium 3.7.0
ChromeOptions - это класс, который настраивает запуск Chrome как атрибут. С помощью этого класса мы можем настроить следующие параметры для Chrome (эту часть можно увидеть через исходный код селена):
Установить местоположение двоичного файла Chrome (binary_location)
Добавить параметры запуска (add_argument)
Добавить приложение расширения (add_extension, add_encoded_extension)
Добавить параметры экспериментальной настройки (add_experimental_option)
Установить адрес отладчика (debugger_address)
4. Общая конфигурация
4.1 Установить формат кодировки
4.2 Моделирование мобильных устройств
4.3 Запретить загрузку изображений
Это может увеличить скорость сканирования без загрузки изображений.
4.4 Добавить агента
Добавьте прокси-сервер для искателя селена. В этом месте особенно важно отметить, что при выборе прокси-сервера старайтесь выбирать статический IP-адрес, чтобы повысить стабильность сканирования. Потому что если вы выбираете селен в качестве сканера, это означает, что антискользящая способность веб-сайта относительно высока (в противном случае он находится прямо на скрапе), и у него более высокий контроль согласованности между веб-страницами, файлами cookie и статусом пользователя. Если вы используете динамический анонимный IP, время выживания каждого IP будет очень коротким (1 ~ 3 минуты).
4.5 Настройки параметров браузера
Обычно Selenium открывает чистый браузер без расширений, но иногда мы хотим установить в браузере некоторые настройки, например, установить значение по умолчанию для параметра flash, чтобы всегда разрешать глобальное удаление файлов cookie, очистку кешей и тому подобное.
Для достижения этой цели существует способ мышления. В качестве примера ниже приводится браузер Chrome:
Когда запускается искатель селена, сначала откройте окно, введите в адресную строку: chrome: // settings / content или chrome: // settings / privacy, а затем программу, как в обычном веб-приложении. Аналогично, установите и сохраните.
Напишите описание изображения здесь
4.6. Добавить приложение для расширения браузера
Обычно Selenium открывает чистый браузер без расширений, но иногда нам нужно использовать некоторые плагины для обхода данных, такие как класс синтаксического анализа xpath helper, класс перевода и получение дополнительной информации (продажи). Итак, как мы можем добавить некоторые плагины, которые нам нужны, когда мы запускаем chromedriver?
Ниже приведен пример загрузки подключаемого модуля Xpath Helper в Chrome:
4.6.2 Заполните путь к плагину в коде
4.6.3 Отображение результатов
Напишите описание изображения здесь
4.6.4. Примечания
5. Другие параметры
5.1 Команды адресной строки Chrome
Введите следующую команду в адресной строке браузера Chrome, и соответствующий результат будет возвращен. Эти команды включают в себя просмотр состояния памяти, состояния браузера, состояния сети, состояния DNS-сервера, кеша подключаемых модулей и т. Д. Однако следует отметить, что эти команды постоянно меняются, поэтому их не обязательно легко использовать.
about: version - отображает текущую версию
about: memory - отображает использование памяти локальным браузером
about: plugins-отображает установленные плагины
about: история отображения гистограмм
about: dns-отображает статус DNS
about: кэш-страница отображения кеша
about: gpu-есть ли аппаратное ускорение
О файле: flags-Open Некоторые плагины // После использования что-то всплывает: «Пожалуйста, будьте осторожны, эти эксперименты могут быть рискованными», интересно, если я испорчу свою конфигурацию!
chrome: // extensions / -Просмотреть установленные расширения
5.2 Практические параметры Chrome
Некоторые другие практические параметры о Chrome и краткие китайские инструкции, способ использования такой же, как и выше 4.5.4, конечно, его также можно использовать в оболочке.
I have a Selenium test suite that runs many tests and on each new test it opens a browser window on top of any other windows I have open. Very jarring while working in a local environment. Is there a way to tell Selenium or the OS (Mac) to open the windows in the background?
18 Answers 18
If you are using Selenium web driver with Python, you can use PyVirtualDisplay, a Python wrapper for Xvfb and Xephyr.
PyVirtualDisplay needs Xvfb as a dependency. On Ubuntu, first install Xvfb:
Then install PyVirtualDisplay from PyPI:
Sample Selenium script in Python in a headless mode with PyVirtualDisplay:
EDIT
The initial answer was posted in 2014 and now we are at the cusp of 2018. Like everything else, browsers have also advanced. Chrome has a completely headless version now which eliminates the need to use any third-party libraries to hide the UI window. Sample code is as follows:
There are a few ways, but it isn't a simple "set a configuration value". Unless you invest in a headless browser, which doesn't suit everyone's requirements, it is a little bit of a hack:
You can 'supposedly', pass in some parameters into Chrome, specifically: --no-startup-window
Note that for some browsers, especially Internet Explorer, it will hurt your tests to not have it run in focus.
You can also hack about a bit with AutoIt, to hide the window once it's opened.
indeed, use "--headless" instead of "--no-startup-window", I've confirmed it works on Mac and Chrome v80
Chrome 57 has an option to pass the --headless flag, which makes the window invisible.
This flag is different from the --no-startup-window as the last doesn't launch a window. It is used for hosting background apps, as this page says.
Java code to pass the flag to Selenium webdriver (ChromeDriver):
For running without any browser, you can run it in headless mode.
I show you one example in Python that is working for me right now
I used this code for Firefox in Windows and got answer(reference here):
But I didn't test it for other browsers.
Since Chrome 57 you have the headless argument:
The headless mode of Chrome performs 30.97% better than the UI version. The other headless driver PhantomJS delivers 34.92% better than the Chrome's headless mode.
PhantomJSDriver
The headless mode of Mozilla Firefox performs 3.68% better than the UI version. This is a disappointment since the Chrome's headless mode achieves > 30% better time than the UI one. The other headless driver PhantomJS delivers 34.92% better than the Chrome's headless mode. Surprisingly for me, the Edge browser beats all of them.
This is available from Firefox 57+
The headless mode of Mozilla Firefox performs 3.68% better than the UI version. This is a disappointment since the Chrome's headless mode achieves > 30% better time than the UI one. The other headless driver PhantomJS delivers 34.92% better than the Chrome's headless mode. Surprisingly for me, the Edge browser beats all of them.
I am trying to open a simple chrome instance using Python and selenium. Please find my code below:
I would like this to open in the background ie when I am typing something else the mouse/cursor focus should not randomly go to this automated chrome instance once it opens.
Limitations: Please note the below limitations:
- I can not use "--headless"
- I can not use phantomJS
- I can not use PyVirtualDisplay as the code(exe file) will eventually be deployed on windows machines for the end-users.
Would there be any other way to push this chrome instance to the background? Thanks
2 Answers 2
There is no programatic way to open in the Browser Client at the background or as a Background Process.
Of coarse the alternative way is to use a Headless Browser and you can find a detailed discussion in Which drivers support “no-browser”/“headless” testing?.
Why not possible?
Software Test Automation is an art. Your Test Framework should be:
- Configured with all the required softwares, libraries and binaries.
- Test Execution must be performed in a controled environment for optimized performance.
- While your @Tests are executing, it should be free from Manual Intervention.
Particularly when your @Tests are Selenium based, while test execution is InProgress the Test Environment shouldn't be intervened because of the following reasons:
- At the lowest level, the behavior of actions class is intended to mimic the remote end's behavior with an actual input device as closely as possible, and the implementation strategy may involve e.g. injecting synthesized events into a browser event loop. Therefore the steps to dispatch an action will inevitably end up in implementation-specific territory. However there are certain content observable effects that must be consistent across implementations. To accommodate this, the specification requires that remote ends perform implementation-specific action dispatch steps, along with a list of events and their properties. This list is not comprehensive; in particular the default action of the input source may cause additional events to be generated depending on the implementation and the state of the browser (e.g. input events relating to key actions when the focus is on an editable element, scroll events, etc.).
An activation trigger generated by the WebDriver API user needs to be indistinguishable from those generated by a real user interacting with the browser. In particular, the dispatched events will have the isTrusted attribute set to true. The most robust way to dispatch these events is by creating them in the browser implementation itself. Sending OS-specific input messages to the browser's window has the disadvantage that the browser being automated may not be properly isolated from a user accidentally modifying input source state. Use of an OS-level accessibility API has the disadvantage that the browser's window must be focused, and as a result, multiple WebDriver instances cannot run in parallel.
An advantage of an OS-level accessibility API is that it guarantees that inputs correctly mirror user input, and allows interaction with the host OS if necessary. This might, however, have performance penalties from a machine utilisation perspective.
-
is used to generate native system input events for the purposes of test automation, self-running demos, and other applications where control of the mouse and keyboard is needed. The primary purpose of Robot is to facilitate automated testing of Java platform implementations. Using the class to generate input events differs from posting events to the AWT event queue or AWT components in that the events are generated in the platform's native input queue. For example, Robot.mouseMove will actually move the mouse cursor instead of just generating mouse move events.
- As the InternetExplorerDriver is Windows-only, it attempts to use so-called "native", or OS-level events to perform mouse and keyboard operations in the browser. This is in contrast to using simulated JavaScript events for the same operations. The advantage of using native events is that it does not rely on the JavaScript sandbox, and it ensures proper JavaScript event propagation within the browser. However, there are currently some issues with mouse events when the IE browser window does not have focus, and when attempting to hover over elements.
The challenge is that IE itself appears to not fully respect the Windows messages we send the IE browser window (WM_MOUSEDOWN and WM_MOUSEUP) if the window doesn't have the focus. Specifically, the element being clicked on will receive a focus window around it, but the click will not be processed by the element. Arguably, we shouldn't be sending messages at all; rather, we should be using the SendInput() API, but that API explicitly requires the window to have the focus. We have two conflicting goals with the WebDriver project.
First, we strive to emulate the user as closely as possible. This means using native events rather than simulating the events using JavaScript.
Second, we want to not require focus of the browser window being automated. This means that just forcing the browser window to the foreground is suboptimal.
Conclusion
Always keep the Test Environment seperate from Development Environment and absolutely free from Manual Intervention.
У меня есть набор тестов Selenium, который запускает множество тестов, и при каждом новом тесте он открывает окно браузера поверх любых других открытых мной окон. Очень неприятно при работе в локальной среде. Есть ли способ указать Selenium или ОС (Mac) открывать окна в фоновом режиме?
Есть несколько способов, но это не просто «установить значение конфигурации». Если вы не инвестируете в безголовый браузер, который не подходит всем, это немного похоже на взлом:
Вы можете "предположительно" передать некоторые параметры в Chrome, а именно: --no-startup-window
Обратите внимание, что для некоторых браузеров, особенно для Internet Explorer, вашим тестам будет больно, если он не будет работать в фокусе.
Вы также можете немного поработать с помощью AutoIt, чтобы скрыть окно после его открытия.
Затем установите браузер (например, Chrome) в другое рабочее пространство (например, Workspace 2). Браузер будет незаметно работать в другом рабочем пространстве и больше не будет вас беспокоить. Вы по-прежнему можете использовать Chrome на своем рабочем месте без каких-либо перерывов.
Это простое решение Node.js, которое работает в новой версии 4.x ( возможно, также 3.x) Selenium.
Fire Fox
Все это просто работает в фоновом режиме. Это именно то, что мы хотим.
Если вы используете драйвер Google Chrome, вы можете использовать этот очень простой код (у меня он сработал):
Может быть в опциях. Вот идентичный код Java.
Я предлагаю использовать PhantomJS. Для получения дополнительной информации вы можете посетить официальный веб-сайт Phantom.
Насколько я знаю, PhantomJS работает только с Firefox .
После загрузки PhantomJs.exe вам необходимо импортировать его в свой проект, как вы можете видеть на картинке ниже PhantomJS.
Я поместил свой внутрь:
Теперь все, что вам нужно сделать внутри кода Selenium, - это изменить строку
Путь к PhantomJS может быть другим . меняйте как хотите :)
Этот хак сработал для меня, и я уверен, что он сработает и для вас;)
В Windows вы можете использовать win32gui:
Я использовал этот код для Firefox в Windows и получил ответ (ссылка здесь):
Но в других браузерах я не тестировал.
Начиная с Chrome 57 у вас есть аргумент без головы:
Безголовый режим Chrome работает на 30,97% лучше, чем версия с пользовательским интерфейсом. Другой безголовый драйвер PhantomJS обеспечивает на 34,92% больше, чем безголовый режим Chrome.
PhantomJSDriver
Безголовый режим Mozilla Firefox работает на 3,68% лучше, чем версия с пользовательским интерфейсом. Это разочарование, поскольку безголовый режим Chrome показывает время на 30% лучше, чем пользовательский интерфейс. Другой безголовый драйвер PhantomJS обеспечивает на 34,92% больше, чем безголовый режим Chrome. На мой взгляд, браузер Edge превосходит их всех.
Это доступно в Firefox 57+.
Безголовый режим Mozilla Firefox работает на 3,68% лучше, чем версия с пользовательским интерфейсом. Это разочарование, поскольку безголовый режим Chrome показывает время на 30% лучше, чем пользовательский интерфейс. Другой безголовый драйвер PhantomJS обеспечивает на 34,92% больше, чем безголовый режим Chrome. На мой взгляд, браузер Edge превосходит их всех.
Примечание: PhantomJS больше не поддерживается!
Для работы без браузера вы можете запустить его в автономном режиме.
Я покажу вам один пример на Python, который сейчас у меня работает
В Chrome 57 есть возможность передать флаг --headless, который делает окно невидимым.
Этот флаг отличается от --no-startup-window, поскольку последний не запускает окно. Он используется для размещения фоновых приложений, как сказано на этой странице.
Код Java для передачи флага веб-драйверу Selenium (ChromeDriver):
Если вы используете веб-драйвер Selenium с Python, вы можете использовать PyVirtualDisplay, оболочку Python для Xvfb и Xephyr.
PyVirtualDisplay требует Xvfb в качестве зависимости. В Ubuntu сначала установите Xvfb:
Затем установите PyVirtualDisplay из PyPI:
Пример сценария Selenium на Python в режиме без головы с PyVirtualDisplay:
ИЗМЕНИТЬ
Первоначальный ответ был опубликован в 2014 году, а сейчас мы находимся на пороге 2018 года. Как и все остальное, браузеры также продвинулись вперед. У Chrome теперь полностью автономная версия, которая избавляет от необходимости использовать какие-либо сторонние библиотеки для скрытия окна пользовательского интерфейса. Пример кода выглядит следующим образом:
У меня есть набор тестов selenium, который запускает много тестов, и при каждом новом тесте он открывает окно браузера поверх любых других окон, которые я открываю. Очень неудобно работать в локальной среде. Любой способ сказать селену или ОС (MAC) открыть окна в фоновом режиме?
ОТВЕТЫ
Ответ 1
Существует несколько способов, но это не просто "установить значение конфигурации". Если вы не инвестируете в безмозглый браузер, который не соответствует всем требованиям, это немного взломает:
Вы можете "предположительно", передать некоторые параметры в Chrome, в частности: --no-startup-window
Обратите внимание, что для некоторых браузеров, особенно для IE, это повредит вашим тестам, чтобы они не работали в фокусе.
Вы также можете немного взломать AutoIT, чтобы скрыть окно после его открытия.
Ответ 2
Если вы используете веб-драйвер Selenium с Python, вы можете использовать PyVirtualDisplay, оболочку Python для Xvfb и Xephyr.
PyVirtualDisplay нуждается в Xvfb в качестве зависимости. На Ubuntu сначала установите Xvfb:
затем установите PyVirtualDisplay из Pypi:
Пример Selenium script в Python в режиме без звука с PyVirtualDisplay:
ИЗМЕНИТЬ Первоначальный ответ был опубликован в 2014 году, и теперь мы находимся на пороге 2018 года. Как и все остальное, браузеры также продвинулись. Chrome теперь имеет совершенно безголовую версию, которая устраняет необходимость использования каких-либо сторонних библиотек для скрытия окна пользовательского интерфейса. Пример кода выглядит следующим образом:
Ответ 3
Chrome 57 имеет возможность пропускать флаг --headless, что делает окно невидимым.
Этот флаг отличается от -no-startup-window, поскольку последний не запускает окно. Он используется для размещения фоновых приложений, как говорится в на этой странице.
Java-код для передачи флага в Selenium webdriver (ChromeDriver):
Ответ 4
Начиная с Chrome 57 у вас есть аргумент без головы:
Безголовый режим Chrome работает на 30,97% лучше, чем версия пользовательского интерфейса. Другой безголовый драйвер PhantomJS поставляет на 34,92% лучше, чем режим Chrome без наушников.
PhantomJSDriver
Безголовый режим Mozilla Firefox работает на 3,68% лучше, чем версия пользовательского интерфейса. Это разочарование, так как режим Chrome headless достигает> на 30% лучшего времени, чем пользовательский интерфейс. Другой безголовый драйвер PhantomJS поставляет на 34,92% лучше, чем режим Chrome без наушников. Удивительно для меня, браузер Edge бьет их всех.
Это доступно в Firefox 57+
Безголовый режим Mozilla Firefox работает на 3,68% лучше, чем версия пользовательского интерфейса. Это разочарование, так как режим Chrome headless достигает> на 30% лучшего времени, чем пользовательский интерфейс. Другой безголовый драйвер PhantomJS поставляет на 34,92% лучше, чем режим Chrome без наушников. Удивительно для меня, браузер Edge бьет их всех.
Примечание: PhantomJS больше не поддерживается!
Ответ 5
Для запуска без какого-либо браузера вы можете запустить его в автономном режиме.
Я покажу вам один пример в Python, который работает на меня прямо сейчас
Ответ 6
Я предлагаю использовать Phantom Js для получения дополнительной информации вам нужно посетить Phantom Официальный сайт
Насколько я знаю, PhantomJS работает только с Firefox..
после загрузки PhantomJs.exe вам нужно импортировать в свой проект, как вы можете видеть на картинке ниже. Phantomjs находится внутри общей → Библиотеки → phantomjs.exe
Теперь все, что вам нужно в коде Selenium, это изменить строку
Чтобы что-то вроде
Путь к phantomjs может быть другим. измените, как вам нравится:)
Что это, это сработало для меня. и определенно он будет работать для вас, Cheers
Ответ 7
В Windows вы можете использовать win32gui:
Ответ 8
Это может быть в настройках. Вот идентичный код Java.
Ответ 9
В * nix вы также можете запустить безголовый X-сервер, такой как Xvfb, и указать для него переменную DISPLAY:
Ответ 10
Скопируйте файл .exe из папки bin при загрузке и вставке в папку bin debug/release в проекте Visual Studio.
Добавьте это, используя
В вашем коде откройте драйвер следующим образом:
Ответ 11
Ответ 12
Затем установите браузер (например, Chrome) на другое рабочее пространство (например, рабочее пространство 2). Браузер будет тихо работать в другом рабочем пространстве и больше не беспокоить вас. Вы по-прежнему можете использовать Chrome в своем рабочем пространстве без перерыва.
Ответ 13
Я надеюсь, что это работает для вас.
Ответ 14
Это простое решение NodeJS, которое работает в новой версии Sexium 4.x (возможно, также 3.x).
Читайте также: