Selenium не открывать браузер

Обновлено: 05.07.2024

есть страница, на странице есть кнопка по нажатию которой ajax генерит ссылку, т.е. в исходном коде страницы ссылки нет, по ссылке фотография.

вопрос как возможно получить ссылку?

получилось осуществить это с помощью селениум, но во-первых непонятно почему надо выставлять ожидание до того как страница загрузится вручную(ибо похоже бывают проблемы с угадыванием этого времени), затем алгоритм такой, что открывается браузер, нажимается ссылка, в фф почему то открывается новое окно, потом я перехожу на это новое окно(с ссылкой на картинку) и получаю адрес текущей страницы, которая и является ссылкой на картинку, затем передаю это дело в urllib и сохраняю на диск.
не нравится, то, что браузер открывается закрывается на каждый запрос, нельзя ли его как то спрятать, + мне кажется что как то это всё медленно происходит.

selenium без открытия окна браузера и в несколько потоков

Проще посмотреть что происходит по нажатию кнопки и сделать тоже самое на Python. Хорошо бы на страничку глянуть.

Selenium это медленно и по этому только для тяжелых случаев. У меня несколько одинаковых скриптов работало одновременно на Linux без проблем.

selenium без открытия окна браузера и в несколько потоков

romis
У меня несколько одинаковых скриптов работало одновременно на Linux без проблем.

ну а как вы это делали?

romis
Проще посмотреть что происходит по нажатию кнопки и сделать тоже самое на Python.

задача получить сслыку по кнопке “загрузить оригинал на диск” для картинки в VK (без авторизации)

selenium без открытия окна браузера и в несколько потоков

>ну а как вы это делали?
Запускал из разных папок.

Если выдрать image_id из исходного кода страницы то можно получить несколько ссылок так

selenium без открытия окна браузера и в несколько потоков

дело в том, что как я понял по вашему коду в test.html будет не распарсенный список ссылок на изображение это я и так могу получить, но мне надо получить самую большую фотографию, которая обычно имеет префикс w_, но не всегда и чем это определяется непонятно(видимо тем что в разное время были разные стандарты) и поэтому по кнопке “загрузить оригинал на диск” выдает разные типы ссылок в общем случае.

мне как бы надо сэмулировать нажатие на эту кнопку, только я не знаю можно ли это сделать без браузера.

selenium без открытия окна браузера и в несколько потоков

При нажатии на кнопку происходит примерно то что в коде выше, осталось выбрать ссылку и скачать файл. Как выбрать ссылку не знаю. Возможно придется поковырять JavaScript. Я использую Firefox+Firebug для “посмотреть что делает браузер”.

Selenium нажмет на кнопку легко но скрыть окно браузера врядли удастся.

selenium без открытия окна браузера и в несколько потоков

selenium без открытия окна браузера и в несколько потоков

нет такой возможности нету, т.к. надо логиниться.

Я использую Firefox+Firebug для “посмотреть что делает браузер”.
не очень понятно, что вы под этим имеете ввиду и как это можно сэмулировать на питоне.

Отредактировано mrgloom (Авг. 8, 2012 15:29:24)

selenium без открытия окна браузера и в несколько потоков

Браузер же что то отправляет что то получает. Все это можно подсмотреть и реализовать на питоне.

По поводу использования selenium без окна браузера есть возможнось уменьшить размер окна до нуля set_window_size(0, 0)

selenium без открытия окна браузера и в несколько потоков

возможен вариант(при использовании селениума), когда браузер не успел загрузить страницу?
или там “оно само” ждет сколько нужно до загрузки?

теоретически ведь можно и селениум с использованием прокси пускать в несколько потоков?

когда я выполняю несколько тестов одновременно, я не хочу, чтобы окно браузера Firefox было видно.. Я могу минимизировать его, используя selenium.minimizeWindow() но я не хочу этого делать.

есть ли способ скрыть окно Firefox? Я использую FireFox WebDriver.

Python

самый простой способ скрыть браузер-это установить PhantomJS. Затем измените эту строку:

остальную часть вашего кода не нужно будет изменять, и браузер не откроется. Для отладки используйте driver.save_screenshot('screen.jpg') на разных шагах вашего кода или просто снова переключитесь на Firefox webdriver.

в Windows вам нужно будет указать путь к помощи PhantomJS.exe:

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

использовать . Он имеет все возможности для обработки стекла. Это бесплатный инструмент.

