Возможно ли через Selenium+Python открыть ссылку в новой вкладке в цикле?
Всем привет. Недавно начал учить python и selenium и вот стала такая задача. С помощью selenium я захожу в админку своего сайта на WP и с помощью beautifulsoup создаю список ссылок всех записей. в Цикле я захожу на каждую запись и нажимаю кнопку Опубликовать.
max_page = 5 for x in range(1, max_page + 1): driver.get(BASE_URL + '?paged=' + str(x)) html = driver.page_source soup = bs(html) list = [] ind = -1 links = soup.find_all('a', ) len_anc = len(links) print(len_anc) for element in links: link = element.get('href') print(link) list.append(link) for one_link in list: ind += 1 print(one_link) print('Парсинг %d%% (%d/%d)' % (ind / (len_anc * max_page)*100, ind, (len_anc * max_page))) driver.get(one_link) driver.find_element_by_id("publish").click() time.sleep(3) # Ждет загрузки браузера
Все работает. Но как сделать что бы в цикле на каждой итерации открывалась новая вкладка и сохранялась страница и потом закрывалась? Все это для того что бы ускорить процесс обновления всех (2000) записей.
- Вопрос задан более трёх лет назад
- 3588 просмотров
Как в Selenium открыть в новой вкладке ссылку, доступную по событию javascripta?

Здравствуйте. Подскажите, как с помощью Selenium открыть в новой вкладке страницу, переход на которую осуществляется с помощью javascripta по событию нажатия на элемент?
Задача в целом — для каждого элемента из некоторого набора на текущей странице сравнить некоторые параметры с параметрами, доступными при нажатии на соответствующий элемент из набора и переходе на новую страницу.
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

[Selenium] Как открыть ссылку в новой вкладке?
Нужна помощь по селениуму. Прожка открывает сайтец в хроме и находит ссылки и кликает по ним по.
Selenium. Как открыть ссылку на новой вкладке браузера и перейти на эту вкладку?
Код открывает ссылку на новой вкладке Привожу фрагмент кода et =.
Как открыть ссылку в новой вкладке (dcef3)?
Пишу браузер на dcef3. Работает вроде неплохо. Но есть и одна проблема. Как принудительно открыть.
Как можно открыть ссылку в новой вкладке Webbrowser?
Привет всем! Вопрос — как можно открыть ссылку в новой вкладке. Есть Webbrowser.
Автоматизируй это!
![]()
7102 / 4606 / 1214
Регистрация: 30.03.2015
Сообщений: 13,216
Записей в блоге: 29
Dancing_god, не понял. Просто клик по элементу разве это и не сделает?
Добавлено через 2 минуты
если сама верстка или атрибуты не содержат ссылку куда идет переход, то можно попробовать кликать с «нажатым» контролом, типа заставляя открыть в новой вкладке. Но если элементов много открывать их все в новых вкладках долго, я бы сначала посмотрел нельзя ли прямо на странице все получить что нужно.
Регистрация: 18.09.2015
Сообщений: 227
Сообщение от Welemir1 
Просто клик по элементу разве это и не сделает?
Он откроет ссылку в текущей вкладке. В javascript просто меняется:
window.location.href = dialog_url;
при нажатии на элемент.
Конкретнее, у меня есть список диалогов пользователя. Когда пользователь нажимает на элемент, он переходит к странице диалога с соответствующим пользователем. Блоки (div) диалогов содержат ссылки на профиль собеседника. Такие же ссылки есть на страницах соответствующих диалогов. Надо сравнить для каждого диалога, что он ведет к диалогу именно с тем собеседником, ссылка на которого содержится в div данного диалога на странице всех диалогов пользователя.
Добавлено через 1 минуту
Сообщение от Welemir1 
можно попробовать кликать с «нажатым» контролом
Это через ActionChains надо делать?
Добавлено через 3 минуты
Сообщение от Welemir1 
элементов много
Это делается в целях тестирования, поэтому данных не много будет.
Автоматизируй это!
![]()
7102 / 4606 / 1214
Регистрация: 30.03.2015
Сообщений: 13,216
Записей в блоге: 29
Сообщение от Dancing_god 
Это через ActionChains надо делать?
да, эмулировать Ctrl+клик
Добавлено через 38 секунд
но опять же у меня нет перед глазами самого приложения и задачи, может это и проще решается
Регистрация: 18.09.2015
Сообщений: 227
Сообщение от Welemir1 
эмулировать Ctrl+клик
Такая комбинация большинством браузеров поддерживается? Когда в firefox делаю так вручную на нужном элементе, не работает. Открывает в той же вкладке.
Просто может быть проблема также в том, что я меняю в javascripte url для текущей вкладки.
Автоматизируй это!
![]()
7102 / 4606 / 1214
Регистрация: 30.03.2015
Сообщений: 13,216
Записей в блоге: 29
Dancing_god, а вот это не знаю, надо покопать, думал что у всех.
![]()
5417 / 3841 / 1214
Регистрация: 28.10.2013
Сообщений: 9,554
Записей в блоге: 1
driver.execute_script('здесь придумай javascript который сделает то что тебе нужно')
примеры javascript :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
driver.execute_script("window.open('yandex.ru', 'tab2');") driver.execute_script("arguments[0].innerHTML=arguments[1];", elem,'новый текст этого div') driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") driver.execute_script("document.getElementById('g-recaptcha-response').style.removeProperty('display');") script =''' function new_tab(a, url) document.body.appendChild(a); a.setAttribute('href', url); a.dispatchEvent( (function(e) e.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, true, false, false, false, 0, null); return e; >(document.createEvent('MouseEvents')) ) ); > new_tab(document.createElement('a'), arguments[0]); ''' url = 'http://ya.ru' driver.execute_script(script,url)
Возможно ли в Selenium открывать новую вкладку/окно?
Здравствуйте, работаю над парсером одного сайта, и по воле его создателей, моему парсеру нужно перенести информацию с одной страницы, на другую с минимальными потерями во времени, из-за чего вариант get() не подходит ибо он в той же вкладке переходит по новой ссылке. Моя цель пока парсер не начал работу, открыть сразу две вкладки/окна, и уже при работе между ними переключаться.
- Вопрос задан более трёх лет назад
- 11723 просмотра
Комментировать
Решения вопроса 1

