Skip to main content

fetch in Python using your browser!

Project description

Fetch using your browser.

Let the browser manage cookies for you.

⚠️ This project is a very simple implementation. Not tested thoroughly. Consider it a proof of concept.

Usage

  1. You’ll run a Python script containing some code like this:

from asyncio import gather, get_event_loop

from browserfetch import fetch, get, post, run_server


async def main():
    response1, response2, reponse3 = await gather(
        get('https://example.com/path1', params={'a': 1}),
        fetch('https://example.com/image.png'),
        post('https://example.com/path2', data={'a': 1}),
    )
    # do stuff with retrieved responses


loop = get_event_loop()
loop.create_task(start_server())
loop.run_until_complete(main())
  1. Open your browser, goto http://example.com (perhaps solve a captcha and log in).

  2. Copy the contents of browserfetch.js file and paste it in browser’s console. (You can use a browser extensions like violentmonkey/tampermonkey to do this step for you.)

That’s it! Your Python script starts handling requests. The browser tab should remain open of-coarse.

The server can handle multiple websocket connections from different websites simultaneously.

How it works

browserfetch communicates with your browser using a websocket. The fetch function just passes the request to browser and it is the browser that handles the actual request. Response data is sent back to Python using the same WebSocket connection.

Motivations

  • browser_cookie3 stopped working on Chrome-based browsers. There is a workaround: ShadowCopy, but it requires admin privilege.

  • Another issue with browser_cookie’s approach is that it retrieves cookies from cookie files, but these files are not updated instantly. Thus, you might have to wait or retry a few times before you can successfully access newly set cookies.

  • ShadowCopying and File access are slow and inefficient operations.

Downsides

  • Setting up browserfetch is more cumbersome since it requires running a Python server and also injecting a small script into the webpage. Using browser_cookie3 might be a better choice if there are many websites that you need to communicate with.

  • To run more than one server at the same time, you have to change the port number in both start_server(port=) call and in the corresponding JavaScript for each instance of the program.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

browserfetch-0.4.0.tar.gz (18.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

browserfetch-0.4.0-py3-none-any.whl (18.4 kB view details)

Uploaded Python 3

File details

Details for the file browserfetch-0.4.0.tar.gz.

File metadata

  • Download URL: browserfetch-0.4.0.tar.gz
  • Upload date:
  • Size: 18.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.6

File hashes

Hashes for browserfetch-0.4.0.tar.gz
Algorithm Hash digest
SHA256 02b3dac2512f1813b47083fb914dde802b61751fbce63164733226e81863e374
MD5 fdf4059472942e1189d5cdce107be894
BLAKE2b-256 7e59e6893e73a1295be4daf9e02f434f350d8f727f6628a8012e3f25ba275a0c

See more details on using hashes here.

File details

Details for the file browserfetch-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: browserfetch-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 18.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.6

File hashes

Hashes for browserfetch-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f85da389d38b59729f51a7250aa15ec1b44c51a954f8e4a9f3c7e9eec1d02f2e
MD5 17c324286597adc3032767ade2d3caaa
BLAKE2b-256 a860f265b683615d146b1bc2642e5a7bdd0353ac618fd77080825bdd8e267b13

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page