откройте редактор и напишите ниже кода для скрытия любого окна.

, чтобы отобразить его, вы можете использовать ниже код.

WinTitleMatchMode имеет различные параметры, которые могут быть использованы для соответствия заголовку Windows.

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

на HideNSeek.exe - у меня ниже AutoIt Код:

$CmdLine[] - это массив, который будет иметь все параметры командной строки.

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

ниже строки кода будет выполняться AutoIt exe, и если я передам '0' в 1-м параметре, то он скроет окно, и если я пройду '1' тогда он будет отображать окна, соответствующие заглавие:.

Я надеюсь, что это поможет вам. Спасибо!

я использовал xvfb для решения такой проблемы.

во-первых, установите Xvfb:

на Debian / Ubuntu; или

на Fedora / RedHat. Затем выберите номер дисплея, который вряд ли когда – либо столкнется (даже если вы добавите реальный дисплей позже) - что-то высокое, как 99 должно сделать. Запустите Xvfb на этом дисплее с отключенным контролем доступа:

теперь вам нужно убедиться, что ваш дисплей установлен на 99 перед запуском сервера Selenium (который сам запускает браузер). Самый простой способ сделать это-экспортировать DISPLAY=:99 в среду для Selenium. Во-первых, убедитесь, что все работает из командной строки Вот так:

Если вы используете Selenium RC или Remote WebDriver, вы можете запустить экземпляр браузера на удаленной или виртуальной машине. Это означает, что вам не нужно беспокоиться о скрытии окон браузера, поскольку они не будут запускаться на вашем локальном компьютере.

браузер PhantomJS по умолчанию-IE, хотя многие функции браузера там не работают. Если вы хотите открыть безголовое (скрытое) окно Firefox, вы можете использовать новая функция Firefox 56+.

С помощью этой функции вы можете получить headless водитель такой:

новые версии Chrome также имеют .

Если вы используете KDE Desktop, вы можете сделать окна Firefox, которые будут первоначально открыты, минимизированными. Это сделало мой день для меня относительно этой проблемы. Просто сделайте следующее:

  1. Откройте Firefox
  2. нажмите на значок Firefox в левом верхнем углу строки меню - > дополнительно - > специальные настройки приложения.
  3. перейдите на вкладку" размер и положение".
  4. нажмите "свернуть" и выберите " применить изначально" (УТВЕРДИТЕЛЬНЫЙ ОТВЕТ.)

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

Я нашел самый простой способ-использовать PhantomJS, по предложению Стефана. Я загрузил двоичный файл и поместил phantomjs в мой путь, в моем случае (Mac OS) в /usr/bin/. Мне нравится сохранять возможность видеть, что происходит, поэтому я завернул его так (в Python):

кто-нибудь знает, может ли Selenium (предпочтительно WebDriver) общаться и действовать через браузер, который уже запущен перед запуском клиента Selenium?

Я имею в виду, если Selenium может взаимодействовать с браузером без использования сервера Selenium (например, может быть запущен вручную Internet Explorer).

Это довольно старый запрос: разрешить WebDriver подключаться к работающему браузеру . Так что официально это не поддерживается.

это дубликат ответа ** Повторное подключение к драйверу в python selenium * * это применимо ко всем драйверам и для Java api.

извлечение в session_id и _url из объекта драйвера.

используйте эти два параметра для подключения к драйверу.

и вы снова подключены к своему водителю.

это возможно. Но вы должны взломать его немного, есть код Что вам нужно сделать, это запустить автономный сервер и" патч " RemoteWebDriver

этот фрагмент успешно позволяет повторно использовать существующий экземпляр браузера, избегая при этом создания дубликата браузера. Найдено в Тарун Лалвани's блоге.

все решения до сих пор не имели определенной функциональности. Вот мое решение:

Я успешно подключился к существующему сеансу браузера, используя эту функцию

документация может быть найдена здесь.

это довольно легко с помощью JavaScript selenium-webdriver клиент:

во-первых, убедитесь, что у вас работает сервер WebDriver. Например, скачать ChromeDriver, затем запустить chromedriver --port=9515 .

во-вторых, создать драйвера такой:

var webdriver = require ('selenium-webdriver');

Я получил решение в python, я изменил класс webdriver, основанный на классе PersistenBrowser, который я нашел.

заменить модуль webdriver /usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py

вот рабочий пример кода, скопированный из приведенной выше ссылки:

