{"id":15527151,"url":"https://github.com/morkeleb/clickmonkey","last_synced_at":"2025-09-10T11:34:12.340Z","repository":{"id":57200217,"uuid":"73480562","full_name":"morkeleb/clickmonkey","owner":"morkeleb","description":"A monkey that clicks around on webpages doing random input style testing.","archived":false,"fork":false,"pushed_at":"2024-09-05T18:42:49.000Z","size":39,"stargazers_count":10,"open_issues_count":0,"forks_count":4,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-08-09T03:23:21.985Z","etag":null,"topics":["node-module","nodejs","selenium","selenium-webdriver","test-automation","testing","testing-tools"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/morkeleb.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-11-11T13:38:25.000Z","updated_at":"2024-09-05T18:42:53.000Z","dependencies_parsed_at":"2025-03-05T12:42:05.341Z","dependency_job_id":null,"html_url":"https://github.com/morkeleb/clickmonkey","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/morkeleb/clickmonkey","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/morkeleb%2Fclickmonkey","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/morkeleb%2Fclickmonkey/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/morkeleb%2Fclickmonkey/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/morkeleb%2Fclickmonkey/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/morkeleb","download_url":"https://codeload.github.com/morkeleb/clickmonkey/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/morkeleb%2Fclickmonkey/sbom","scorecard":{"id":660265,"data":{"date":"2025-08-11","repo":{"name":"github.com/morkeleb/clickmonkey","commit":"aeea622302f7392500c179a887e080caff483f30"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":1.3,"checks":[{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Code-Review","score":0,"reason":"Found 1/26 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":0,"reason":"license file not detected","details":["Warn: project does not have a license file"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 2 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"38 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-v88g-cgmw-v5xw","Warn: Project is vulnerable to: GHSA-93q8-gq69-wqmw","Warn: Project is vulnerable to: GHSA-fwr7-v2mv-hh25","Warn: Project is vulnerable to: GHSA-pp7h-53gx-mx7r","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275","Warn: Project is vulnerable to: GHSA-w573-4hg7-7wgq","Warn: Project is vulnerable to: GHSA-phwq-j96m-2c2q","Warn: Project is vulnerable to: GHSA-ghr5-ch3p-vcr6","Warn: Project is vulnerable to: GHSA-74fj-2j2h-c42q","Warn: Project is vulnerable to: GHSA-pw2r-vq6v-hr8c","Warn: Project is vulnerable to: GHSA-jchw-25xp-jwwc","Warn: Project is vulnerable to: GHSA-cxjh-pqwp-8mfp","Warn: Project is vulnerable to: GHSA-fjxv-7rqg-78g4","Warn: Project is vulnerable to: GHSA-6x33-pw7p-hmpq","Warn: Project is vulnerable to: GHSA-896r-f27r-55mw","Warn: Project is vulnerable to: GHSA-4xc9-xhrj-v574","Warn: Project is vulnerable to: GHSA-x5rq-j2xg-h7qm","Warn: Project is vulnerable to: GHSA-jf85-cpcp-j695","Warn: Project is vulnerable to: GHSA-p6mc-m468-83gw","Warn: Project is vulnerable to: GHSA-29mw-wpgm-hmr9","Warn: Project is vulnerable to: GHSA-35jh-r3h4-6jhm","Warn: Project is vulnerable to: GHSA-f8q6-p94x-37v3","Warn: Project is vulnerable to: GHSA-vh95-rmgr-6w4m","Warn: Project is vulnerable to: GHSA-xvch-5gv4-984h","Warn: Project is vulnerable to: GHSA-hrpp-h998-j3pp","Warn: Project is vulnerable to: GHSA-p8p7-x288-28g6","Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw","Warn: Project is vulnerable to: GHSA-52f5-9888-hmc6","Warn: Project is vulnerable to: GHSA-72xf-g2v4-qvf3","Warn: Project is vulnerable to: GHSA-3329-pjwv-fjpg","Warn: Project is vulnerable to: GHSA-p6j9-7xhc-rhwp","Warn: Project is vulnerable to: GHSA-89gv-h8wf-cg8r","Warn: Project is vulnerable to: GHSA-gcv8-gh4r-25x6","Warn: Project is vulnerable to: GHSA-gmv4-r438-p67f","Warn: Project is vulnerable to: GHSA-8h2f-7jc4-7m3m","Warn: Project is vulnerable to: GHSA-3vjf-82ff-p4r3","Warn: Project is vulnerable to: GHSA-g694-m8vq-gv9h"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-21T15:57:12.931Z","repository_id":57200217,"created_at":"2025-08-21T15:57:12.931Z","updated_at":"2025-08-21T15:57:12.931Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274455517,"owners_count":25288557,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-10T02:00:12.551Z","response_time":83,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["node-module","nodejs","selenium","selenium-webdriver","test-automation","testing","testing-tools"],"created_at":"2024-10-02T11:04:43.797Z","updated_at":"2025-09-10T11:34:12.313Z","avatar_url":"https://github.com/morkeleb.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ClickMonkey!\n\n\nClick Monkey is a self contained testing tool that will stress your webbased ui\nwith random clicks and input.\nTypically Click Monkey will find errors related to input validation.\n\nClick Monkey works just like a selenium test, except it never stops.\nIt simply keeps clicking random elements and inputing random data until you stop it.\n\nTo help the monkey find errors such as 500 and 404 status codes it will setup a\nlocal proxy to see the browsers errors and report if it finds any broken urls.\n\n## Getting started!\n\nRequirements:\n\n* JRE\n* Node 6.3+\n\nTo install your clickmonkey you use npm.\n\n```bash\nnpm install -G clickmonkey\n```\n\nYour clickmonkey needs a configuration file to point it to the right website.\nTo setup a configuration file you type\n\n```bash\nclickmonkey init\n```\n\nThis will create a file `clickmonkey.js` for you to configure.\nYou can specify a specific filename if you do not like the `clickmonkey.js`.\nThis also allows you to have several configurations stored on disc.\n\nThe configuration file should be self-explanatory, but here are the essentials.\n\n### Url\n\nYour configuration file must specify the url where the monkey will be unleashed.\n\n```javascript\n  // The absolute url to the website you want to unleash the monkey on goes here\n  url: 'your absolute url goes here  like http://google.com/'\n```\n\n### Intro\nMost pages worth testing requires a bit of wiggeling to get the monkey in the mood.\n\nTo do this you specify the `intro` in the configuration file.\n\n```javascript\nintro: (driver)=\u003e\n    driver.pause(1000).setValue('#user', 'Admin').pause(100).\n    setValue('#password', 'Admin').pause(100).click('#loginButton').pause(100),\n```\n\nThis intro waits a bit, enters a value into the `#user` field, then enters\nanother value into the `#password` field to then click hte `#loginButton`.\n\nIt is important that the intro returns the driver promise so that the monkey\ncan be unleashed once the intro is complete.\n\n### Fence\nTo contain the monkey to certain parts of your website you can specify a fence.\nTo define your fence you edit the fence part of the configuration\n\n```javascript\n  fence: {\n    blacklist: ['#/login'],\n    path: 'path of app to constrain clickmonkey too'\n  }\n```\n\nThe `blacklist` should be an array of pages the monkey should leave if it reaches.\nThe example above has a login page as a blacklist to capture when the monkey\naccedentilly logged itself out.\n\nYou can also specify a `path` in which you want to contain the monkey.\n\nIf the monkey goes outside it's fence, it will restart and go through the intro again.\n\n\n### Unleashing the monkey!\n\nTo let loose your monkey you run the unleash command. This is also the default,\nso you just have to type clickmonkey if you also use the default configuration file name.\n\n```\nclickmonkey\n```\n\nYou can give an additional input to the clickmonkey if you want to run a different configuration file.\n\n\n```\nclickmonkey [configuration file]\n```\n\nor\n\n```\nclickmonkey unleash [configuration file]\n```\n\nThe monkey will then:\n1. install selenium with the neccessary drivers.\n2. Start up a local proxy\n3. Open a browser with traffic going through said proxy\n4. Run the intro\n5. Start click and inputing random stuff\n\n## Know gotchas\n\n* The url needs to be the exact url to the page you want to unleash the monkey on. If the proxy hits a 302 redirect or similar the monkey will freak out because it cant find it's fence. See [Node Proxy issue 1030](https://github.com/nodejitsu/node-http-proxy/issues/1030)\n* Some pages keep an active request open to a server for different reasons (metrics most probably). This will cause the monkey to go really slow. There needs to be a list of urls in the config that the monkey shouldn't care about this is a feature needed in clickmonkey.\n* Atleast on Windows PowerShell the monkey can't display the console UI. It is displayed when you hit CTRL+C to stop the monkey. [Node Status issue 9](https://github.com/derrickpelletier/node-status/issues/9)\n\n## License\n\nMIT\n\n## Contributing\n\nIf you want to help out, thats great! Here are some guidelines:\n\n* Less is more\n  - I suspect that I've added more code than neccessary. The goal is to have\n    as litle code as possible, but yet have it be readable.\n\n    I've missed some places where I wrap a promise in another promise for example\n    where the wrapping could just be removed.\n\n    Let's help eachother become better developers by trying to reduce and clarify\n    the code.\n* Pull requests are fun\n  - Please issue pull requests! Just remember the guideline above.\n\n    You should expect discussions in the pull requests.\n    This is a learning experience, and is a vital part of getting a pull request accepted.\n* Promises\n  - The code uses promises extensivly, please respect that by doing so in issued pull requests.\n* The Monkey shouldn't stop\n  - It can pause for a while, and then continue, but it shouldn't stop.\n\n    If you find a place where it stops I appreciate a heads up, or even better one of them pull requests that fixes things.\n\n\n## Release history\n\n* 0.6 support for single inputs, better button detection and kills selenium on exit\n* 0.5 minor bugfixes after testing on Windows\n* 0.4 fix with for verions being outdated as chrome autoupdates.\n* 0.3 command line switches\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmorkeleb%2Fclickmonkey","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmorkeleb%2Fclickmonkey","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmorkeleb%2Fclickmonkey/lists"}