4

Я хочу использовать селен с Python для открытия нескольких вкладок в одном браузере и скремблирования ставок в реальном времени одновременно с несколькими вкладками.selenium window_handles не корректно при открытии нового окна с Python

Домашняя страница веб-сайта генерирует список игр. Однако нет способа получить ссылку на игру, если вы не найдете элемент игры и не используете click() (сайт ajax heavy), которые открывают игру на той же вкладке. Мое решение открыть несколько вкладок - получить список игр, а затем вручную открыть новую вкладку с первой загруженной домашней страницей, а затем щелкнуть по игре с другим индексом в списке. Тем не менее, я считаю, что массив driver.window_handles всегда включает только один элемент, который является текущей вкладкой, а не всеми вкладками, которые я открыл вручную в браузере.

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

Проблема упрощается как код в следующем:

from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 

# create a new Firefox session 


driver_temp = webdriver.Firefox() 
driver_temp.implicitly_wait(30) 
driver_temp.get("https://www.google.com") 
body = driver_temp.find_element_by_tag_name('body') 

# manually open second tab 
body.send_keys(Keys.CONTROL + 't') 
driver_temp.get("https://www.google.com") 
body = driver_temp.find_element_by_tag_name('body') 

# manually open third tab 
body.send_keys(Keys.CONTROL + 't') 
driver_temp.get("https://www.google.com") 
body = driver_temp.find_element_by_tag_name('body') 

#print the number of window_handles 
print len(driver_temp.window_handles) 

Я открыл 3 вкладки, однако LEN (driver_temp.window_handles) всегда равен 1

ответ

4

Селен не обеспечивает API для манипулировать вкладками браузера. Вы, вероятно, заметили, что применяете «взломать» CTRL/COMMAND+T, чтобы открыть новую вкладку.

Смотри на:

Вместо этого открывать новые окна браузера.


Ну, честно говоря, важно отметить, что поведение сильно отличается в Firefox и Chrome - при открытии новых вкладок в Chrome, селен бы увидеть каждую вкладку как окно с его собственной ручкой и вы переключаетесь между ними, используя switch_to.window().

+0

Это не совсем справедливо. То, что «вкладка» и «новое окно» в контексте одного и того же экземпляра браузера, по-видимому, одинаково по виду браузера. У большинства браузеров есть отдельный процесс для каждой вкладки/окна (Chrome, FF). Вот почему Selenium DOES предоставляет API для управления вкладками, но это не вкладки REAL, это просто отдельные дескрипторы окон (https://code.google.com/p/selenium/wiki/JsonWireProtocol#GET_/session/:sessionId/ window_handle) – stanjer

+1

@ Stanjer да, я несколько раз редактировал фразу, пытаясь найти лучшее описание ситуации .. спасибо. – alecxe