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, конечно, его также можно использовать в оболочке.
Когда я запускаю браузер Chrome из оболочки python с помощью Selenium webdriver, он работает хорошо и хорошо. Но когда я запускаю браузер, используя тот же код из сценария Python, он сбой. Как я мо.
Я пытаюсь открыть новую вкладку в селене, используя следующую строку кода driver.findElement(By.cssSelector("body")).sendKeys(Keys.chord(Keys.CONTROL, "t")); Но вкладки не открываются. Может ли кто.
Мне нужно открыть браузер Chrome с помощью webdriver, используя URL-адрес, который имеет несколько параметров. В зависимости от параметров поток моего сайта будет отличаться. Это работает правильно.
Я автоматизирую одно приложение для больницы, мне нужно получить документ по идентификатору клиента, на первых 2 страницах, где я заполняю автоматизацию данных, отлично работаю, но после нажатия на.
Я использую следующую строку, чтобы выбрать элемент, который находит определенный текст на веб-странице: driver.find_element_by_xpath("//*[contains(text(), 'my string')]") И это прекрасно работает.
Я использую селен в Python3, и я работаю над тем, чтобы заполнить анкету. В этой анкете я повторяю все вопросы и отвечаю на них. Моя проблема заключается в выяснении того, с каким вопросом я имею д.
Я на самом деле делаю "Facebook add friends script", который нажимает двадцать раз на кнопку "Добавить друга". Все проблемы с работой, но иногда Facebook popup (Help user "name" find friends) преры.
В настоящее время я использую привязку selenium для python и хочу оценить привязку JavaScript, но застрял с образцом приложения! Как я не могу понять, что неправильно в этом примере, любая помощь б.
Я новичок в селене. Я пытаюсь выбрать динамическую дату из календаря. скриншоты прилагаются, пожалуйста, помогите мне.
Я столкнулся с проблемой блокировки всплывающих окон, открывая всплывающее окно с родительской кнопкой "Нажмите". Ссылка на ошибку Я пробовал следующие вещи, но я столкнулся с той же ошибкой. 1.В и.
Как я могу выбрать эту кнопку и нажмите на нее? Я пробовал несколько методов, и никто из них не щелкнул его.
Есть ли ограничение использования узла селена внутри контейнера Docker? Вариант использования: хотите использовать концентратор селена внутри контейнера докера. Я говорю о том, что только узловой у.
Я пытаюсь протестировать некоторые локальные флеш-разработки, введя мой swf файл на веб-сайт, обслуживаемый моим тестовым сервером. Я уже установил --disable-web-security в Chrome, чтобы позволить .
Серверная сторона Наш сервер Selenium Grid имеет общедоступный IP-адрес (104.131.xxx.xxx) java -jar selenium-server-standalone-3.4.0.jar -role hub Вершины В частной сети есть узловые компьютеры (19.
пожалуйста, помогите по этому поводу. Файл jar отсутствует и не может вызывать классы, связанные с webdriver, в eclipse.
Я смог выполнить мои скрипты на selenium java 3.4.0 и geckodriver 0.16, но с момента последнего обновления некоторые из функций устарели, из-за чего мне пришлось изменить код конфигурации браузера.
Я встретил проблему, когда хотел получить атрибут стиля элемента. $styleValue = $this->getAttribute("//ul@style"); Но результат var_dump ($ styleValue) string(1) ";" Но я ожидал "margin-left: -2.
почему я не могу захватить этот элемент, используя driver.find_element_by_link_text ("Торговые данные") Образец
Итак, я пытаюсь добавить псевдонимы электронной почты в свою учетную запись Gmail автоматически, и я написал этот код для переноса псевдонимов из списка в Gmail. Тем не менее, я столкнулся с пробле.
Пример изображения с отключенным выпадающим меню: пытался: Select select = new Select(driver.findElement(dropDownLoca
Я хочу проверить флажки переменной и переменные на моей веб-странице. Это похоже на онлайн-рынок, поэтому каждый раз, когда вы обновляете одну и ту же страницу, вы получаете разные картинки с разны.
Мне нужна помощь с Selenium WebDriver. Я пытался автоматизировать сайт, но застрял в области PIN-пэдов. Когда я нажал на элемент ввода PIN-кода, элемент находится только в режиме чтения и может при.
Мы используем следующий код, чтобы делать скриншоты в селене. WebDriver driver = new FirefoxDriver(); File src = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); FileUtils.copyFile(src, .
Я пытаюсь автоматизировать страницу wiki с помощью селена WebDriver. Я не могу идентифицировать веб-элементы, которые при использовании iframe dri.swi
Я хочу знать, как я могу обработать "pull to refresh" в webdriver (или селене) Я делаю простую программу, которая является искателем Facebook, используя webdrvier и beautifulsoup. Когда я запрашива.
Я видел множество примеров скриншотов во время тестов на селен, но похоже, что все они требуют много работы. Некоторые примеры из них окружают тест с блоком try catch и в блоке catch добавляют код .
Рубрики
А так же делитесь знаниями, знакомьтесь с новыми утилитами и приложениями, учитесь у всегда готовых помочь ответить на самые сложные вопросы во всех сферах IT и программирования. Станьте гуру и экспертом разработки ПО, получите признание коллег, заработайте репутацию, создайте стартап или приложение которое будет работать на вас!
По неизвестным причинам мой браузер очень медленно открывает тестовые страницы моего удаленного сервера. Поэтому я думаю, что если я смогу повторно подключиться к браузеру после выхода из скрипта, но не выполнять, webdriver.quit() это оставит браузер открытым. Вероятно, это своего рода ручка HOOK или webdriver. Я просмотрел документ API селена, но не нашел никакой функции. Я использую Chrome 62, x64, windows 7, selenium 3.8.0. Я буду очень признателен, если вопрос будет решен или нет.
Вы пробовали повторно использовать существующий каталог пользователя Chrome, используя параметр user-data-dir вместо того, чтобы webdriver каждый раз создавал новый каталог. Вместо загрузки хром будет использовать материал из кеша.
@Grasshopper Что это за черная магия? Я использовал эту опцию Chrome, и она значительно сократила время загрузки. Я поищу это. Большое спасибо.
Нет , вы не можете повторно подключиться к предыдущему сеансу просмотра веб-страниц после выхода из сценария. Даже если вы можете извлечь атрибуты Session ID , Cookies и другие атрибуты сеанса из предыдущего контекста просмотра, вы все равно не сможете передать эти атрибуты как HOOK в WebDriver .
Более чистый способ - вызвать, webdriver.quit() а затем охватить новый контекст просмотра .
Глубокое погружение
Было много обсуждений и попыток повторно подключить WebDriver к существующему работающему контексту просмотра . В обсуждении Разрешить webdriver подключаться к работающему браузеру Саймон Стюарт [Creator WebDriver] четко упомянул:
- Reconnecting to an existing Browsing Context is a browser specific feature, hence can't be implemented in a generic way.
- With internet-explorer, it's possible to iterate over the open windows in the OS and find the right IE process to attach to. and google-chrome needs to be started in a specific mode and configuration, which effectively means that just attaching to a running instance isn't technically possible.
tl; доктор
Да , на самом деле это довольно просто.
Сеанс selenium webdriver представлен URL-адресом подключения и session_id, вы просто подключаетесь к существующему.
Отказ от ответственности - подход использует внутренние свойства селена (в некотором роде "частные"), которые могут измениться в новых выпусках; лучше не использовать его для производственного кода; лучше не использовать против удаленного SE (вашего концентратора или провайдера, такого как BrowserStack / Sauce Labs) из-за оговорки / утечки ресурсов, описанной в конце.
Когда запускается экземпляр webdriver, вам необходимо получить вышеупомянутые свойства; образец:
Теперь, когда эти два свойства известны, другой экземпляр может подключиться; «Уловка» состоит в том, чтобы запустить Remote драйвер и предоставить указанное _url выше - таким образом, он будет подключаться к этому запущенному процессу селена:
Когда это будет запущено, вы увидите, что открывается новое окно браузера.
Это потому, что при запуске драйвера библиотека селена автоматически запускает для него новый сеанс - и теперь у вас есть 1 процесс веб-драйвера с 2 сеансами (экземпляры браузеров).
Если вы перейдете к URL-адресу, вы увидите, что он выполняется в этом новом экземпляре браузера, а не в том, который остался после предыдущего запуска, что является нежелательным поведением.
На этом этапе необходимо сделать две вещи: а) закрыть текущий сеанс SE («новый») и б) переключить этот экземпляр на предыдущий сеанс:
Вот и все - теперь вы подключены к предыдущему / уже существующему сеансу со всеми его свойствами (файлы cookie, LocalStorage и т. Д.).
Между прочим, вам не нужно предоставлять desired_capabilities при запуске нового удаленного драйвера - они сохраняются и унаследованы от существующего сеанса, который вы переняли.
Предостережение - запуск процесса SE может привести к некоторой утечке ресурсов в системе.
Всякий раз, когда один запускается, а затем не закрывается - как в первом фрагменте кода - он будет оставаться там, пока вы не убьете его вручную. Под этим я подразумеваю - например, в Windows - вы увидите процесс «chromedriver.exe», который вам нужно будет завершить вручную, как только вы закончите с ним. Он не может быть закрыт драйвером, который подключился к нему как к удаленному процессу селена.
Причина - всякий раз, когда вы запускаете локальный экземпляр браузера, а затем вызываете его quit() метод, он состоит из двух частей: первая состоит в том, чтобы удалить сеанс из экземпляра Selenium (что сделано во втором фрагменте кода наверху), а другой - остановить локальную службу (chrome / geckodriver), которая обычно работает нормально.
Дело в том, что для удаленных сеансов отсутствует вторая часть - ваша локальная машина не может управлять удаленным процессом, это работа концентратора этого удаленного. Итак, вторая часть - это буквально оператор pass Python - без операции.
Если вы запускаете слишком много служб селена на удаленном концентраторе и не контролируете его, это приведет к утечке ресурсов с этого сервера. Облачные провайдеры, такие как BrowserStack, принимают меры против этого - они закрывают сервисы, которые не работали в течение последних 60-х и т. Д., Но вы не хотите этого делать.
А что касается локальных сервисов SE - только не забывайте время от времени очищать ОС от потерянных драйверов селена, о которых вы забыли :)
Я использовал селен RemoteWebdriver для подключения к удаленным концентраторам.
Если в течение некоторого времени нет активности, сессия будет автоматически закрыта.
Вот журнал в контейнере selenium/standalone-chrome-debug:3.141.59-mercury :
Поэтому я предполагаю, что драйвер Chrome автоматически закроет сеанс бездействия через 30 минут. Я хочу знать, как я могу отключить автоматическое закрытие без активности?
В этой статье мы расскажем о хитростях и советах по Python, которые должны быть известны разработчику Python.
В одном из недавних постов я рассказал о том, как я использую навыки количественных исследований, которые я совершенствую в рамках программы TPQ.
Вы когда-нибудь хотели поделиться с кем-то файлом, но он содержал конфиденциальную информацию? Многие думают, что электронная почта безопасна, но это.
Недавно я столкнулся с интересной бизнес-задачей - визуализацией сбоев в цепочке поставок лекарств, которую могут просматривать врачи и.
Ответы 1
Я нашел подсказку от код здесь
-sessionTimeout
Specifies the timeout before the server automatically kills a session that hasn't had any activity in the last X seconds. The test slot will then be released for another test to use. This is typically used to take care of client crashes. For grid hub/node roles, cleanUpCycle must also be set. If a node does not specify it, the hub value will be used.
Тайм-аут действительно 1800 с, это то же самое, что ожидалось в журнале.
А потом нашел еще вопрос по этому поводу.
Я не знаком с java. Я использовал selenium/standalone-chrome-debug:3.141.59-mercury образ докера для запуска хромдрайвера. Поэтому, если вы также используете докер, вы можете установить env при запуске докера.
Это мой файл для создания докеров:
Это около одного года перерыва.
Если вариант detach бесполезен для вашей проблемы, имеет ли смысл публиковать этот ответ?
Возможно, опция detach поможет решить чью-то проблему. Ведь каждая проблемная ситуация индивидуальна, и я показываю лог решения проблемы, чтобы другим не нужно было пробовать.
Нет, для варианта detach есть более канонические ответы, но, грубо говоря, этот ответ не имеет отношения к варианту detach .
Хорошо, я снова отредактирую ответ (удалить описание об отсоединении). Я нашел другой способ решить проблему.
Я использовал селен RemoteWebdriver для подключения к удаленным концентраторам.
Если в течение некоторого времени нет активности, сессия будет автоматически закрыта.
Вот журнал в контейнере selenium/standalone-chrome-debug:3.141.59-mercury :
Поэтому я предполагаю, что драйвер Chrome автоматически закроет сеанс бездействия через 30 минут. Я хочу знать, как я могу отключить автоматическое закрытие без активности?
В этой статье мы расскажем о хитростях и советах по Python, которые должны быть известны разработчику Python.
В одном из недавних постов я рассказал о том, как я использую навыки количественных исследований, которые я совершенствую в рамках программы TPQ.
Вы когда-нибудь хотели поделиться с кем-то файлом, но он содержал конфиденциальную информацию? Многие думают, что электронная почта безопасна, но это.
Недавно я столкнулся с интересной бизнес-задачей - визуализацией сбоев в цепочке поставок лекарств, которую могут просматривать врачи и.
Ответы 1
Я нашел подсказку от код здесь
-sessionTimeout
Specifies the timeout before the server automatically kills a session that hasn't had any activity in the last X seconds. The test slot will then be released for another test to use. This is typically used to take care of client crashes. For grid hub/node roles, cleanUpCycle must also be set. If a node does not specify it, the hub value will be used.
Тайм-аут действительно 1800 с, это то же самое, что ожидалось в журнале.
А потом нашел еще вопрос по этому поводу.
Я не знаком с java. Я использовал selenium/standalone-chrome-debug:3.141.59-mercury образ докера для запуска хромдрайвера. Поэтому, если вы также используете докер, вы можете установить env при запуске докера.
Это мой файл для создания докеров:
Это около одного года перерыва.
Если вариант detach бесполезен для вашей проблемы, имеет ли смысл публиковать этот ответ?
Возможно, опция detach поможет решить чью-то проблему. Ведь каждая проблемная ситуация индивидуальна, и я показываю лог решения проблемы, чтобы другим не нужно было пробовать.
Нет, для варианта detach есть более канонические ответы, но, грубо говоря, этот ответ не имеет отношения к варианту detach .
Хорошо, я снова отредактирую ответ (удалить описание об отсоединении). Я нашел другой способ решить проблему.
Читайте также: