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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Close
Hashes for python_ghost_cursor-0.1.1.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | e1015523b104ee995f9348205b9971bd863cdf81a2a06fe6186a7b4afed926f1 |
|
MD5 | ff347abbecd45341d2d62f02cdbffe26 |
|
BLAKE2b-256 | 05e87e22e3f738ef5c52bd5bfa0415da06baf632938690bda11469956f7bf17f |
Close
Hashes for python_ghost_cursor-0.1.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a4fecf7ba52087b3c8b7c688f8587fa790ad91575c44b17e1b0db237c0c08849 |
|
MD5 | e9c9f0e0408ac3a2e797564a9cf62b05 |
|
BLAKE2b-256 | 3f7e1920bc9e104c0fab556abd1ed5a8d536d4060b577c687f546e405ab3a584 |