Skip to main content

Python implementation of Xetera/ghost-cursor

Project description

Python Ghost Cursor

Python port of Xetera/ghost-cursor, for use with Pyppeteer and Playwright.

Generate realistic, human-like mouse movement data between coordinates or navigate between elements with Pyppeteer/Playwright like the definitely-not-robot you are.

Installation

pip install python_ghost_cursor

Usage

Generating movement data between 2 coordinates.

from python_ghost_cursor import path

start = {
    "x": 220,
    "y": 402,
}

end = {
    "x": 902,
    "y": 1032,
}

route = path(start, end)

 # [
 #   { "x": 100, "y": 100 },
 #   { "x": 108.75573501957051, "y": 102.83608396351725 },
 #   { "x": 117.54686481838543, "y": 106.20019239793275 },
 #   { "x": 126.3749821408895, "y": 110.08364505509256 },
 #   { "x": 135.24167973152743, "y": 114.47776168684264 }
 #   ... and so on
 # ]

Usage with Pyppeteer:

import asyncio
import pyppeteer
from python_ghost_cursor.pyppeteer import create_cursor

async def main(url):
  selector = "#sign-up button"
  browser = await pyppeteer.launch(headless=False)
  page = await browser.newPage()
  cursor = createCursor(page)
  await page.goto(url)
  await page.waitForSelector(selector)
  await cursor.click(selector)

asyncio.run(main())

Usage with Playwright (async):

import asyncio
from playwright.async_api import async_playwright
from python_ghost_cursor.playwright_async import create_cursor

async def main():
  async with async_playwright() as p:
    selector = "#sign-up button"
    browser = await p.chromium.launch(channel="chrome", headless=False)
    page = await browser.new_page()
    cursor = create_cursor(page)
    await page.goto(url)
    await page.wait_for_selector(selector)
    await cursor.click(selector)

asyncio.run(main())

Usage with Playwright (sync):

from playwright.sync_api import sync_playwright
from python_ghost_cursor.playwright_sync import create_cursor

def main():
  sync with sync_playwright() as p:
    selector = "#sign-up button"
    browser = p.chromium.launch(channel="chrome", headless=False)
    page = browser.new_page()
    cursor = create_cursor(page)
    page.goto(url)
    page.wait_for_selector(selector)
    cursor.click(selector)

main()

More info

The original repo gives a description of some of the cool features, along with a good explanation of how it works.

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

python_ghost_cursor-0.1.1.tar.gz (9.9 kB view details)

Uploaded Source

Built Distribution

python_ghost_cursor-0.1.1-py3-none-any.whl (21.5 kB view details)

Uploaded Python 3

File details

Details for the file python_ghost_cursor-0.1.1.tar.gz.

File metadata

  • Download URL: python_ghost_cursor-0.1.1.tar.gz
  • Upload date:
  • Size: 9.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.8.10

File hashes

Hashes for python_ghost_cursor-0.1.1.tar.gz
Algorithm Hash digest
SHA256 e1015523b104ee995f9348205b9971bd863cdf81a2a06fe6186a7b4afed926f1
MD5 ff347abbecd45341d2d62f02cdbffe26
BLAKE2b-256 05e87e22e3f738ef5c52bd5bfa0415da06baf632938690bda11469956f7bf17f

See more details on using hashes here.

File details

Details for the file python_ghost_cursor-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: python_ghost_cursor-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 21.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.8.10

File hashes

Hashes for python_ghost_cursor-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a4fecf7ba52087b3c8b7c688f8587fa790ad91575c44b17e1b0db237c0c08849
MD5 e9c9f0e0408ac3a2e797564a9cf62b05
BLAKE2b-256 3f7e1920bc9e104c0fab556abd1ed5a8d536d4060b577c687f546e405ab3a584

See more details on using hashes here.

Supported by

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