Как запускать не сколько браузеров в среднем где-то от 20 -100 браузеров со своим параметрами логин + пароль + прокси.

csharp
proxy
parallel
execution
webdriver
selenium
Теги: #<Tag:0x00007fedbc5e0bf8> #<Tag:0x00007fedbc5e0ab8> #<Tag:0x00007fedbc5e0978> #<Tag:0x00007fedbc5e0838> #<Tag:0x00007fedbc5e06d0> #<Tag:0x00007fedbc5e0590>

(Вершинин Илья Евгеньевич) #1

Я пытаюсь сделать автоматизацию моей работы (бота) С# +Selenium. Как бы саму программу то написал, но столкнулся с тем что мне надо открывать не сколько браузеров в среднем где-то от 20 -100 браузеров со своим параметрами логин + пароль + прокси, да и запускать их опять эти потоки через определённое время и так по циклу пока я сам их не остановлю. Что посоветуете? Сам вот не знаю какой выбрать какой путь выбрать реализации чтобы не лгало и как больше запускалось браузеров.


(ex3me0) #2

Никак. Добавлять оперативки


(Вершинин Илья Евгеньевич) #3

Умник ты не понял вопроса. Я все ровно буду ставить программу на сервер. Просто в интернете много советов и я не знаю в какую сторону рыть или с помощью Многопоточности С# или средствами Selenium grid или другими методом более эффективным сделать запуск нескольких браузеров. А комп мой на изи потянет 20 браузеров не думай, что мой пк дерьмо.


(Vladislav Kulasov) #4

Я бы вам советовал подучиться грамотности и корректности. И каков вопрос, таков и ответ!. Мало ли что там у вас за задача…
Может вам подойдет phantomJS или даже HtmlUnit. Экстрасенсы сейчас в отпуске.


(Fiodar Motin) #5

Может это плохой совет, но все же)) попробуйте посмотреть в сторону запуска не по потокам, а по процессам.
По поводу переменных то я бы подумал насчет какого то CI решения и по расписанию стартовал необходимые задачи + на текущий момент почти все CI решения имею поддержку переменных из кода в которые вы и будете передавать для каждой отдельной задачи необходимые данные.
Самому когда надо что то запустить (чаще из публичного доступа) пользуюсь разными CI решениями travis, dron, circle, shippable. Как показывает практика мне хватает некоторых бесплатных CI для запуска 20-40 конфигурацией с тестами без использования ресурсов моих серверов.
Если надо дополнительно еще что то развернуть, то пользуюсь heroku там по моему можно 5 или 6 тасков деплоить.
В вашем случае если же хорошее железо и вы хотите что бы ваш бот остался приватным, то поставьте себе jenkins и там уже при желании можно что угодно творить пока хватает мощностей))
Еще можете почитать вот тут по поводу докера на C# (сам работаю на java так что если что не ругайте) https://www.distelli.com/docs/tutorials/build-and-deploy-c-sharp-with-docker/


(Вершинин Илья Евгеньевич) #6

Спасибо за помощь буду разбираться. Да если есть ещё информация по теме давайте буду разбираться. А так пока сам не сделаешь с этим не разберёшься.


(Ruslan Semerenko) #7

Из моего опыта, желательно запускать не более 2-х браузеров на одно ядро процессора. В таком режиме вероятность лагов достаточно низка. Поэтому, чтобы запустить большое количество браузеров, все же лучше использовать селениум грид. При этом управляющий скрипт (бот) может быть один и параллелиться с помощью потоков C# - на каждый браузер по потоку. Так как общение с браузером - это в основном IO операции, то таких потоков можно наплодить достаточно много. Управление потоками по времени можно сделать через scheduler (к сожалению не знаком с C# и не подскажу реализацию, может quartz).


(Tatiana) #8

@ordeh Подскажите пожалуйста, как на джаве (докер) это сделать, если ci - bitbucket pipeline (а то я пока расплодила кучу бранчей, чтобы решить этот вопрос)


(Fiodar Motin) #9

Я давно на bit не работал, но он мне еще пол года назад не понравился в плане CI.
Пытался решить ваш вопрос ну и как бы решил его частично, но как оказалось там 50 минут бесплатного деплоя, а потом платно)) по этому как только время кончилось свои попытки улучшить ci я прекратил)

Вот не полное решение (изначально хотел сделать все красиво через docker-compose, но через 1-2 часа понял что просто так это не закончиться)
первая команда качает хаб и запускает
вторая команда соответственно ноду хрома и тоже запускает с привязкой на хаб
и третья команда стартует мавен профиль и testng конфигом

pipelines:
  branches:
    master:
      - step:
          script:
            - docker run -d -p 4444:4444 --name selenium-hub selenium/hub:3.7.1
            - docker run -d --link selenium-hub:hub selenium/node-chrome:3.7.1
            - mvn test -P linux-chrome

options:
  docker: true
  

Вывод:
В любом случае это лучше чем кликать в ручную)) и думаю если все продумать и посидеть над реализацией пару дней то выйдет рабочая система для ваших тестов.
Опять же если у вас все работает черезе бранчи то смысла нету уходить от этого метода т,к он работает и со своей задачей справляется. Я например сам так делаю в одном проекте(6 разных бранчей поднимаю на travisCI и не парюсь).

На днях если будет время еще посижу над вашим вопросом и сделаю что бы это все поднимался все таки через docker-compose с уже установленными X и т.д

Из плюсов:
Плюсов для себя там не нашел(
Из минусов:

  • как оказалось для бесплатной учетки там можно максимум 3 сервиса поднимать в pipline так что это уже очень огромный минус для серьёзных систем с автотестами которые включают в себя целый зоопарк микросервисов, но все решаемо т.к linux.
  • если поднимать очень много контейнеров то pipline просто отваливается по таймауту, но думаю там можно как задать timeout
  • docker-compose не встроен в default images - остальные базовые images которые предоставляет bit тоже не самые актуальные
  • тесты пришлось запускать в headless режиме из за отсутствия X.

(Павел Сенин) #10

Для запуска десятков и сотен одновременных сессий автотестов в браузерах очень хорошо Selenoid подходит. Это замена Selenim Servera, которая сама поднимает нужные готовые контейнеры браузеров и снимает проблему с масштабированием Selenium кластеров.


http://aerokube.com/selenoid/latest/


(Mr Ds Low) #11

А через TestNG с DataProvider вариант?


(Slava Bodya) #12

Как вариант запускать необходимые контейнеры башем при начале сборки и убивать в конце.


(Ivan Pletin) #13

А в чем проблема? Если надо запускать “не сколько”, так ни одного и не запускайте.