chromeless
AWS lambda with selenium & python is powerful solution.
Let's access this benefit easily!
- Don't create lambda functions every time. Just create this once.
- Write the method.
- Selenium dynamically execute your script.
Example
def get_title(self, url):
self.get(url)
return self.title
from chromeless import Chromeless
chrome = Chromeless()
chrome.attach(get_title)
print(chrome.get_title("https://google.com"))
You can also provide boto3 session object if you don't want to use default aws profile:
from chromeless import Chromeless
from boto3.session import Session
session = Session(aws_access_key_id='<YOUR ACCESS KEY ID>',
aws_secret_access_key='<YOUR SECRET KEY>',
region_name='<REGION NAME>')
session = Session(profile_name='<YOUR_PROFILE_NAME>')
chrome = Chromeless(boto3_session=session)
Or also you can just set appropriate environment vars works with boto3,
so it will auto detect your choice e.g.:
# In mac or linux
export AWS_DEFAULT_REGION=<your aws region>
# In windows
set AWS_DEFAULT_REGION=<your aws region>
Installing
git clone --depth 1 https://github.com/umihico/pythonista-chromeless.git chromeless && cd $_
sls deploy --region YOUR_REGION
pip install chromeless
That's it! Now run the example.py
and confirm your selenium works in lambda functions!
Tips
- Don't call selenium native methods directly. Solution is wrapping.
chrome = Chromeless()
chrome.get("https://google.com")
chrome.title
def wrapper(self, url):
self.get(url)
return self.title
chrome = Chromeless()
chrome.attach(wrapper)
print(chrome.wrapper("https://google.com"))
print(chrome.wrapper("https://microsoft.com"))
print(chrome.wrapper("https://apple.com"))
- Multiple methods are also attachable.
def login(self):
self.get("https://example.com/login")
self.find_element_by_id("username").send_keys("umihico")
self.find_element_by_id("password").send_keys("password")
self.find_element_by_name("submit").click()
def test1(self):
self.login()
self.get("https://example.com/")
def test2(self):
self.login()
self.get("https://example.com/logout")
chrome = Chromeless()
chrome.attach(login)
chrome.attach(test1)
chrome.attach(test2)
print(chrome.test1())
print(chrome.test2())
def bad_wrapper(self):
self.get("https://google.com")
self.save_screenshot("screenshot.png")
def good_wrapper(self):
self.get("https://google.com")
return self.get_screenshot_as_png()
chrome = Chromeless()
chrome.attach(good_wrapper)
png = chrome.good_wrapper()
with open("screenshot.png", 'wb') as f:
f.write(png)
The project is licensed under the MIT license.