Selenium не открывать браузер
есть страница, на странице есть кнопка по нажатию которой 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, которые будут первоначально открыты, минимизированными. Это сделало мой день для меня относительно этой проблемы. Просто сделайте следующее:
- Откройте Firefox
- нажмите на значок Firefox в левом верхнем углу строки меню - > дополнительно - > специальные настройки приложения.
- перейдите на вкладку" размер и положение".
- нажмите "свернуть" и выберите " применить изначально" (УТВЕРДИТЕЛЬНЫЙ ОТВЕТ.)
эти настройки будут применяться для новых окон 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, которая логически будет порождать браузеры. В среде разработки раздражает иметь дело с окном, которое продолжает появляться и которое вы можете случайно взаимодействовать, делая тест неудачным.
Читайте также: