{"id":20942512,"url":"https://github.com/userexistserror/webshooter","last_synced_at":"2025-08-02T05:33:40.589Z","repository":{"id":118992025,"uuid":"143443874","full_name":"UserExistsError/webshooter","owner":"UserExistsError","description":"Inspired by gowitness and EyeWitness","archived":false,"fork":false,"pushed_at":"2025-03-11T16:12:28.000Z","size":549,"stargazers_count":14,"open_issues_count":1,"forks_count":2,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-07-11T18:48:47.242Z","etag":null,"topics":["http-scans","web-screenshot"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/UserExistsError.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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,"zenodo":null}},"created_at":"2018-08-03T15:27:39.000Z","updated_at":"2025-03-11T16:12:38.000Z","dependencies_parsed_at":"2024-02-14T20:18:25.116Z","dependency_job_id":"03a0194c-0d10-4d1a-9033-382f90b89510","html_url":"https://github.com/UserExistsError/webshooter","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/UserExistsError/webshooter","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/UserExistsError%2Fwebshooter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/UserExistsError%2Fwebshooter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/UserExistsError%2Fwebshooter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/UserExistsError%2Fwebshooter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/UserExistsError","download_url":"https://codeload.github.com/UserExistsError/webshooter/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/UserExistsError%2Fwebshooter/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268339399,"owners_count":24234544,"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-08-02T02:00:12.353Z","response_time":74,"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":["http-scans","web-screenshot"],"created_at":"2024-11-18T23:27:53.920Z","updated_at":"2025-08-02T05:33:40.556Z","avatar_url":"https://github.com/UserExistsError.png","language":"Python","readme":"# webshooter\n\nTake screenshots of web sites and generate an HTML report. This tool waits a specified period to allow the page to render before taking the screenshot. Report sorts screenshots by page title and server header.\n\n![Report](docs/screenshots/tiles-med.png)\n\n## Installation\n\n### pip\n\nYou can install with `pip` after cloning the repository. It's recommended to install in a virtual environment.\n\nOptional: Create a virtual environment first:\n\n```\npython3 -m venv \"${HOME}/.webshooter\"\nsource \"${HOME}/.webshooter/bin/activate\"\n```\n\nInstall with `pip`:\n\n```\npip install .\n```\n\nThis will check for a nodejs install and install binaries from https://nodejs.org/ if needed. Nodejs and all dependencies will\nbe installed in the `site-packages` directory, and will be removed when you uninstall webshooter.\n\n### Manual Install\n\nRequires python3.9+, nodejs, and npm. Puppeteer is used for rendering pages and taking screenshots. Jinja2 is used for html and JavaScript templating.\n\nGet the latest Node LTS from here https://nodejs.org/ and extract it. Add the bin directory (contains node and npm) to your PATH. Testing has been done\nwith Node 16.x.\n\nInstall remaining requirements:\n\n```\nnpm install\npip3 install -r requirements.txt\n```\n\n`npm install` will create a `node_modules/` directory with its dependencies. Webshooter needs to be able to find this directory when it runs. You\ncan run webshooter in the same directory you ran `npm install` from (or a subdirectory), or you can specify `NODE_PATH=/path/to/node_modules` when running.\n\n### Docker\n\nInstead of manually installing dependencies, you can just build from the included Dockerfile with:\n\n```\ndocker build -t webshooter .\n```\n\nThen run with:\n\n```\ndocker run --rm -it -p 127.0.0.1:8000:8000/tcp webshooter\n```\n\nAfter generating a report, you can access it outside the container with:\n\n```\npython -m http.server 8000\n```\n\nBrowse to http://localhost:8000/page.0.html from your host to access the report.\n\n## Usage\n\n```\nwebshooter.py --session myscreens scan [-u URL_FILE] [-x NMAP_XML] [URL [... URL]]\n```\nThis will grab screenshots of all supplied urls. The session file can be used to resume a scan and generate a report. This command can be run multiple times with new urls to add. Once a url is added, it will be remembered in the session file. A screenshot will be attempted once for each url. Failed screenshots can be reattempted with `--retry`.\n\nYou can also provide a file with 1 url per line and pass it in with `-u`. Positional arguments are also treated as urls. In addition to urls, you can specify HOST[:PORT]. If the port is not specified in the url, it is inferred from the scheme. If no scheme or port is given, http/80 and https/443 are both attempted.\n\nAn nmap xml file can also be used with `-x`. Open ports that are considered HTTP (80,8080) or HTTPS (443,8443) will be scanned. You can override these ports with `--ports-http` and `--ports-https`. `--all-open` will treat all open ports as http/s and overrides `--ports-http` and `--ports-https`. Note that `--ports-http[s]` only applies to nmap xml.\n\nRecommended usage is to provide an nmap xml file generated like so:\n```\nnmap -p 80,443,8000,8080,8443,8888 -oX http.xml ...\n```\nAdditional HTTP ports can be added.\n\n## Report\n\n```\nwebshooter.py --session myscreens report\n```\nThe default report generates a tile view which doesn't require vertical scrolling. Use `--column` to get a less dense report with 1 screenshot per row. Screens per page can be set with the `-p` option. Navigate pages using the navigation bar or by using the left and right arrow keys. Screenshots are sorted by page title (or Server header if no title). The file `index.html` is generated with the report that links to the first instance of each unique page title.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fuserexistserror%2Fwebshooter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fuserexistserror%2Fwebshooter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fuserexistserror%2Fwebshooter/lists"}