Skip to content

Local-Data-Exchange/python_ghost_cursor

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

37 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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(): 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.

About

Python port of Xetera/ghost-cursor, for use with Selenium.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 91.6%
  • JavaScript 8.4%