Один сеанс на вкладку с Selenium Web-драйвером? - PullRequest
4 голосов
/ 01 августа 2020

Я хотел бы создать новый сеанс для каждой открываемой вкладки, а затем управлять сеансами индивидуально с помощью Selenium python. Возможно ли это?

Ответы [ 2 ]

1 голос
/ 21 августа 2020

@ reynoldsnp: Firefox имеет официальный аддон, который делает это, но я не уверен, можно ли заставить селен взаимодействовать с аддоном. addons.mozilla.org/en-GB/firefox/addon/multi-account-containers Если вы выясните, как это сделать, я хотел бы знать, как это сделать.

(Я не могу комментарий пока что из-за моей оценки репутации, поэтому цитирую комментарий).

Я не знаю, как на самом деле взаимодействовать с расширением, но если у вас есть известный набор сайтов, которые вы хотели бы открыть:

Попробуйте следующее:

  1. Создайте профиль firefox для использования с селеном. Несколько профилей

    Windows 8 / 8.1 / 10: нажмите Win + R на клавиатуре. Введите firefox --new-instance --ProfileManager

  2. Откройте Firefox в этом профиле, выбрав новый профиль в мастере настройки. Установите расширение в этот профиль.

selecting profile top open firefox with

  1. Настройте контейнеры, которые вы хотите в расширении, чтобы по умолчанию открываться с указанием c site.

BY default open up sites with a container default opening sites Ensure that the checkbox is ticked.

  1. Запустите селен с этим профилем следующим образом:
from selenium import webdriver

profile = webdriver.FirefoxProfile('path/to/your/profile') # on windows found here: %APPDATA%/Mozilla/Firefox/Profiles

driver = webdriver.Firefox(firefox_profile=profile) 
Перемещайтесь между вкладками, эффективно контейнерами, используя selenuium.
0 голосов
/ 26 августа 2020

Во-первых, нет, нельзя. Хотя вкладки работают как процесс, они привязаны к идентификатору сеанса, который изначально открывает браузер. Вот как работает протокол https://www.w3.org/TR/webdriver/#new -session

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

driver.window_handles

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

driver.switch_to_window("any open tab taken from windows handles list")
driver.do_something

driver.switch_to_window("any other tab from windows handles list")
driver.do_something_else_on_other_tab

# or (this option can let you run in parallel)
driver a = ChromeDriver()
driver b = ChromeDriver()

a.do_something
b.do_something

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

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

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