Самый простой вариант — создать новый инстанс браузера.
Другой вариант — выполнить
driver.execute_script("window.open('https://google.com')")
Сейчас натолкнулся ещё на такой вариант с использованием send_keys(Keys.CONTROL + ‘t’)
from selenium import webdriver from selenium.webdriver.common.keys import Keys driver = webdriver.Firefox() driver.get("http://stackoverflow.com/") body = driver.find_element_by_tag_name("body") body.send_keys(Keys.CONTROL + 't') driver.close()
Ответ написан более трёх лет назад
Selenium: как открывать новую вкладку (а не браузер)?
Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нем неправильно.
Необходимо обновить браузер или попробовать использовать другой.
ratata
Новичок
Пользователь
Дек 29, 2021 37 1 8
Я через selenium захожу в твитер, мне нужно подписаться на канал и потом сделать несколько твитов и ретвитов по новым url ссылкам.
Я сделал так (код), но при открытии новой ссылки из аккаунта выходит и приходится заходить заново. Как сделать так, чтобы открывался не новый браузер, а новые вкладки, чтобы я авторизовался один раз и все остальное делал уже без повторной авторизации?
driver = webdriver.Chrome(CHROMEDRIVERPATH, seleniumwire_options = proxy) driver.get(https://twitter.com/login) driver.implicitly_wait(5) time.sleep(5) def login(): # АВТОРИЗАЦИЯ user = driver.find_element(By.XPATH, '//*[@autocomplete="username"]') user.send_keys(userUsername) bottom = driver.find_element(By.XPATH, '//*[@class="css-18t94o4 css-1dbjc4n r-sdzlij r-1phboty r-rs99b7 r-ywje51 r-usiww2 r-2yi16 r-1qi8awa r-1ny4l3l r-ymttw5 r-o7ynqc r-6416eg r-lrvibr r-13qz1uu"]/div') bottom.click() password = driver.find_element(By.XPATH, '//*[@autocomplete="current-password"]') password.send_keys(userPassword) password.send_keys(Keys.ENTER) def send_tweet(): # ВСТАВЛЯЕМ ТЕКСТ И ДЕЛАЕМ ТВИТ driver.get(tweet) driver.implicitly_wait(5) tweet = driver.find_element_by_css_selector("br[data-text='true']") tweet.send_keys(tweet_text) time.sleep(2) button = driver.find_element(By.XPATH, '//*[@class="css-18t94o4 css-1dbjc4n r-l5o3uw r-42olwf r-sdzlij r-1phboty r-rs99b7 r-19u6a5r r-2yi16 r-1qi8awa r-1ny4l3l r-ymttw5 r-o7ynqc r-6416eg r-lrvibr"]') button.click() login() send_tweet()