The package providing ways to interact with Selenium Web Driver actions, such as clicking, sending keys etc.
When we use Selenium, it's not convenient to use WebDriverWait with its cluttered chain actions. Instead of many imports and instances (By, WebDriverWait, expected_conditions) you can use fast and robust actions.
Package's source code is made available under the MIT License
The project is made by the Croco Factory team
You can use actions, by the following way.
from selenium.webdriver.chrome.webdriver import WebDriver
from croco_selenium import click
driver = WebDriver()
click(driver, 10, '//input[@type="submit"]')
If you don't want to pass driver every using of actions, you can create an instance of ActionPerformer
from selenium.webdriver.chrome.webdriver import WebDriver
from croco_selenium import ActionPerformer
driver = WebDriver()
action_performer = ActionPerformer(driver)
timeout = 10
action_performer.send_keys(timeout, '//input[@type="password"]', 'password')
action_performer.click(timeout, '//input[@type="submit"]')
One of the best ways to use actions is create an instance of ChromeDriver and perform actions by calling methods on it. That class derived from ActionPerformer and ChromiumDriver
import os
from croco_selenium import ChromeDriver, Proxy
proxy = Proxy(host='123.89.46.72', port=8000, username='croco', password='webDriver')
project_dir = os.path.dirname(os.path.abspath(__file__))
extension_paths = [os.path.join(project_dir, 'extensions/metamask.crx')]
driver = ChromeDriver(proxy=proxy, extension_paths=extension_paths)
driver.get('https://facebook.com')
driver.send_keys(15, '//input[@id="email"]', '[email protected]')
You can perform the following actions, using croco-selenium:
- add_cookies
- click
- close_tabs
- get_element
- get_elements
- get_element_attribute
- get_element_text
- send_keys
- silent_send_keys
- switch_to_another_window
- switch_to_frame
- switch_to_parent_frame
- wait_for_invisibility
- wait_for_windows
And there are 3 useful decorators:
Adds cookies to a current page. It takes valid string containing json, list of cookies or one cookie as dictionary.from croco_selenium import ChromeDriver
timeout = 10
driver = ChromeDriver()
cookies = '{"domain":".facebook.com","expirationDate":1689249734,"httpOnly":true,"name":"c_user","path":"/","secure":true,"value":"100083466604886"}'
driver.get('facebook.com')
driver.add_cookies(cookies)
from croco_selenium import ChromeDriver
timeout = 10
driver = ChromeDriver()
driver.click(timeout, '//input[@type="submit"]')
import os
from croco_selenium import ChromeDriver
project_dir = os.path.dirname(os.path.abspath(__file__))
extension_paths = [os.path.join(project_dir, 'extensions/metamask.crx')]
driver = ChromeDriver(extension_paths=extension_paths)
driver.close_tabs()
driver.get('https://facebook.com')
driver.send_keys(15, '//input[@id="email"]', '[email protected]')
from croco_selenium import ChromeDriver
timeout = 10
driver = ChromeDriver()
element = driver.get_element(timeout, '//input[@type="submit"]')
element.click()
from croco_selenium import ChromeDriver
timeout = 10
driver = ChromeDriver()
elements = driver.get_elements(timeout, '//input')
for element in elements:
element.click()
from croco_selenium import ChromeDriver
timeout = 10
driver = ChromeDriver()
assert driver.get_element_attribute(timeout, '//input[@type="checkbox"]', 'checked')
from croco_selenium import ChromeDriver
timeout = 10
driver = ChromeDriver()
print(driver.get_element_text(timeout, '//h1'))
from croco_selenium import ChromeDriver
timeout = 10
driver = ChromeDriver()
driver.send_keys(timeout, '//input[@type="password"]', 'password')
driver.click(timeout, '//input[@type="submit"]')
from croco_selenium import ChromeDriver
timeout = 10
driver = ChromeDriver()
driver.silent_send_keys(timeout, '//input[@type="password"]', 'password')
driver.click(timeout, '//input[@type="submit"]')
from croco_selenium import ChromeDriver
timeout = 10
driver = ChromeDriver()
driver.silent_send_keys(timeout, '//input[@type="password"]', 'password')
driver.click(timeout, '//input[@type="submit"]')
driver.switch_to_another_window(timeout)
driver.click(timeout, '//input[@type="submit"]')
driver.switch_to_another_window(timeout)
from croco_selenium import ChromeDriver
timeout = 10
driver = ChromeDriver()
driver.switch_to_frame(timeout, '//iframe[@data-hcaptcha-widget-id]')
driver.click(timeout, '//input[@type="submit"]')
from croco_selenium import ChromeDriver
timeout = 10
driver = ChromeDriver()
driver.switch_to_frame(timeout, '//iframe[@data-hcaptcha-widget-id]')
driver.click(timeout, '//input[@type="submit"]')
driver.switch_to_parent_frame()
from croco_selenium import ChromeDriver
timeout = 10
driver = ChromeDriver()
driver.click(timeout, '//button')
driver.wait_for_invisibility(timeout, '//*[@id="popup"]')
from croco_selenium import ChromeDriver
timeout = 10
driver = ChromeDriver()
driver.wait_for_windows(timeout, 2)
This decorator is usually used for browser extensions' pop-ups. Example of function performing a third-party Metamask connection:
from croco_selenium import ChromeDriver, handle_pop_up
from selenium.common import TimeoutException
@handle_pop_up()
def connect(driver: ChromeDriver, password: str) -> None:
try:
password_xpath = '//*[@id="password"]'
driver.send_keys(7, password_xpath, password)
unlock_xpath = '//button[@data-testid="unlock-submit"]'
driver.click(5, unlock_xpath)
except TimeoutException:
pass
for _ in range(3):
next_xpath = '//button[@data-testid="page-container-footer-next"]'
driver.click(10, next_xpath, ignored_exceptions=TimeoutException)
from croco_selenium import ChromeDriver, handle_in_new_tab
@handle_in_new_tab()
def get_code(driver: ChromeDriver, account) -> str:
timeout = 15
driver.get('<EXTENSION_URL>')
code_field_xpath = '//*[contains(@class, "code")]'
code_fields = driver.get_elements(timeout, code_field_xpath)
code_field = code_fields[account.id]
code = code_field.text
return code
To install the package from PyPi you can use:
pip install croco-selenium
To install the package from GitHub you can use:
pip install git+https://github.com/CrocoFactory/croco-selenium.git