mherrmann / helium
- суббота, 29 февраля 2020 г. в 00:19:34
Python
Selenium-python, 50% easier. Helium is the best Python library for web automation.
Helium is a Python library for automating web browsers. For example:
Under the hood, Helium forwards each call to Selenium. The difference is that Helium's API is much more high-level. In Selenium, you need to use HTML IDs, XPaths and CSS selectors to identify web page elements. Helium on the other hand lets you refer to elements by their user-visible labels. As a result, Helium scripts are 30-50% shorter than similar Selenium scripts. What's more, they are easier to read and more stable with respect to changes in the underlying web page.
Because Helium is simply a wrapper around Selenium, you can freely mix the two libraries. For example:
# A Helium function:
driver = start_chrome()
# A Selenium API:
driver.execute_script("alert('Hi!');")So in other words, you don't lose anything by using Helium over pure Selenium.
In addition to its high-level API, Helium simplifies further tasks that are traditionally painful in Selenium:
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "myDynamicElement"))
)wait_until(Button('Download').exists)To get started with Helium, you need Python 3 and Chrome or Firefox.
If you already know Python, then the following command should be all you need:
pip install heliumOtherwise - Hi! I would recommend you create a virtual environment in the current directory. Any libraries you download (such as Helium) will be placed there. Enter the following into a command prompt:
python3 -m venv venvThis creates a virtual environment in the venv directory. To activate it:
# On Mac/Linux:
source venv/bin/activate
# On Windows:
call venv\scripts\activate.batThen, install Helium using pip:
python -m pip install heliumNow enter python into the command prompt and (for instance) the commands in
the animation at the top of this page (from helium import *, ...).
I've compiled a cheatsheet that quickly teaches you all you need to know to be productive with Helium.
If you use an IDE such as PyCharm, you should get auto-completion and documentation for Helium's various functions. Otherwise, please look at this Python file. It lists all of Helium's public functions. I have not yet had time to bring this into a more readable state, sorry.
I have too little spare time to maintain this project for free. If you'd like my help, please go to my web site to ask about my consulting rates. Otherwise, unless it is very easy for me, I will usually not respond to emails or issues on the issue tracker. I will however accept and merge PRs. So if you add some functionality to Helium that may be useful for others, do share it with us by creating a Pull Request. For instructions, please see below.
Pull Requests are very welcome. Please follow the same coding conventions as the rest of the code, in particular the use of tabs over spaces.
Before you submit a PR, ensure that the tests still work:
python setup.py testThis runs the tests against Chrome. To run them against Firefox, set the
environment variable TEST_BROWSER to firefox. Eg. on Mac/Linux:
TEST_BROWSER=firefox python setup.py testOn Windows:
set TEST_BROWSER=firefox
python setup.py testIf you do add new functionality, you should also add tests for it. Please see
the tests/ directory for what this might look like.
I (Michael Herrmann) originally developed Helium in 2013 for a Polish IT startup called BugFree software. (It could be that you have seen Helium before at https://heliumhq.com.) We shut down the company at the end of 2019 and I felt it would be a shame if Helium simply disappeared from the face of the earth. So I invested some time to modernize it and bring it into a state suitable for open source.
Helium used to be available for both Java and Python. But I because I now only use it from Python, I didn't have time to bring the Java implementation up to speed as well. Similarly for Internet Explorer: Helium used to support it, but since I have no need for it, I removed the (probably broken) old implementation.