Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/crocofactory/croco-selenium
The package providing ways to interact with Selenium Web Driver actions, such as clicking, sending keys etc.
https://github.com/crocofactory/croco-selenium
degen selenium web3
Last synced: 2 months ago
JSON representation
The package providing ways to interact with Selenium Web Driver actions, such as clicking, sending keys etc.
- Host: GitHub
- URL: https://github.com/crocofactory/croco-selenium
- Owner: CrocoFactory
- License: mit
- Created: 2023-11-12T10:33:59.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2024-09-23T16:32:08.000Z (5 months ago)
- Last Synced: 2024-11-06T00:29:58.901Z (3 months ago)
- Topics: degen, selenium, web3
- Language: Python
- Homepage: https://pypi.org/project/croco-selenium/
- Size: 43 KB
- Stars: 4
- Watchers: 1
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# croco-selenium
[![PyPi Version](https://img.shields.io/pypi/v/croco-selenium)](https://pypi.org/project/croco-selenium/)
[![PyPI Downloads](https://img.shields.io/pypi/dm/croco-selenium?label=downloads)](https://pypi.org/project/croco-selenium/)
[![License](https://img.shields.io/github/license/CrocoFactory/croco-selenium.svg)](https://pypi.org/project/croco-selenium/)
[![Last Commit](https://img.shields.io/github/last-commit/CrocoFactory/croco-selenium.svg)](https://pypi.org/project/croco-selenium/)
[![Development Status](https://img.shields.io/pypi/status/croco-selenium)](https://pypi.org/project/croco-selenium/)The package providing ways to interact with Selenium Web Driver actions, such as clicking, sending keys etc.
- **[Bug reports](https://github.com/CrocoFactory/croco-selenium/issues)**
- **[Actions Overview](#actions-overview)**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](LICENSE)
The project is made by the **[Croco Factory](https://github.com/CrocoFactory)** team
# Quick Start
You can use actions, by the following way.```python
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
```python
from selenium.webdriver.chrome.webdriver import WebDriver
from croco_selenium import ActionPerformer
driver = WebDriver()
action_performer = ActionPerformer(driver)
timeout = 10action_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```python
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]')
```# Actions Overview
You can perform the following [actions](#actions), using croco-selenium:- **[add_cookies](#add_cookies)**
- **[click](#click)**
- **[close_tabs](#close_tabs)**
- **[get_element](#get_element)**
- **[get_elements](#get_elements)**
- **[get_element_attribute](#get_element_attribute)**
- **[get_element_text](#get_element_text)**
- **[send_keys](#send_keys)**
- **[silent_send_keys](#silent_send_keys)**
- **[switch_to_another_window](#switch_to_another_window)**
- **[switch_to_frame](#switch_to_frame)**
- **[switch_to_parent_frame](#switch_to_parent_frame)**
- **[wait_for_invisibility](#wait_for_invisibility)**
- **[wait_for_windows](#wait_for_windows)**And there are 3 useful [decorators](#decorators):
- **[handle_pop_up](#handle_pop_up)**
- **[handle_in_new_tab](#handle_in_new_tab)**
- **[handle_new_tab](#handle_new_tab)**
## Actionsadd_cookies
Adds cookies to a current page. It takes valid string containing json, list of cookies or one cookie as dictionary.```python
from croco_selenium import ChromeDrivertimeout = 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)
```click
Clicks on element in browser```python
from croco_selenium import ChromeDrivertimeout = 10
driver = ChromeDriver()
driver.click(timeout, '//input[@type="submit"]')
```close_tabs
Closes all tabs in browser. It's convenient to use, when you add extensions to your browser and their windows occur with
starting a driver.```python
import os
from croco_selenium import ChromeDriverproject_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]')
```get_element
Returns an element in browser```python
from croco_selenium import ChromeDrivertimeout = 10
driver = ChromeDriver()element = driver.get_element(timeout, '//input[@type="submit"]')
element.click()
```get_elements
Returns an elements in browser```python
from croco_selenium import ChromeDrivertimeout = 10
driver = ChromeDriver()elements = driver.get_elements(timeout, '//input')
for element in elements:
element.click()
```get_element_attribute
Returns an element's attribute in browser```python
from croco_selenium import ChromeDrivertimeout = 10
driver = ChromeDriver()assert driver.get_element_attribute(timeout, '//input[@type="checkbox"]', 'checked')
```get_element_text
Returns element's text in browser```python
from croco_selenium import ChromeDrivertimeout = 10
driver = ChromeDriver()print(driver.get_element_text(timeout, '//h1'))
```send_keys
Sends keys in browser```python
from croco_selenium import ChromeDrivertimeout = 10
driver = ChromeDriver()driver.send_keys(timeout, '//input[@type="password"]', 'password')
driver.click(timeout, '//input[@type="submit"]')
```silent_send_keys
Sends keys with delay between characters in browser. It's convenient to use when you would like to hide your bot activity```python
from croco_selenium import ChromeDrivertimeout = 10
driver = ChromeDriver()driver.silent_send_keys(timeout, '//input[@type="password"]', 'password')
driver.click(timeout, '//input[@type="submit"]')
```switch_to_another_window
Switches to a different window from current window in browser. It's convenient to use, when you have two windows to be handled```python
from croco_selenium import ChromeDrivertimeout = 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)
```switch_to_frame
Switches to the frame```python
from croco_selenium import ChromeDrivertimeout = 10
driver = ChromeDriver()driver.switch_to_frame(timeout, '//iframe[@data-hcaptcha-widget-id]')
driver.click(timeout, '//input[@type="submit"]')
```switch_to_parent_frame
Switches to the parent frame```python
from croco_selenium import ChromeDrivertimeout = 10
driver = ChromeDriver()driver.switch_to_frame(timeout, '//iframe[@data-hcaptcha-widget-id]')
driver.click(timeout, '//input[@type="submit"]')
driver.switch_to_parent_frame()
```wait_for_invisibility
Wait for element's invisibility in browser```python
from croco_selenium import ChromeDrivertimeout = 10
driver = ChromeDriver()driver.click(timeout, '//button')
driver.wait_for_invisibility(timeout, '//*[@id="popup"]')
```
wait_for_windows
Wait for occurring of number of windows```python
from croco_selenium import ChromeDrivertimeout = 10
driver = ChromeDriver()driver.wait_for_windows(timeout, 2)
```## Decorators
handle_pop_up
Switches to another window, performs decorated function and switches back. Pop up has to be closed after performing
decorated function.This decorator is usually used for browser extensions' pop-ups. Example of function performing
a third-party Metamask connection:```python
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:
passfor _ in range(3):
next_xpath = '//button[@data-testid="page-container-footer-next"]'
driver.click(10, next_xpath, ignored_exceptions=TimeoutException)
```handle_in_new_tab
Opens new tab, performs decorated function, closes new tab and switches back. Here is example of function performing
getting of 2FA code from browser extension.```python
from croco_selenium import ChromeDriver, handle_in_new_tab@handle_in_new_tab()
def get_code(driver: ChromeDriver, account) -> str:
timeout = 15driver.get('')
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
```handle_new_tab
Performs decorated function in new tab and switches back. New tab has to be opened during performing decorated function.# Installing croco-selenium
To install the package from PyPi you can use:
```sh
pip install croco-selenium
```
To install the package from GitHub you can use:```sh
pip install git+https://github.com/CrocoFactory/croco-selenium.git
```