- How to perform right click using Selenium ChromeDriver?
- 4 Answers 4
- How to perform right click on an element in Selenium with python?
- Syntax
- Syntax
- Example
- How to right click and hold it in selenium python
- 1 Answer 1
- Автоматизация браузера с помощью Python и Selenium — 14: Действия с мышью
- Клики
- Наведите курсор мыши
- Перетаскивания
- То, что нужно запомнить
- использованная литература
How to perform right click using Selenium ChromeDriver?
I have been searching for this a lot, but could not find an answer for Python. Is it possible to simulate right click, or open up the context menu via selenium/chromedriver? I have seen options for Java, and some other languages, but never in Python. What would I have to do to simulate a right click on a link, or a picture?
4 Answers 4
It’s called context_click in selenium.webdriver.common.action_chains. Note that Selenium can’t do anything about browser level context menu, so I assume your link will pop up HTML context menu.
from selenium import webdriver from selenium.webdriver import ActionChains driver = webdriver.Chrome() actionChains = ActionChains(driver) actionChains.context_click(your_link).perform()
Thanks for the reply. Do you know about anything that would enable me to open up the browser context menu (With the View Source, Inspect element, etc)? I have a extension, in which I need to mark the captcha and input for the solution (Plugin is named SkipInput, or Rumola). Do you know about how I can get this working?
actionChains.context_click().perform() should do. But you can’t do anything about menu in the end, this is out of the scope of Selenium.
Now you can use pynput to press the up , down and enter keys to select the menu options, even if they are out of scope of Selenium.
To move through the context menu we have to use pyautogui along with selenium. The reason for using pyautogui is that we need to have control of the mouse for controlling the options on the context menu. To demonstrate this, I am going to use a python code to automatically open a google image of Avengers Endgame in new tab.
import time from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver import ActionChains import pyautogui URL = 'https://www.google.com/' PATH = r'C:\Program Files (x86)\chromedriver.exe' driver = webdriver.Chrome(PATH) action = ActionChains(driver) driver.get(URL) search = driver.find_element_by_name('q') search.send_keys('Avengers Endgame') search.send_keys(Keys.RETURN) image_tab = driver.find_element_by_xpath('//a[text()="Images"]') image_tab.click() required_image = driver.find_element_by_xpath('//a[@class="wXeWr islib nfEiy mM5pbd"]') action.context_click(required_image).perform() pyautogui.moveTo(120, 130, duration=1) pyautogui.leftClick() time.sleep(1) pyautogui.moveTo(300,40) pyautogui.leftClick()
Now in the above code, the part till pyautogui.moveTo(120, 130, duration=1) is selenium based. Your answer begins from pyautogui.moveTo(120, 130, duration=1) and what this does is simply moves the mouse button to the open image in new tab option of the context menu(Please note that the screen coordinates may vary based on your screen size). The next line clicks the option(using action.click().perform() won’t work as expected).
The next two lines helps in navigating to the tab after it opens. Hope the code helps!
How to perform right click on an element in Selenium with python?
We can perform right click on an element in Selenium with the help of Action Chains class. These classes are generally used for automating interactions like context menu click, mouse button actions, key press and mouse movements.
These types of actions are mainly common in complex scenarios like drag and drop and hovering over an element on the page. The methods of the Action Chains class are utilized by advanced scripts. We can manipulate DOM with the help of Action Chains in Selenium.
The action chain object implements the ActionChains in the form of a queue and then executes the perform() method. On calling the method perform(), all the actions on action chains will be performed.
The method of creating an Action Chain object is listed below −
- First we need to import the Action Chain class and then the driver will be passed as an argument to it.
- Now all the operations of action chains can be done with the help of this object.
Syntax
Syntax for creating an object of Action Chains −
from selenium import webdriver
# import Action chains from selenium.webdriver import ActionChains # create webdriver object driver = webdriver.Firefox() # create action chain object action = ActionChains(driver)
After creating an object of Action Chains, we can perform numerous operations one by one like a chain which is queued.
context_click() − This method performs right click operation on an element of the page.
Syntax
Where args is the element which has to be right clicked. If omitted, the click on the present mouse position is performed.
#element source = driver.find_element_by_id("name") #action chain object action = ActionChains(driver) # right click operation action.context_click(source)
Example
Code Implementation for right click operation.
from selenium import webdriver from selenium.webdriver import ActionChains from selenium.webdriver.common.keys import Keys #browser exposes an executable file #Through Selenium test we will invoke the executable file which will then #invoke actual browser driver = webdriver.Chrome(executable_path="C:\chromedriver.exe") # to maximize the browser window driver.maximize_window() #get method to launch the URL driver.get("https://www.tutorialspoint.com/about/about_careers.htm") #to refresh the browser driver.refresh() # identifying the source element source= driver.find_element_by_xpath("//*[text()='Company']"); # action chain object creation action = ActionChains(driver) # right click operation and then perform action.context_click(source).perform() #to close the browser driver.close()
How to right click and hold it in selenium python
I’m looking to automate my web browser to rotate a map created using mapbox, however this can only be done by holding the right mouse down and panning around. I know there is a click and hold option for the left click, but is there anything similar for right click? At present I can only do a single right click using context click
You can use TouchActions like touchAc = TouchActions(driver) touchAc.tap_and_hold(100, 700).scroll(100, 800).perform()
actions = ActionChains(driver) actions.context_click(element).perform() You can right click using this.
1 Answer 1
Unfortunately, this is not supported, but you can modify the source code of selenium in your site-packages directory, it’s pretty straightforward since all you have to do is change the parameter for the pointer event in the click_and_hold method, to the same parameter as the pointer event in the context_click method, and then create a custom function for that.
Here’s what I managed to do:
File 1: Locate and edit this file in
Lib/site-packages/selenium/webdriver/common/actions/pointer_actions.py
Add this function to the «PointerActions» class:
class PointerActions(Interaction): def move_to_location(self, x, y): . def click(self, element=None): . def context_click(self, element=None): . # --- Add this function def context_click_and_hold(self, element=None): if element: self.move_to(element) self.pointer_down(MouseButton.RIGHT) return self # --- def click_and_hold(self, element=None): . def release(self): . def double_click(self, element=None): .
File 2: Locate and edit this file in
Lib/site-packages/selenium/webdriver/common/action_chains.py
Add this function to the «ActionChains» class:
class ActionChains(object): def __init__(self, driver, duration=250): . def click(self, on_element=None): . # --- Add this function def context_click_and_hold(self, on_element=None): if on_element: self.move_to_element(on_element) self.w3c_actions.pointer_action.context_click_and_hold() self.w3c_actions.key_action.pause() return self # --- def click_and_hold(self, on_element=None): . def context_click(self, on_element=None): .
If the .release() function is not able to release the right mouse button after holding, you should add a parameter to the .release() function by making these changes:
class PointerActions(Interaction): def click_and_hold(self): . def release(self, button="left"): button = MouseButton.LEFT if button == "left" else MouseButton.RIGHT self.pointer_up(button) return self def double_click(self): .
class ActionChains(object): def pause(self): . def release(self, button="left", on_element=None): """ Releasing a held mouse button on an element. :Args: - on_element: The element to mouse up. If None, releases on current mouse position. """ if on_element: self.move_to_element(on_element) self.w3c_actions.pointer_action.release(button) self.w3c_actions.key_action.pause() return self def send_keys(self): .
Автоматизация браузера с помощью Python и Selenium — 14: Действия с мышью
В предыдущем посте мы рассмотрели работу с элементами select. В этом посте мы рассмотрим управление действиями мыши.
Мы кратко рассмотрели некоторые действия мыши в посте Клавиатура и цепочки действий. Мы также будем использовать цепочки действий в примерах в этом посте.
Selenium позволяет нам эмулировать все виды действий мыши, такие как двойной щелчок, щелчок правой кнопкой мыши, наведение курсора мыши, перетаскивание и т. д. Эти действия выполняются с помощью класса ActionChains.
Каждое действие, вызываемое над объектом ActionChains , сохраняется в очереди и выполняется в порядке вызова perform . Давайте посмотрим на эти действия.
Если элемент не передается в качестве параметра, все приведенные ниже методы выполняют действие для текущей позиции указателя мыши.
Клики
- click :Этот метод на самом деле очень знаком из предыдущих постов. Он выполняет щелчок левой кнопкой мыши по элементу.
- click_and_hold : этот метод выполняет щелчок левой кнопкой мыши и удерживает ее, не отпуская.
- double_click : этот метод выполняет двойной щелчок по элементу.
- context_click : этот метод выполняет щелчок правой кнопкой мыши.
Следующий пример открывает официальный сайт Python и выполняет щелчок правой кнопкой мыши в строке поиска.
Наведите курсор мыши
move_to_element
Этот метод действия перемещает мышь в середину элемента. Если элемент не находится в текущем видимом представлении, страница прокручивается.
В следующем примере открывается официальный веб-сайт Python и наводится указатель мыши на меню Загрузки.
move_to_element_with_offset
Этот метод действия перемещает мышь относительно верхнего левого угла указанного элемента.
move_by_offset
Этот метод действия перемещает мышь из ее текущей позиции на заданные смещения x и y.
В следующем примере сначала выполняется переход в меню Загрузки, ожидание в течение 2 секунд и перемещение вниз на смещение по оси y на 80 пикселей.
Перетаскивания
drag_and_drop
Этот метод перетаскивает исходный элемент на место целевого элемента. Он состоит из трех шагов:
- Нажмите и удерживайте левую кнопку мыши на исходном элементе.
- Переместите мышь в место расположения целевого элемента.
- Отпустите мышь.
Поскольку пример находится в элементе фрейма, мы должны сначала переключиться на него. Затем исходные и целевые элементы с перетаскиваемыми и удаляемыми идентификаторами находятся и передаются в качестве аргументов методу drag_and_drop .
drag_and_drop_by_offset
Этот метод сначала щелкает и удерживает исходный элемент, затем перемещается на заданные смещения x и y относительно текущей позиции мыши и, наконец, отпускает кнопку мыши.
То, что нужно запомнить
- Selenium позволяет нам эмулировать все виды действий мыши, такие как двойной щелчок, щелчок правой кнопкой мыши, наведение мыши, перетаскивание и т. д.
- Эти действия выполняются с помощью класса ActionChains . Каждое действие, вызываемое над объектом ActionChains , сохраняется в очереди и выполняется в порядке вызова perform .
- Методы для различных типов кликов: click , click_and_hold , double_click и context_click .
- Методы move_to_element , move_to_element_with_offset и move_by_offset используются для наведения курсора на элемент.
- Действия перетаскивания выполняются методами drag_and_drop , drag_and_drop_by_offset .
В следующем посте мы рассмотрим управление окнами и создание скриншотов с помощью Selenium.
Спасибо за уделенное время.