Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/sebbekarlsson/domeventlistener
🔄 Subscribe on DOM elements in Python
https://github.com/sebbekarlsson/domeventlistener
dom events python python-library scraping
Last synced: 12 days ago
JSON representation
🔄 Subscribe on DOM elements in Python
- Host: GitHub
- URL: https://github.com/sebbekarlsson/domeventlistener
- Owner: sebbekarlsson
- License: gpl-3.0
- Created: 2017-12-20T10:03:01.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2017-12-27T07:46:08.000Z (about 7 years ago)
- Last Synced: 2024-12-31T10:05:52.978Z (about 1 month ago)
- Topics: dom, events, python, python-library, scraping
- Language: Python
- Homepage:
- Size: 3 MB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# DOMEventListener
> Subscripe on DOM elements, trigger methods when they change## Notes
* Operates without a database by default
* __can__ operate with whatever database you want## Usage
> Example: _Subscribing on the stackoverflow feed_:from domeventlistener.listen import Listener
# your event handler
def event_handler(event_type, data):
print(event_type, data)listener = Listener(
'https://stackoverflow.com/questions',
'#mainbar',
event_handler
)# mount it on the element
listener.mount()try:
listener.run()
except KeyboardInterrupt():
quit()> For example, when the DOM has changed the `event_handler` defined will print
> something like:'changed',
### Changing where data is stored
> By default, the element is stored in the `RAM` memory, you can change this
> by setting read and write functions.> For example, if you want to use _MongoDB_:
from domeventlistener.listen import Listener
from myapp.mongo import db
def read_element():
return str(db.collections.find_one({'name': 'element'})['element_str'])def write_element(element_str):
return db.collections.update_one(
{'name': 'element', 'element_str': element_str},
upsert=True
)
...listener = Listener(
'https://stackoverflow.com/questions',
'#mainbar',
event_handler,
read_element=read_element,
write_element=write_element
)
...## Using with selenium + chromedriver
> You can set the chrome attribute to use selenium webdriver:...
mydriver = webdriver.Chrome(
executable_path=config['chrome_driver'],
chrome_options=chrome_options
)listener = Listener(
'https://stackoverflow.com/questions',
'#mainbar',
event_handler,
read_element=read_element,
write_element=write_element,
chrome=mydriver # passing in my driver to use selenium + chromedriver
)
...## Pooling
> Running multiple listeners at the same time:from domeventlistener.listen import Listener
from domeventlistener.pool import ListenPool# my event handler
def event_handler(event_type, data):
print(event_type, data)listener0 = Listener(
domain='https://github.com/sebbekarlsson',
query='a[title="Stars"]',
event_handler=event_handler
)
pool = ListenPool()
# deploy as many listeners as you want.
# The "pool" will automaticaly start them once deployed using this method.
pool.deploy_listener(listener0)## Using the domeventlistener in your application
from domeventlistener.listen import Listener
listener = Listener(
domain='http://example.org',
query='h1'
)
# boolean string
has_changed, new_element_str = listener.poll_change()## Type of events
* `changed` - the DOM was changed
* `emptied` - the DOM is now empty / lost## CLI (Command line interface)
![cli.gif](cli.gif)## Installation
> Install with pip:pip install DOMEventListener
> Install by cloning down:
git clone
cd
python setup.py install## Development
### Unit testing
> First install:pip install pytest pytest-cov
> Run the tests:
./test.sh
> To run thests with chromedriver + selenium
echo '{"chromedriver": "/path/to/chromedriver"}' > domeventlistener/tests/config.json
## License
> License: [gpl-3.0](LICENSE.md)