A comand-line utility for taking automated screenshots of websites

Overview

shot-scraper

PyPI Changelog Tests License

A comand-line utility for taking automated screenshots of websites

For background on this project see shot-scraper: automated screenshots for documentation, built on Playwright.

Documentation

Full documentation can be found at shot-scraper.datasette.io

Get started with GitHub Actions

To get started without installing any software, use the shot-scraper-template template to create your own GitHub repository which takes screenshots of a page using shot-scraper. See Instantly create a GitHub repository to take screenshots of a web page for details.

Quick installation

You can install the shot-scraper CLI tool using pip:

pip install shot-scraper
# Now install the browser it needs:
shot-scraper install

Taking your first screenshot

You can take a screenshot of a web page like this:

shot-scraper https://datasette.io/

This will create a screenshot in a file called datasette-io.png.

Many more options are available, see Taking a screenshot for details.

Examples

Comments
  • Selecting elements for screenshotting based on tag content

    Selecting elements for screenshotting based on tag content

    Selecting elements as the target for screenshots based on CSS selectors does not (currently) allow for the selection of elements based on tag content, or relative to DOM elements selected based on tag content.

    However, elements can be selected based on tag content using Javascript. It would be useful to allow for the selection of elements via Javascript as well as CSS.

    Alternatively, support a method that can be called from a javascript scraper call that will apply a screen shot to a Javascript selected element.

    At the moment, selector based screenshots seem to be focused in _selector_javascript(selectors) by:

    https://github.com/simonw/shot-scraper/blob/e40070d9bc5334ad8b2ff9e4e3565263aad545f4/shot_scraper/cli.py#L520

    As well as passing --selector(s), s, one approach might be to pass element(s) el returned from a --js-selector script?

    enhancement 
    opened by psychemedia 21
  • Initial prototype

    Initial prototype

    The initial prototype of this will involve a YAML file that defines multiple screenshots to be taken, and a GitHub Actions workflow that takes those screenshots.

    enhancement 
    opened by simonw 20
  • shot-scraper GitHub repository template implementation

    shot-scraper GitHub repository template implementation

    A repository template that helps users create a repo that takes screenshots of a page.

    Create your own template from the repo and it will give you a YAML file that you can then edit - it writes screenshots to the same repository.

    documentation 
    opened by simonw 18
  • Support returning output from evaluated JavaScript, including as status code

    Support returning output from evaluated JavaScript, including as status code

    This is a bit of an out-there idea: what if you could execute custom JavaScript that returned a result, and then write that result to disk?

    You could even skip the screenshot entirely and use this as a generic scraping tool at that point.

    Bonus: if it can affect the exit code in some way it could be used as part of a CI flow to test something.

    enhancement research 
    opened by simonw 17
  • Split up README into multiple pages of documentation

    Split up README into multiple pages of documentation

    I can use the same tech as https://django-sql-dashboard.datasette.io/en/stable/ - see https://github.com/simonw/django-sql-dashboard/tree/main/docs

    • [x] Configure Read the Docs
    • [x] Split documentation up into pages
    • [x] Add new Contributing page with notes on how docs work (including Cog)
    • [x] Vanity domain - probably shot-scraper.datasette.io
    • [x] Shrink the README and point it to the new docs
    • [x] Ship a release and check that Read the Docs has a "stable" as well as a "latest"
    documentation enhancement 
    opened by simonw 9
  • `--selector-all` to screenshot of all elements matching a selector

    `--selector-all` to screenshot of all elements matching a selector

    This then made me think that I actually want the same ability for just raw CSS selectors. But what should that look like?

    Originally posted by @simonw in https://github.com/simonw/shot-scraper/issues/43#issuecomment-1095338690

    enhancement 
    opened by simonw 8
  • shot-scraper GitHub repository template

    shot-scraper GitHub repository template

    A repository template that helps users create a repo that takes screenshots of a page.

    Create your own template from the repo and it will give you a YAML file that you can then edit - it writes screenshots to the same repository.

    documentation 
    opened by simonw 8
  • Support taking a shot that boxes multiple selectors

    Support taking a shot that boxes multiple selectors

    This is a bit of an unconventional need, but I think it's worth exploring.

    When taking screenshots for tutorials, I often want to grab an area of the screen that incorporates more than one element - where there's no convenient wrapper element that I can use to get the shot that I want.

    Imagine if you could specify multiple selectors and get back a screenshot of the smallest area of the screen that incorporates all of those elements.

    The implement would look at the founding box of all of those elements, generate a new box that wraps all of those, inject an absolutely positioned box of that size and take the screenshot of that area.

    It could even optionally add some padding to that box before taking the shot.

    research 
    opened by simonw 8
  • Protocol error (Network.getResponseBody): No resource with given identifier found

    Protocol error (Network.getResponseBody): No resource with given identifier found

    Got this error when running:

    shot-scraper https://lite.datasette.io/ --wait-for 'document.querySelector("h2")' --log-requests - | tee /tmp/datasette-lite.txt
    
    Exception in callback SyncBase._sync.<locals>.callback(<Task finishe...ifier found')>) at /Users/simon/.local/pipx/venvs/shot-scraper/lib/python3.10/site-packages/playwright/_impl/_sync_base.py:104
    handle: <Handle SyncBase._sync.<locals>.callback(<Task finishe...ifier found')>) at /Users/simon/.local/pipx/venvs/shot-scraper/lib/python3.10/site-packages/playwright/_impl/_sync_base.py:104>
    Traceback (most recent call last):
      File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/asyncio/events.py", line 80, in _run
        self._context.run(self._callback, *self._args)
      File "/Users/simon/.local/pipx/venvs/shot-scraper/lib/python3.10/site-packages/playwright/_impl/_sync_base.py", line 105, in callback
        g_self.switch()
      File "/Users/simon/.local/pipx/venvs/shot-scraper/lib/python3.10/site-packages/playwright/_impl/_browser_context.py", line 122, in <lambda>
        lambda params: self._on_response(
      File "/Users/simon/.local/pipx/venvs/shot-scraper/lib/python3.10/site-packages/playwright/_impl/_browser_context.py", line 397, in _on_response
        page.emit(Page.Events.Response, response)
      File "/Users/simon/.local/pipx/venvs/shot-scraper/lib/python3.10/site-packages/pyee/_base.py", line 113, in emit
        handled = self._call_handlers(event, args, kwargs)
      File "/Users/simon/.local/pipx/venvs/shot-scraper/lib/python3.10/site-packages/pyee/_base.py", line 96, in _call_handlers
        self._emit_run(f, args, kwargs)
      File "/Users/simon/.local/pipx/venvs/shot-scraper/lib/python3.10/site-packages/pyee/_asyncio.py", line 42, in _emit_run
        self.emit('error', exc)
      File "/Users/simon/.local/pipx/venvs/shot-scraper/lib/python3.10/site-packages/pyee/_base.py", line 116, in emit
        self._emit_handle_potential_error(event, args[0] if args else None)
      File "/Users/simon/.local/pipx/venvs/shot-scraper/lib/python3.10/site-packages/pyee/_base.py", line 86, in _emit_handle_potential_error
        raise error
      File "/Users/simon/.local/pipx/venvs/shot-scraper/lib/python3.10/site-packages/pyee/_asyncio.py", line 40, in _emit_run
        coro = f(*args, **kwargs)
      File "/Users/simon/.local/pipx/venvs/shot-scraper/lib/python3.10/site-packages/playwright/_impl/_impl_to_api_mapping.py", line 88, in wrapper_func
        return handler(
      File "/Users/simon/.local/pipx/venvs/shot-scraper/lib/python3.10/site-packages/shot_scraper/cli.py", line 734, in on_response
        "size": len(response.body()),
      File "/Users/simon/.local/pipx/venvs/shot-scraper/lib/python3.10/site-packages/playwright/sync_api/_generated.py", line 574, in body
        self._sync("response.body", self._impl_obj.body())
      File "/Users/simon/.local/pipx/venvs/shot-scraper/lib/python3.10/site-packages/playwright/_impl/_sync_base.py", line 111, in _sync
        return task.result()
      File "/Users/simon/.local/pipx/venvs/shot-scraper/lib/python3.10/site-packages/playwright/_impl/_network.py", line 375, in body
        binary = await self._channel.send("body")
      File "/Users/simon/.local/pipx/venvs/shot-scraper/lib/python3.10/site-packages/playwright/_impl/_connection.py", line 39, in send
        return await self.inner_send(method, params, False)
      File "/Users/simon/.local/pipx/venvs/shot-scraper/lib/python3.10/site-packages/playwright/_impl/_connection.py", line 63, in inner_send
        result = next(iter(done)).result()
    playwright._impl._api_types.Error: Protocol error (Network.getResponseBody): No resource with given identifier found
    

    This was logged out a bunch of times, even though the command itself ran to completion.

    I think this is likely caused by the new log requests feature from:

    • #88
    bug 
    opened by simonw 7
  • How to send POST to url?

    How to send POST to url?

    Is there any option to add params to send post to url?

    I need to send this key:value pair: "data-raw": "page=21&limit=15"

    Or maybe with javascript there is a way to send POST to url?

    I tried in javascript doing something like that, but no success:

    --javascript "var xhr = new XMLHttpRequest(); xhr.open('POST', <url>, true); xhr.setRequestHeader('Content-Type', 'application/json'); xhr.send(JSON.stringify({'data-raw': 'page=21&limit=15'}));"
    
    enhancement wontfix 
    opened by ZobaJakColbert 7
  • Idea: shot-scraper multi --if-not-exists or --skip-existing

    Idea: shot-scraper multi --if-not-exists or --skip-existing

    Only does the screenshot if the output: file doesn't exist yet.

    This could be used to build a very neat GitHub mechanism for creating a portfolio of screenshots of your projects.

    enhancement 
    opened by simonw 7
  • SDK or sample code to run scraper via a Worker?

    SDK or sample code to run scraper via a Worker?

    I know you use Playwright here @simonw - but I noted this recently: https://blog.cloudflare.com/introducing-workers-browser-rendering-api/

    If it's possible to use an alternative rendering engine and offload scraping to a CF Worker, that would be awesome.

    Just parking here for your thoughts, and potentially if others are interested. Cloudflare should perhaps be told to use alternative rendering engines too :)

    opened by amitkoth 0
  • Ability to pass CLI options to `shot-scraper multi`

    Ability to pass CLI options to `shot-scraper multi`

    https://discord.com/channels/823971286308356157/1034259126076833873/1034303037914746942 @jefftriplett

    I was curious about the multi subcommand and if it made sense to expose screenshot api options (width + height + quality) as cli options. it's not a deal breaker but it felt like it should be a pass-through since I might have a file of 50 urls and I want them to all use the same options. it's slightly more maintainable to keep track of one list of settings and it's nice because I can grab a list for the full width images and then do another for a different size but it's doable without

    I like the idea that you can pass options to shot-scraper multi which will be used for YAML items that don't over-ride them.

    enhancement 
    opened by simonw 2
  • add more ways to configure web browser from command-line

    add more ways to configure web browser from command-line

    • option to use system browser
    • option to add custom browser command-line arguments
    • option to ignore https headers

    :books: Documentation preview :books:: https://shot-scraper--91.org.readthedocs.build/en/91/

    research 
    opened by looran 4
  • weired pdf error

    weired pdf error

    url to pdf ERROR b'Traceback (most recent call last):\n File "/opt/hostedtoolcache/Python/3.10.4/x64/bin/shot-scraper", line 8, in \n sys.exit(cli())\n File "/opt/hostedtoolcache/Python/3.10.4/x64/lib/python3.10/site-packages/click/core.py", line 1130, in call\n return self.main(*args, **kwargs)\n File "/opt/hostedtoolcache/Python/3.10.4/x64/lib/python3.10/site-packages/click/core.py", line 1055, in main\n rv = self.invoke(ctx)\n File "/opt/hostedtoolcache/Python/3.10.4/x64/lib/python3.10/site-packages/click/core.py", line 1657, in invoke\n return _process_result(sub_ctx.command.invoke(sub_ctx))\n File "/opt/hostedtoolcache/Python/3.10.4/x64/lib/python3.10/site-packages/click/core.py", line 1404, in invoke\n return ctx.invoke(self.callback, **ctx.params)\n File "/opt/hostedtoolcache/Python/3.10.4/x64/lib/python3.10/site-packages/click/core.py", line 760, in invoke\n return __callback(*args, **kwargs)\n File "/opt/hostedtoolcache/Python/3.10.4/x64/lib/python3.10/site-packag...

    pdfname=url.split('/')[-1]
    
    if not os.path.exists(join(pdfpath,pdfname+'.pdf')):
        cmd='shot-scraper pdf {url} -o {pdfname}.pdf'
        isdone=subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
        out, err = isdone.communicate()
    
    bug help wanted 
    opened by shopconan 3
  • Question: Simulate hover, mouseover, mouseenter for dropdown menu activation

    Question: Simulate hover, mouseover, mouseenter for dropdown menu activation

    I'm trying to make a screenshot for the page with dropdown menu activated. See example here: https://demoqa.com/menu# ( .nav-menu-container #nav li:nth-child(2) :hover element).

    I would appreciate any tips and workflow examples.

    hover_example

    help wanted 
    opened by annjulyleon 1
Releases(1.0.1)
  • 1.0.1(Oct 24, 2022)

  • 1.0(Oct 15, 2022)

  • 0.17(Oct 14, 2022)

    • New shot-scraper multi -o option for specifying a subset of one or more output files to execute that are defined in the YAML. This is useful for testing a larger shots.yml file without re-taking every screenshot every time the command is run. #94
    Source code(tar.gz)
    Source code(zip)
  • 0.16(Sep 15, 2022)

    • Fixed error message displayed when attempting to use --log-requests on a page that includes a redirect. #90
    • --log-requests output now includes a "status": 200 field indicating the HTTP status code returned by that response.
    Source code(tar.gz)
    Source code(zip)
  • 0.15.1(Sep 13, 2022)

  • 0.15(Sep 12, 2022)

    • New --log-requests option for logging out newline-delimited JSON showing all requests made while rendering a page, including image and asset loads. #88
    • New shot-scraper pdf formatting options: --format, --width, --height, --scale and --print-background. Thanks, Eddie Chapman. #87
    • Removed -h shortcut for help - use --help instead. -h was clashing with the shorter version of --height. Thanks, Matthew Bafford. #84
    Source code(tar.gz)
    Source code(zip)
  • 0.14.3(Aug 2, 2022)

  • 0.14.2(Jul 28, 2022)

  • 0.14.1(May 22, 2022)

  • 0.14(May 19, 2022)

    Source code(tar.gz)
    Source code(zip)
  • 0.13(Apr 18, 2022)

    • shot-scraper auth --devtools option for opening DevTools when authenticating with a site. #66
    • shot-scraper multi -n/--no-clobber option for skipping screenshots where the output image already exists on disk. #70
    Source code(tar.gz)
    Source code(zip)
  • 0.12(Apr 11, 2022)

    • --selector-all option to take a screenshot that encompasses every element matching the specified CSS selector - complements --selector which takes a screenshot of just the first element matching that selector. See Specifying elements using JavaScript filters. #64
    • selector_all: and selectors_all: keys in the shot-scraper multi YAML format.
    • --js-selector and --js-selector-all options for specifying elements to screenshot using a JavaScript expression, for cases which cannot be handled using CSS selectors #43. The following example takes a screenshot of the first paragraph on the page that mentions shot-scraper:
      shot-scraper https://github.com/simonw/shot-scraper \
        --js-selector 'el.tagName == "P" && el.innerText.includes("shot-scraper")'
      
    • js_selector:, js_selectors:, js_selector_all: and js_selectors_all: equivalent keys in the shot-scraper multi YAML format.
    • --user-agent option for setting a custom user agent header. #63
    • --browser webkit option for running WebKit - thanks, Ryan Murphy. #56
    Source code(tar.gz)
    Source code(zip)
  • 0.11(Apr 8, 2022)

    • New shot-scraper accessibility --timeout option, thanks Ben Welsh. #59
    • shot-scraper auth --browser option for authentication using a browser other than Chromium. #61
    • Using --quality now results in a JPEG file with the correct .jpg extension. Thanks, Ian Wootten. #58
    • New --reduced-motion flag for emulating the "prefers-reduced-motion" media feature. Thanks, Ryan Murphy. #49
    Source code(tar.gz)
    Source code(zip)
  • 0.10(Mar 29, 2022)

    Source code(tar.gz)
    Source code(zip)
  • 0.9(Mar 14, 2022)

    • New shot-scraper javascript command for executing JavaScript against a web page and returning the result to the console as JSON: #38

      % shot-scraper javascript datasette.io document.title
      "Datasette: An open source multi-tool for exploring and publishing data"
      

      This can be used for web scraping and data extraction. Any JavaScript errors will cause the command to return an exit code of 1, so this can also be used to run tests against a website from within a continuous integration environment such as GitHub Actions.

    • The shot-scraper pdf and shot-scraper accessibility commands can both now be used with local files in addition to URLs. #37

    • The output: key is no longer required in YAML shot configuration: if omitted, an automatic filename will be used instead. #40

    • An empty YAML file no longer produces an error. #41

    Source code(tar.gz)
    Source code(zip)
  • 0.8(Mar 13, 2022)

    • shot-scraper can now take screenshots of local files on disk: #35

      shot-scraper index.html -o index.png
      
    • If you call shot-scraper on a URL with no protocol, http:// will be assumed. Redirects will be followed:

      shot-scraper datasette.io -o datasette.png
      
    Source code(tar.gz)
    Source code(zip)
  • 0.7(Mar 13, 2022)

    • The shot-scraper shot and shot-scraper pdf commands both now default to writing a file to disk if no filename is specified, using a name derived from the URL. If you want to write the PNG or PDF content to standard output you can do so using -o -. #32
    • New --retina flag for shot-scraper shot and shot-scraper multi which causes the screenshot to be taken with a device scale factor of 2. #33
    • shot-scraper shot --devtools option opens an interactive browser window with the browser developer tools enabled. #34
    Source code(tar.gz)
    Source code(zip)
  • 0.6(Mar 12, 2022)

    • Now supports taking screenshots of pages that require authentication. #18

      The following command will open a browser window for the specified website, wait for you to manually authenticate and hit <enter> in the terminal, and then write the resulting authentication context out to auth.json:

      shot-scraper auth https://github.com/ auth.json`
      

      You can then take authenticated screenshots like this:

      shot-scraper https://github.com/notifications \
        --auth auth.json -o notifications.png
      

      The -a/--auth option is also supported by the multi, pdf and accessibility commands.

    • The shot-scraper command can now open a browser in which you can interact with a page before the screenshot is taken: #31

      shot-scraper https://simonwillison.net/ \
        -o after-interaction.png \
        --height 800 --interactive
      

      This will output:

      Hit <enter> to take the shot and close the browser window:
        # And after you hit <enter>...
      Screenshot of 'https://simonwillison.net/' written to 'after-interaction.png'
      
    • You can now pass multiple CSS selectors in order to take a screenshot of the smallest area that encompasses all of the content referenced by those selectors: #21

      shot-scraper https://simonwillison.net/ \
        -s '#bighead' -s .overband \
        -o bighead-multi-selector.png
      

      Add --padding 20 to include an additional 20px of padding around the specified area.

      The YAML format used by snap-shotter multi also now supports multiple CSS selectors, which look like this:

      - output: bighead-multi-selector.png
        url: https://simonwillison.net/
        selectors:
        - "#bighead"
        - .overband
        padding: 20
      
    • Scripted tests can now be run using tests/run_examples.sh #29

    Source code(tar.gz)
    Source code(zip)
  • 0.5(Mar 12, 2022)

    • New shot-scraper pdf command for creating a PDF export of a web page. #24
    • shot-scraper accessibility --javascript option for executing custom JavaScript before taking the accessibility snapshot. #23
    • shot-scraper accessibility -o filename.json option. #25
    • README demos section now links to @newshomepages Twitter bot by @palewire
    • README now includes tips on executing JavaScript. #20
    • README now includes the --help output of the various commands.
    Source code(tar.gz)
    Source code(zip)
  • 0.4(Mar 10, 2022)

    • Added shot-scraper accessibility URL command, which dumps out a JSON copy of the Chromium accessibility tree for the page. #22
    • Fixed error in the --help output for the shot-scraper multi command.
    Source code(tar.gz)
    Source code(zip)
  • 0.3(Mar 9, 2022)

  • 0.2(Mar 9, 2022)

    • shot-scraper --selector SELECTOR option to specify an element on the page using a CSS selector and take a screenshot of just that element. #8
    • selector: ... key in YAML file to specify an element by CSS selector.
    • --javascript SCRIPT option to specify custom JavaScript to be executed after the page has loaded but before the screenshot is taken. #12
    • javascript: key in YAML to specify JavaScript to execute.
    • --width and --height options to set the width and height of the browser window used for the screenshot. If a height is specified, the resulting screenshot will be that height rather than being the full height of the page. #13
    • Equivalent width: and height: keys in the YAML configuration.
    Source code(tar.gz)
    Source code(zip)
  • 0.1(Mar 9, 2022)

    • Switched from npm Playwright to Python Playwright. #3
    • New shot-scraper install command for installing the browser needed by Playwright. #6
    • New shot-scraper shot URL command (also the default if you just run shot-scraper ...) which takes a single screenshot. #5
    • shot-scraper multi shots.yml command now executes the YAML file with a list of shots in it.
    Source code(tar.gz)
    Source code(zip)
  • 0.1a0(Mar 8, 2022)

Telegram bot implementing Lex Arcana using python-telegram-bot library.

Lex Arcana Telegram Bot 🤖 Telegram bot implementing Lex Arcana using python-telegram-bot library. This bot was evaluated for the course "Computer Eng

Nicolò Sonnino 6 Jun 22, 2022
streamlit translator is used to detect and translate between languages created using gTTS, googletrans, pillow and streamlit python packages

Streamlit Translator Streamlit Translator is a simple translator app to detect and translate between languages. Streamlit Translator gets text and lan

Siva Prakash 5 Apr 05, 2022
Using DST's API with Python

A short guide on how to access Denmark's Statistics API with python, together with a helper class that facilitates the collection of data and metadata from any DST's table

Alessandro Martinello 16 Dec 02, 2022
Discord Token Generator of a project - Some stupids ppl are trying to leak it so i'm leaking faster :)

Original creator: Rolf (dort) HCaptcha Bypasser: h0nde Shark.Solar Discord Token Generator of a project - Some stupids ppl are trying to leak it so i'

Stanley 14 Sep 29, 2021
Pancakeswap Sniper BOT - TORNADO CASH Proxy (MAC WINDOWS ANDROID LINUX) A fully decentralized protocol for private transactions

TORNADO CASH Proxy Pancakeswap Sniper BOT 2022-V1 (MAC WINDOWS ANDROID LINUX) ⭐️ A fully decentralized protocol for private transactions ⭐️ AUTO DOWNL

Crypto Trader 1 Jan 05, 2022
A wrapper for the Discord Python Pixels API.

DPYPX A simple wrapper around Python Discord Pixels. Requires Python 3.7+ (3.x where x = 7). Requires pillow and aiohttp from pip. Example import dpy

Artemis 3 Oct 01, 2022
Match-making API for OpenSanctions

OpenSanctions Match-making API This directory contains code and a Docker image for running an API to match data against OpenSanctions. It is intended

OpenSanctions.org 26 Dec 15, 2022
Name says it all/Instructions are in README file.

Discord-Webhook-Spammer Name says it all/Instructions are in README file. Setup 1. pip install discord-webhook ( In console, terminal or whatever you

Catto 1 Mar 21, 2022
Texting service to receive current air quality conditions and maps, powered by AirNow, Twilio, and AWS

The Air Quality Bot is generally available by texting a zip code (and optionally the word "map") to (415) 212-4229. The bot will respond with the late

Alex Laird 8 Oct 16, 2022
alpaca-trade-api-python is a python library for the Alpaca Commission Free Trading API.

alpaca-trade-api-python is a python library for the Alpaca Commission Free Trading API. It allows rapid trading algo development easily, with support for both REST and streaming data interfaces

Alpaca 1.5k Jan 09, 2023
BlueMoonVampireBot - A Telegram Antispam Based Bot

Blue Moon Vampire Bot An Telegram Antispam Based Bot A Pyogram Bot to make banne

13 Nov 24, 2022
ignorant allows you to check if a phone number is used on different sites like snapchat, instagram.

Ignorant For BTC Donations : 1FHDM49QfZX6pJmhjLE5tB2K6CaTLMZpXZ ignorant does not alert the target phone number ignorant allows you to check if a phon

Palenath 513 Dec 31, 2022
Track player's stats, find out when they're online and grinding!

Hypixel Stats Tracker Track player's stats, find out when they're online and playing games! INFO Showcase Server: https://discord.gg/yY5qQHPar6 Suppor

4 Dec 18, 2022
SpotPlay2YouPlay - Converts new additions to a Spotify playlist to a matching Youtube playlist

SpotPlay2YouPlay - Converts new additions to a Spotify playlist to a matching Youtube playlist, can also be configured to converting whole playlists with the refresh fun

9 Mar 06, 2022
Spacecrypto-bot - SpaceCrypto Bot Auto Clicker

SpaceCrypto Auto Clicker Bot Também fiz um para Luna Rush ( https://github.com/w

Walter Discher Cechinel 5 Feb 22, 2022
Deepl - DeepL Free API For Python

DeepL DeepL Free API Notice Since I don't want to make my AuthKey public, if you

Vincent Young 4 Apr 11, 2022
Deep reinforcement learning library built on top of Neural Network Libraries

Deep Reinforcement Learning Library built on top of Neural Network Libraries NNablaRL is a deep reinforcement learning library built on top of Neural

Sony 100 Dec 14, 2022
POC de uma AWS lambda que executa a consulta de preços de criptomoedas, e é implantada na AWS usando Github actions.

Cryptocurrency Prices Overview Instalação Repositório Configuração CI/CD Roadmap Testes Overview A ideia deste projeto é aplicar o conteúdo estudado s

Gustavo Santos 3 Aug 31, 2022
Confirm that files have been uploaded to Backblaze Cloud Backup successfully

Backblaze Backup Checker This Python script compares metadata captured from files within source folders against data parsed from Backblaze Cloud Backu

18 Jul 29, 2022
Telegram bot to stream videos in telegram voicechat for both groups and channels

Telegram bot to stream videos in telegram voicechat for both groups and channels. Supports live streams, YouTube videos and telegram media. With record stream support, Schedule streams, and many more

ALBY 9 Feb 20, 2022