Как узнать url новых открытых окон selenium-а?
Всем добрый день. Есть скрипт на Python, который переходит на эту страницу https://www.flashscore.ru/ и с помощью Selenium жмет на каждый матч и выводит ссылку от этого матча. Time.sleep для того, чтобы js на странице успевал загрузиться. Проблема в том, что при нажатии на матч, открывается не новая вкладка, а новое окно браузера, selenium этого нового окна не видит, он всё еще на первоначальной странице https://www.flashscore.ru/ и получается что выводится ссылка изначальной страницы сайта, но не от матча. Как можно брать ссылку с каждого матча? С помощью Selenium или без него? Заранее спасибо. Код:
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get('https://www.flashscore.ru/')
time.sleep(13)
for channel in driver.find_elements_by_css_selector(".event__match.event__match--scheduled.event__match--oneLine"):
channel.click()
time.sleep(13)
link = driver.current_url
print(link)
Вывод:
https://www.flashscore.ru/
https://www.flashscore.ru/
https://www.flashscore.ru/
https://www.flashscore.ru/
https://www.flashscore.ru/
...
...
https://www.flashscore.ru/
А должны быть ссылки от каждого матча в том порядке, в каком Selenium нажимает (т.е. по порядку):
https://www.flashscore.ru/match/lUKXoAEo/#match-summary
https://www.flashscore.ru/match/OnDpq8b4/#match-summary
https://www.flashscore.ru/match/llD7mNQ3/#match-summary
...
Ответы (1 шт):
к сожалению, этот метод работает относительно медленно, т.к. каждый раз приходится загружать данные новооткрытого окна.
я попробовал немного сократить временные затраты с помощью driver.set_page_load_timeout(0.5)
Конечно, было бы намного удобнее, если бы можно было бы получить ссылки из html сайта, а не при переходе
import time
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
driver = webdriver.Chrome()
driver.get('https://www.flashscore.ru/')
time.sleep(3)
arr = driver.find_elements_by_css_selector(
".event__match.event__match--scheduled.event__match--oneLine"
)
# optional (if you are not satisfied with the download speed)
driver.set_page_load_timeout(0.5)
for channel in arr:
try:
channel.click()
except TimeoutException:
print("data not received. need more time in driver.set_page_load_timeout")
continue
driver.switch_to.window(driver.window_handles[arr.index(channel)+1])
link = driver.current_url
print(link)
driver.switch_to.window(driver.window_handles[0])