{"_id":"@ab6162/shy-mouse-playwright","_rev":"10-41d1436e21797e03539a602a39bb9f05","name":"@ab6162/shy-mouse-playwright","dist-tags":{"latest":"0.1.0"},"versions":{"0.0.1":{"name":"@ab6162/shy-mouse-playwright","version":"0.0.1","keywords":["node.js","nodejs","mouse","javascript","npm","package","playwright","patchright","automation","bot","bots","stealth","webautomation","webscraping","web-auto","webdriver"],"author":{"name":"AB6162"},"license":"MIT","_id":"@ab6162/shy-mouse-playwright@0.0.1","maintainers":[{"name":"ab6162","email":"alejandro.blackburn@gmail.com"}],"homepage":"https://github.com/AB6162/shy-mouse-playwright#readme","bugs":{"url":"https://github.com/AB6162/shy-mouse-playwright/issues"},"dist":{"shasum":"deff08dc1d501bdf77707d3d7c910fa026d7da39","tarball":"https://registry.npmjs.org/@ab6162/shy-mouse-playwright/-/shy-mouse-playwright-0.0.1.tgz","fileCount":4,"integrity":"sha512-npS24aVzUIJ7GkaAbq/hkFTx3BhsCsB1FpalXoVTq1RgNZkyEWuATauv20xsgTl1MW8tKprTH0gbmuY+R7qHKw==","signatures":[{"sig":"MEQCIGl1Gm+Wm0Wa2QaD2qLQzUFIRHjxevdfz7HPSkkmlHoqAiB79LAgkRCp5ZTrRpqTLDQVkRFIesGAZ9PLnwsFBgU2tQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14166},"main":"ShyMouse.js","gitHead":"7e2de467baffedc13b5fa56f5bff3eacb09c2582","private":false,"_npmUser":{"name":"ab6162","email":"alejandro.blackburn@gmail.com"},"repository":{"url":"git+https://github.com/AB6162/shy-mouse-playwright.git","type":"git"},"_npmVersion":"10.2.3","description":"A simple npm package to humanize mouse movements in Playwright or Patchright.","directories":{},"_nodeVersion":"20.10.0","dependencies":{},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/shy-mouse-playwright_0.0.1_1759127449323_0.1823880218368803","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@ab6162/shy-mouse-playwright","version":"0.0.2","keywords":["node.js","nodejs","mouse","javascript","npm","package","playwright","patchright","automation","bot","bots","stealth","webautomation","webscraping","web-auto","webdriver"],"author":{"name":"AB6162"},"license":"MIT","_id":"@ab6162/shy-mouse-playwright@0.0.2","maintainers":[{"name":"ab6162","email":"alejandro.blackburn@gmail.com"}],"homepage":"https://github.com/AB6162/shy-mouse-playwright#readme","bugs":{"url":"https://github.com/AB6162/shy-mouse-playwright/issues"},"dist":{"shasum":"ecc5300c69d863e9ec740b1ef21fa95e69c2b85e","tarball":"https://registry.npmjs.org/@ab6162/shy-mouse-playwright/-/shy-mouse-playwright-0.0.2.tgz","fileCount":4,"integrity":"sha512-19mwWG+66/xXGx9WrurhuBvNmggMmBnxTqW0bHPxt17pGBMANfTjINPkvPnjr1ekEPwh9yNRlNULu1M9OQPwgA==","signatures":[{"sig":"MEQCICnOh2y6hdlOD/lyV3KzyFI5fX3mAM9DyE+LLDIhX2uGAiAo6JJNsUA6up4itdLHstCbR4YnCi6Su+MHXkYuUbN5Xw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14172},"main":"ShyMouse.js","gitHead":"1c22056b7822517d392b9157842a8c401d1dcc33","private":false,"_npmUser":{"name":"ab6162","email":"alejandro.blackburn@gmail.com"},"repository":{"url":"git+https://github.com/AB6162/shy-mouse-playwright.git","type":"git"},"_npmVersion":"10.2.3","description":"A simple npm package to humanize mouse movements in Playwright or Patchright.","directories":{},"_nodeVersion":"20.10.0","dependencies":{},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/shy-mouse-playwright_0.0.2_1759193863506_0.8388437647915556","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@ab6162/shy-mouse-playwright","version":"0.0.3","keywords":["node.js","nodejs","mouse","javascript","npm","package","playwright","patchright","automation","bot","bots","stealth","webautomation","webscraping","web-auto","webdriver"],"author":{"name":"AB6162"},"license":"MIT","_id":"@ab6162/shy-mouse-playwright@0.0.3","maintainers":[{"name":"ab6162","email":"alejandro.blackburn@gmail.com"}],"homepage":"https://github.com/AB6162/shy-mouse-playwright#readme","bugs":{"url":"https://github.com/AB6162/shy-mouse-playwright/issues"},"dist":{"shasum":"de1e07255fc39a636eb085a45067db387bd53877","tarball":"https://registry.npmjs.org/@ab6162/shy-mouse-playwright/-/shy-mouse-playwright-0.0.3.tgz","fileCount":4,"integrity":"sha512-byH3w6zshOsxn7w/RavYXob2mbg8Cvwd48legx8Z4/hV7M2/LPftOVbKgpCXXLVCGwcFMD5lSfNX7Zj71M64EQ==","signatures":[{"sig":"MEUCIH5lThEc4O9KpxgaQak0hvkKjGHc7gZHkn4LoaR8JGO+AiEAxgRwFlUQIqURcS/2Z3tX/ek65zUwQQbhHUnirSO0I74=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14450},"main":"ShyMouse.js","gitHead":"1c22056b7822517d392b9157842a8c401d1dcc33","private":false,"_npmUser":{"name":"ab6162","email":"alejandro.blackburn@gmail.com"},"repository":{"url":"git+https://github.com/AB6162/shy-mouse-playwright.git","type":"git"},"_npmVersion":"10.2.3","description":"A simple npm package to humanize mouse movements in Playwright or Patchright.","directories":{},"_nodeVersion":"20.10.0","dependencies":{},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/shy-mouse-playwright_0.0.3_1759196797552_0.8553649413082915","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@ab6162/shy-mouse-playwright","version":"0.0.4","keywords":["node.js","nodejs","mouse","javascript","npm","package","playwright","patchright","automation","bot","bots","stealth","webautomation","webscraping","web-auto","webdriver"],"author":{"name":"AB6162"},"license":"MIT","_id":"@ab6162/shy-mouse-playwright@0.0.4","maintainers":[{"name":"ab6162","email":"alejandro.blackburn@gmail.com"}],"homepage":"https://github.com/AB6162/shy-mouse-playwright#readme","bugs":{"url":"https://github.com/AB6162/shy-mouse-playwright/issues"},"dist":{"shasum":"5895e866a06a72e23ff8eddcd7ad8aaf68784bfa","tarball":"https://registry.npmjs.org/@ab6162/shy-mouse-playwright/-/shy-mouse-playwright-0.0.4.tgz","fileCount":4,"integrity":"sha512-yVRVQ+3K2AvOktE1Y4+zlLiDCV3wU6f54Sg1Gak4lq9L6xjL1YwOZDUeEClu3WS/m8ZoZmGwvCj93OAajCoKaA==","signatures":[{"sig":"MEUCIQDvg7VGblbMchP8mDlVFNGaOXJxvrLeFABJJPkuJ71OsgIgCkmfN4jhXcGpBr5CtQk0XlxEyWBUHAbG8f5k3Qv4/8M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19730},"main":"ShyMouse.js","gitHead":"f147f10547163bc2e6ab18e05e1803997c94fa83","private":false,"_npmUser":{"name":"ab6162","email":"alejandro.blackburn@gmail.com"},"repository":{"url":"git+https://github.com/AB6162/shy-mouse-playwright.git","type":"git"},"_npmVersion":"10.2.3","description":"A simple npm package to humanize mouse movements in Playwright or Patchright.","directories":{},"_nodeVersion":"20.10.0","dependencies":{},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/shy-mouse-playwright_0.0.4_1759262632950_0.12677412731382742","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"name":"@ab6162/shy-mouse-playwright","version":"0.0.5","keywords":["node.js","nodejs","mouse","javascript","npm","package","playwright","patchright","automation","bot","bots","stealth","webautomation","webscraping","web-auto","webdriver"],"author":{"name":"AB6162"},"license":"MIT","_id":"@ab6162/shy-mouse-playwright@0.0.5","maintainers":[{"name":"ab6162","email":"alejandro.blackburn@gmail.com"}],"homepage":"https://github.com/AB6162/shy-mouse-playwright#readme","bugs":{"url":"https://github.com/AB6162/shy-mouse-playwright/issues"},"dist":{"shasum":"f5254caa897c2cb2cbb117559e30a04fe806eddd","tarball":"https://registry.npmjs.org/@ab6162/shy-mouse-playwright/-/shy-mouse-playwright-0.0.5.tgz","fileCount":4,"integrity":"sha512-vWj/VYYoE3yrXPE0ddMISUa4rrrnLFtFUh6V0uClXUdQhH+bzb97qAT8pFcMQ3q8V4RzVmS6EMYRsX0cDa/x9w==","signatures":[{"sig":"MEUCIQDPBuDIt75E/Mu/ihZ2Thh+FeemPXqowy+fkAsCDhX7NQIgcc55ghWWlI/ic+N42olMdZZPT7vM1Vg9cc8mLIkCuyM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19730},"main":"ShyMouse.js","gitHead":"c1ad28db5ef69e7ccaa321199398eb3162e848fc","private":false,"_npmUser":{"name":"ab6162","email":"alejandro.blackburn@gmail.com"},"repository":{"url":"git+https://github.com/AB6162/shy-mouse-playwright.git","type":"git"},"_npmVersion":"10.2.3","description":"A simple npm package to humanize mouse movements in Playwright or Patchright.","directories":{},"_nodeVersion":"20.10.0","dependencies":{},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/shy-mouse-playwright_0.0.5_1759262964264_0.24416761691672573","host":"s3://npm-registry-packages-npm-production"}},"0.0.6":{"name":"@ab6162/shy-mouse-playwright","version":"0.0.6","keywords":["node.js","nodejs","mouse","javascript","npm","package","playwright","patchright","automation","bot","bots","stealth","webautomation","webscraping","web-auto","webdriver"],"author":{"name":"AB6162"},"license":"MIT","_id":"@ab6162/shy-mouse-playwright@0.0.6","maintainers":[{"name":"ab6162","email":"alejandro.blackburn@gmail.com"}],"homepage":"https://github.com/AB6162/shy-mouse-playwright#readme","bugs":{"url":"https://github.com/AB6162/shy-mouse-playwright/issues"},"dist":{"shasum":"47a49a12eff484ea9b5b0f3ee24b06ee519e6375","tarball":"https://registry.npmjs.org/@ab6162/shy-mouse-playwright/-/shy-mouse-playwright-0.0.6.tgz","fileCount":4,"integrity":"sha512-VNzcYA1enUrgk34vQJ4U5em13a5fBY9AZGucHJTzGsPX4JmrLE0049r9bUySuxw3DOz+0Txg0OInUUawqFWj+Q==","signatures":[{"sig":"MEYCIQCTpW40audGWTOGFYHn9ph1OHlnZts+FRfnB4zXGxxbJAIhAPyOfnbgnMTxV8zQ9xPvMmZw950jpr6h7cgnKDbKUq6U","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":58610},"main":"ShyMouse.js","gitHead":"c2c16ef0b27ecbca0e5ae38adbe4f2da69416ac6","private":false,"_npmUser":{"name":"ab6162","email":"alejandro.blackburn@gmail.com"},"repository":{"url":"git+https://github.com/AB6162/shy-mouse-playwright.git","type":"git"},"_npmVersion":"10.2.4","description":"A simple npm package to humanize mouse movements in Playwright or Patchright.","directories":{},"_nodeVersion":"21.6.1","dependencies":{},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/shy-mouse-playwright_0.0.6_1761623567431_0.22404158121491768","host":"s3://npm-registry-packages-npm-production"}},"0.0.7":{"name":"@ab6162/shy-mouse-playwright","version":"0.0.7","keywords":["node.js","nodejs","mouse","javascript","npm","package","playwright","patchright","automation","bot","bots","stealth","webautomation","webscraping","web-auto","webdriver"],"author":{"name":"AB6162"},"license":"MIT","_id":"@ab6162/shy-mouse-playwright@0.0.7","maintainers":[{"name":"ab6162","email":"alejandro.blackburn@gmail.com"}],"homepage":"https://github.com/AB6162/shy-mouse-playwright#readme","bugs":{"url":"https://github.com/AB6162/shy-mouse-playwright/issues"},"dist":{"shasum":"6c587f51e196ddd04446dc943f85386be49c032f","tarball":"https://registry.npmjs.org/@ab6162/shy-mouse-playwright/-/shy-mouse-playwright-0.0.7.tgz","fileCount":4,"integrity":"sha512-tlXGqP/rLmMphvw6YXcuniwjOVynVHlXadzYZsDNPaczpHHbcyfpTR+smwMkwRcgK0TGmFVaLjNMKzNAh3I9pA==","signatures":[{"sig":"MEUCICczWHHngFWuD9yT7KXLEAaI3/N27VN0Gw98A6NKrFlmAiEAqkXvYTgMwtVg85pNtyePAgF1yv37gXk+KgZqdqG3WUo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":59040},"main":"ShyMouse.js","gitHead":"b9ed80aa94c6f209dd10008244c087a45f547f9f","private":false,"_npmUser":{"name":"ab6162","email":"alejandro.blackburn@gmail.com"},"repository":{"url":"git+https://github.com/AB6162/shy-mouse-playwright.git","type":"git"},"_npmVersion":"10.2.4","description":"A simple npm package to humanize mouse movements in Playwright or Patchright.","directories":{},"_nodeVersion":"21.6.1","dependencies":{},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/shy-mouse-playwright_0.0.7_1762452997729_0.03888305019049132","host":"s3://npm-registry-packages-npm-production"}},"0.0.8":{"name":"@ab6162/shy-mouse-playwright","version":"0.0.8","keywords":["node.js","nodejs","mouse","javascript","npm","package","playwright","patchright","automation","bot","bots","stealth","webautomation","webscraping","web-auto","webdriver"],"author":{"name":"AB6162"},"license":"MIT","_id":"@ab6162/shy-mouse-playwright@0.0.8","maintainers":[{"name":"ab6162","email":"alejandro.blackburn@gmail.com"}],"homepage":"https://github.com/AB6162/shy-mouse-playwright#readme","bugs":{"url":"https://github.com/AB6162/shy-mouse-playwright/issues"},"dist":{"shasum":"aceda1021df051dc0aebff2d67371abdff272bab","tarball":"https://registry.npmjs.org/@ab6162/shy-mouse-playwright/-/shy-mouse-playwright-0.0.8.tgz","fileCount":4,"integrity":"sha512-rFwUEAGb1XOf/N/TEaLu2uRez/IDFvtIh5ArFYgrCp1COE/KGO5UylifCmfwBofEq4vwn5q2EHss3vAO81jLVw==","signatures":[{"sig":"MEUCIG+0lSu7XTmnQhrSxCqpA2Kbx+f9cVN73dyxWihdbkvvAiEA6E5r4gb/rYxzSWpw4OOrfKNNiGV2OWpVWD47oPyCv8o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":59696},"main":"ShyMouse.js","gitHead":"fe66a260250ca5725914028c01a00975d2a9a4d0","private":false,"_npmUser":{"name":"ab6162","email":"alejandro.blackburn@gmail.com"},"repository":{"url":"git+https://github.com/AB6162/shy-mouse-playwright.git","type":"git"},"_npmVersion":"10.2.4","description":"A simple npm package to humanize mouse movements in Playwright or Patchright.","directories":{},"_nodeVersion":"21.6.1","dependencies":{},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/shy-mouse-playwright_0.0.8_1762453739758_0.5161260330906237","host":"s3://npm-registry-packages-npm-production"}},"0.0.9":{"name":"@ab6162/shy-mouse-playwright","version":"0.0.9","keywords":["node.js","nodejs","mouse","javascript","npm","package","playwright","patchright","automation","bot","bots","stealth","webautomation","webscraping","web-auto","webdriver"],"author":{"name":"AB6162"},"license":"MIT","_id":"@ab6162/shy-mouse-playwright@0.0.9","maintainers":[{"name":"ab6162","email":"alejandro.blackburn@gmail.com"}],"homepage":"https://github.com/AB6162/shy-mouse-playwright#readme","bugs":{"url":"https://github.com/AB6162/shy-mouse-playwright/issues"},"dist":{"shasum":"3d158f79862efb7c5a6cfc4e941b4b94b9658603","tarball":"https://registry.npmjs.org/@ab6162/shy-mouse-playwright/-/shy-mouse-playwright-0.0.9.tgz","fileCount":4,"integrity":"sha512-mYOw5K3ASNEsH3h4oTRV9B2hWBl/wX8KxVsXI7NblH9hRkmg6gQDCMIwySCDNNXIYCp+fQEaT63B9eI6PTovSg==","signatures":[{"sig":"MEUCIGeqIl+LbBq96SQmfOqapAigiq+DQ+EvQ79e5V6Z/a4lAiEAykRK/RsxmQ7bhTcZSMuvCOjQ4r5WoMTxmznPXlUXCEI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":72505},"main":"ShyMouse.js","gitHead":"fe66a260250ca5725914028c01a00975d2a9a4d0","private":false,"_npmUser":{"name":"ab6162","email":"alejandro.blackburn@gmail.com"},"repository":{"url":"git+https://github.com/AB6162/shy-mouse-playwright.git","type":"git"},"_npmVersion":"10.8.2","description":"A simple npm package to humanize mouse movements in Playwright or Patchright.","directories":{},"_nodeVersion":"20.19.4","dependencies":{},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/shy-mouse-playwright_0.0.9_1770846038512_0.33961529929615586","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@ab6162/shy-mouse-playwright","version":"0.1.0","description":"A simple npm package to humanize mouse movements in Playwright or Patchright.","main":"ShyMouse.js","repository":{"type":"git","url":"git+https://github.com/AB6162/shy-mouse-playwright.git"},"dependencies":{},"author":{"name":"AB6162"},"license":"MIT","private":false,"bugs":{"url":"https://github.com/AB6162/shy-mouse-playwright/issues"},"homepage":"https://github.com/AB6162/shy-mouse-playwright#readme","keywords":["node.js","nodejs","mouse","javascript","npm","package","playwright","patchright","automation","bot","bots","stealth","webautomation","webscraping","web-auto","webdriver"],"gitHead":"b3fef459ca6934678c3d658841a80f77d70be287","_id":"@ab6162/shy-mouse-playwright@0.1.0","_nodeVersion":"26.4.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-MiwDTpECoTHoYC3p41+H9+hik3b8vnLUX2cXSzK9dj8rILOcVqjkeh7Mls9p09lTY9TMfe2gTsseh3ar2feh2g==","shasum":"2c2d86fbb874248c41ebef9c5ccae0dca7a87905","tarball":"https://registry.npmjs.org/@ab6162/shy-mouse-playwright/-/shy-mouse-playwright-0.1.0.tgz","fileCount":4,"unpackedSize":77130,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCICDxxpn1MAaJJGLuUhEW0HGpL+gDEnXZmZY8iSFucMVLAiEAgcTLvIPsmDXvS1z484o5qefv0YAnFeIbyKhEXbdFPyM="}]},"_npmUser":{"name":"ab6162","email":"alejandro.blackburn@gmail.com"},"directories":{},"maintainers":[{"name":"ab6162","email":"alejandro.blackburn@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/shy-mouse-playwright_0.1.0_1784924802662_0.4814250496408097"},"_hasShrinkwrap":false}},"time":{"created":"2025-09-29T06:30:49.119Z","modified":"2026-07-24T20:26:42.928Z","0.0.1":"2025-09-29T06:30:49.504Z","0.0.2":"2025-09-30T00:57:43.690Z","0.0.3":"2025-09-30T01:46:37.766Z","0.0.4":"2025-09-30T20:03:53.133Z","0.0.5":"2025-09-30T20:09:24.470Z","0.0.6":"2025-10-28T03:52:47.634Z","0.0.7":"2025-11-06T18:16:37.912Z","0.0.8":"2025-11-06T18:28:59.981Z","0.0.9":"2026-02-11T21:40:38.650Z","0.1.0":"2026-07-24T20:26:42.787Z"},"bugs":{"url":"https://github.com/AB6162/shy-mouse-playwright/issues"},"author":{"name":"AB6162"},"license":"MIT","homepage":"https://github.com/AB6162/shy-mouse-playwright#readme","keywords":["node.js","nodejs","mouse","javascript","npm","package","playwright","patchright","automation","bot","bots","stealth","webautomation","webscraping","web-auto","webdriver"],"repository":{"type":"git","url":"git+https://github.com/AB6162/shy-mouse-playwright.git"},"description":"A simple npm package to humanize mouse movements in Playwright or Patchright.","maintainers":[{"name":"ab6162","email":"alejandro.blackburn@gmail.com"}],"readme":"#  Shy Mouse Playwright\r\n\r\nA simple npm package to humanize mouse movements in Playwright or Patchright.\r\n\r\nA version for **Puppeteer** is currently being **developed** and will be released once it has passed all tests.\r\n\r\n\r\n\r\n##  Install\r\n\r\n\r\n\r\n###  Package managers\r\n\r\nnpm: `npm i @ab6162/shy-mouse-playwright`\r\n\r\n##  Usage\r\n\r\nUsing this package is quite easy; you just need to call it and pass a Page. Available methods:\r\n\r\nNote: methods expect Playwright Locators, not selector strings.\r\n\r\n- **`click(element, options)`** - Click on a Playwright Locator with human-like movement\r\n- **`move(options)`** - Generate a random movement across the viewport\r\n- **`scrollToElement(element, options)`** - Scroll to bring a Locator into view (also called automatically by click)\r\n- **`moveToPosition(x, y, options)`** - Move to specific coordinates\r\n- **`getMovementStats()`** - Get statistics about movement patterns (useful for debugging)\r\n- **`reset()`** - Reset internal state (fatigue, attention span, motion tracking)\r\n\r\nAll movements include realistic timing, velocity profiles, micro-corrections, and other human behavior patterns.\r\n\r\nThis small package was created with the aim of avoiding detection by non-human movements as much as possible. Combined with Patchright, it becomes a powerful automation tool.\r\n\r\nThe package doesn't collect any kind of data, which you can see in the source code published in [GitHub](https://github.com/ab6162/shy-mouse-playwright)\r\n\r\n\r\n\r\nHere's a quick example:\r\n\r\n``` javascript\r\nconst { chromium } = require('patchright');\r\nconst MouseHelper = require('@ab6162/shy-mouse-playwright');\r\n\r\n(async () => {\r\n\tconst browser = await chromium.launch({ headless: false });\r\n\tconst page = await browser.newPage();\r\n\tawait page.goto('https://example.com');\r\n\r\n\tconst mouseHelper = new MouseHelper(page);\r\n\r\n\t// Click on an element (automatically scrolls if needed)\r\n\tconst button = page.locator('button#myButton');\r\n\tawait mouseHelper.click(button, {\r\n\t\tclickPadding: 0.7,\r\n\t\tviewPadMin: 30,\r\n\t\tviewPadMax: 80\r\n\t});\r\n\r\n\t// Random movement\r\n\tawait mouseHelper.move();\r\n\r\n\t// Scroll to element without clicking\r\n\tconst element = page.locator('footer');\r\n\tawait mouseHelper.scrollToElement(element, {\r\n\t\ttargetPosition: 'center',\r\n\t\tovershootProb: 0.2\r\n\t});\r\n\r\n\t// Move to specific coordinates\r\n\tawait mouseHelper.moveToPosition(500, 300);\r\n\r\n\t// Another click\r\n\tconst nextLink = page.locator('a#nextLink');\r\n\tawait mouseHelper.click(nextLink);\r\n\r\n\t// Get stats (optional, for debugging)\r\n\tconst stats = mouseHelper.getMovementStats();\r\n\tif (stats) {\r\n\t\tconsole.log('Average speed:', stats.averageSpeed.toFixed(2));\r\n\t\tconsole.log('Fatigue level:', stats.fatigueLevel);\r\n\t}\r\n\r\n\tawait browser.close();\r\n})();\r\n\r\n```\r\n\r\n##  How it works\r\n\r\nThe core idea is simple: make mouse movements that look and feel human, not robotic.\r\n\r\nMost bots get caught because their movements are too perfect or follow weird patterns. This package tackles that by combining several techniques that mimic how humans actually move a mouse.\r\n\r\n**The main stuff:**\r\n\r\nFirstly, it uses **Bezier curves** to create smooth paths, but not just any curves - the control points are randomized with realistic deviations so each movement is unique. Humans don't move in straight lines or perfect arcs.\r\n\r\n**Fitts's Law** is critical here. It's basically a formula that predicts how long it takes humans to move to a target based on distance and target size. The package calculates proper timing (MT = a + b·ID) so movements don't happen impossibly fast or unnaturally slow.\r\n\r\nBeyond that, there's a bunch of smaller details that add up:\r\n- **Velocity profiles** follow a bell curve (fast in the middle, slower at start/end), not constant speed\r\n- **Overshoot and correction** - sometimes humans go a bit past the target and correct back\r\n- **Fatigue simulation** - after many actions, movements get slightly slower and less precise\r\n- Mouse **polling rate variation** (60-144Hz) with temporal correlation, not fixed intervals\r\n- **Jerk smoothing** - acceleration changes are gradual, not instant\r\n- Random **micro-corrections** and **hesitations** during movement\r\n- **Perlin noise** for natural entropy instead of pure random jitter\r\n\r\nThe scroll behavior also mimics humans: logarithmic deceleration, occasional overshoots, variable step sizes, and small mouse movements while scrolling.\r\n\r\nEverything has some randomness but it's **constrained randomness** - the kind of variation you'd see in real human behavior, not chaos. The goal is to pass both simple heuristics and more sophisticated ML-based detection systems.\r\n\r\nObviously nothing is 100% undetectable, but this makes it significantly harder to distinguish from real users compared to basic automation.\r\n\r\n##  Issues\r\n\r\nIf there are any bugs, questions or improvements open a new issue\r\n\r\n\r\n##  License\r\n\r\nMIT","readmeFilename":"README.md"}