Как «открыть в новой вкладке» селен и python? - PullRequest
0 голосов
/ 03 апреля 2020

Я пишу бота с Python / Selenium.

В моем процессе я хочу:

  • , чтобы щелкнуть правой кнопкой мыши на картинке
  • , открыть ее в новой вкладке chrome

Я попробовал следующее:

def OpenInNewTab(self):
        content = self.browser.find_element_by_class_name('ABCD')
        action = ActionChains(self.browser)
        action.move_to_element(content).perform();
        action.context_click().perform()
        action.send_keys(Keys.DOWN).perform()
        action.send_keys(Keys.ENTER).perform()

Однако проблема в том, что мой бот:

  • открывает контекстное меню
  • прокрутите страницу вниз, а не контекстное меню

После многих исследований я попытался:

import win32com.client as comclt       
wsh = comclt.Dispatch("WScript.Shell")
wsh.SendKeys("{DOWN}")
wsh.SendKeys("{ENTER}")

Однако это на самом деле не работает.

Я видел много других тем, таких как эта (предположим, что с пи c связан href)

Тогда я Немного потеряно, чтобы иметь возможность сделать эту простую вещь: щелкнуть правой кнопкой мыши на контекстном элементе и выбрать открыть в новой вкладке. Я открыт для любых советов / новых путей для подражания.

1 Ответ

1 голос
/ 03 апреля 2020

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

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

base_window = driver.current_window_handle  # this goes after you called driver.get(<url here>)

my_element=driver.find_element_by_xpath(...) #or whatever identification method
my_element.send_keys(Keys.CONTROL + Keys.ENTER)

driver.switch_to.window(driver.window_handles[1])  #switch to newly opened tab

driver.switch_to.window(base_window)  # switch back to the initial tab

Альтернативный обходной путь - href s - сначала откройте новую вкладку, затем загрузите полученный href(s). Вот пример:

url='https://www.instagram.com/explore/tags/cars/?hl=en'
driver.get(url)
base_window = driver.current_window_handle

a_tags=driver.find_elements_by_xpath("//div[@class='v1Nh3 kIKUG  _bz0w']//a")
hrefs=[a_tag.get_attribute('href') for a_tag in a_tags] #list of hrefs

driver.execute_script("window.open();")   #open new tab
driver.switch_to.window(driver.window_handles[1]) #switch to new tab
driver.get(hrefs[0])  #get first href for example
driver.close()  #close new tab
driver.switch_to.window(base_window)  #back to initial tab
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...