ваш тест должен иметь RemoteWebDriver, созданный из существующего сеанса браузера. Чтобы создать этот драйвер, вам нужно только знать "информация о сеансе", т. е. адрес сервера (локального в нашем случае), на котором работает браузер, и идентификатор сеанса браузера. Чтобы получить эти сведения, мы можем создать один сеанс браузера с selenium, открыть нужную страницу и, наконец, запустить фактический тестовый скрипт.

Я не знаю, есть ли способ получить информацию о сеансе для сеанса, который не был создан selenium.

Я использую Selenium RC для автоматизации некоторых операций браузера, но я хочу, чтобы браузер был невидимым. Это возможно? Как? Как насчет сетки Селена? Могу ли я скрыть окно Selenium RC также?

  • вы можете использовать Selenium Grid, чтобы браузер был открыт на совершенно другой машине (или виртуальной машине), к которой вы можете подключиться через VNC или подключение к удаленному рабочему столу, если хотите увидеть браузер. Кроме того, другой вариант: если вы запустите процесс Jenkins foreground на этом удаленном сервере, он может выполнить ваш тестовый проект на рабочем столе.

  • вы можете запустить Selenium 'headless' на Linux в XVFB. Я никогда не пробовал делать это и сомневаюсь, что это действительно стоит усилий. http://www.alittlemadness.com/2008/03/05/running-selenium-headless/

  • вы можете обернуть Selenium RC в службу Windows. http://support.microsoft.com/kb/137890 . За исключением того, что ограничения разрешений для более поздних версий windows, вероятно, не позволят Selenium получить доступ к рабочему столу, как Windows 2000, используемый для разрешения делать.

  • другой вариант - использовать что-то вроде WebDriver HTMLUnitDriver, который не запускает "реальный" браузер. http://code.google.com/p/webdriver/ . Также есть опция PhantomJS, а также "безголовый хром", который вы можете использовать.

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

мне легко удалось скрыть окно браузера.

просто установить PhantomJS. Затем измените эту строку:

to:

остальная часть вашего кода не нужно будет менять, и браузер не откроется. Для отладки используйте driver.save_screenshot('screen.jpg') на разных этапах вашего кода.

+1 для Selenium RC в качестве службы windows.

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

что бы я сделал, чтобы посвятить компьютер в вашей локальной сети, чтобы быть в сети все время и иметь сервер Selenium RC работает. Таким образом, вы используете IP-адрес этого компьютера вместо localhost для выполнения тестов. Например:

(учитывая, что это ip компьютера под управлением сервер.)

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

в Linux вы можете запустить тестовый браузер на виртуальном дисплее. Вам понадобится xvfb пакет для создания виртуального X-сервера. В дистрибутивах на основе Debian просто запустите

есть хороший инструмент ephemeral-x.sh это позволит удобно настроить любую команду для запуска на виртуальном дисплее. скачать и сделать его исполняемым:

затем вы можете просто использовать его для запуска сервера Selenium:

все браузер окна, созданные Selenium, теперь будут использовать виртуальный дисплей и будут невидимы для вас.

Если вы находитесь на Windows, один из вариантов -запуск тестов под другой учетной записью. Это означает, что браузер и сервер java не будут видны для вашей собственной учетной записи.

вот как я запускаю свои тесты с maven на рабочем столе linux (Ubuntu). Мне надоело, что я не могу работать с firefox webdriver, всегда сосредотачиваясь.

Я установил xvfb

xvfb-run-a mvn clean install

во многих случаях PhantomJS не будет полностью соответствовать вашим потребностям, я хотел бы подробно остановиться на опции headless chrome, упомянутой в ответе Дэйва Ханта.

chrome 57 только что запустил эту функцию. Вы можете использовать его, передав флаг --headless через ChromeDriver, для получения дополнительной информации см. обсуждение в этот вопрос

есть связанный с PhantomJS проект под названием GhostDriver, который предназначен для запуска экземпляров PhantomJS в сетке Selenium с использованием протокола webdriver wire JSON. Это, вероятно, то, что вы ищете, хотя этот вопрос уже 4 года.

на MacOSX я не смог скрыть окно браузера, но, по крайней мере, я понял, как переместить его на другой дисплей, чтобы он не нарушал мой рабочий процесс так сильно. Пока Firefox запускает тесты, просто нажмите на его значок в доке, выберите Параметры и назначьте отображение 2.

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

Читайте также: