From 4bae8808302f445c9f312d51e751b8b8af63bfd5 Mon Sep 17 00:00:00 2001 From: nayandas69 Date: Tue, 14 Jan 2025 18:55:40 +0600 Subject: [PATCH] Rule 34 --- .github/CODE_OF_CONDUCT.md | 33 +++ .github/CONTRIBUTING.md | 29 +++ .github/ISSUE_TEMPLATE/bug_report.md | 25 ++ .github/ISSUE_TEMPLATE/feature_request.md | 17 ++ .github/PULL_REQUEST_TEMPLATE.md | 26 ++ .github/SECURITY.md | 76 ++++++ .github/dependabot.yml | 20 ++ .github/workflows/python-ci.yml | 51 ++++ .gitignore | 41 ++++ CHANGELOG.md | 50 ++++ LICENSE | 21 ++ README.md | 111 +++++++++ assets/icon.ico | Bin 0 -> 432254 bytes main.py | 285 ++++++++++++++++++++++ requirements.txt | 4 + setup.py | 52 ++++ version.txt | 2 + whats_new.txt | 20 ++ 18 files changed, 863 insertions(+) create mode 100644 .github/CODE_OF_CONDUCT.md create mode 100644 .github/CONTRIBUTING.md create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 .github/SECURITY.md create mode 100644 .github/dependabot.yml create mode 100644 .github/workflows/python-ci.yml create mode 100644 .gitignore create mode 100644 CHANGELOG.md create mode 100644 LICENSE create mode 100644 README.md create mode 100644 assets/icon.ico create mode 100644 main.py create mode 100644 requirements.txt create mode 100644 setup.py create mode 100644 version.txt create mode 100644 whats_new.txt diff --git a/.github/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..4ece495 --- /dev/null +++ b/.github/CODE_OF_CONDUCT.md @@ -0,0 +1,33 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +We, the members, contributors, and maintainers of this project, pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to a positive environment include: +- Using welcoming and inclusive language +- Being respectful of differing viewpoints and experiences +- Gracefully accepting constructive criticism +- Focusing on what is best for the community +- Showing empathy toward other community members + +Examples of unacceptable behavior by participants include: +- The use of sexualized language or imagery and unwelcome sexual attention or advances +- Trolling, insulting/derogatory comments, and personal or political attacks +- Public or private harassment +- Publishing others' private information, such as a physical or electronic address, without explicit permission +- Other conduct which could reasonably be considered inappropriate in a professional setting + +## Enforcement + +Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. + +## Reporting + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at [nayanchandradas@hotmail.com]. All complaints will be reviewed and investigated, and will result in a response that is deemed necessary and appropriate to the circumstances. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org/), version 2.0, available at https://www.contributor-covenant.org/version/2/0/code_of_conduct.html diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md new file mode 100644 index 0000000..906bc6e --- /dev/null +++ b/.github/CONTRIBUTING.md @@ -0,0 +1,29 @@ +# Contributing to Auto Website Visitor + +Thank you for your interest in contributing to **Auto Website Visitor**! + +## How to Contribute + +### Reporting Issues + +If you find a bug or have an issue, please report it via GitHub Issues. Make sure to include a detailed description and steps to reproduce the issue. For feature requests, please use the Feature Request template. + +### Submitting Code + +1. Fork the repository and create a new branch (`git checkout -b feature-branch`). +2. Make your changes in this branch. +3. Commit your changes (`git commit -am 'Add new feature'`). +4. Push your branch to your fork (`git push origin feature-branch`). +5. Open a Pull Request to the `main` branch of the original repository. + +### Code Style + +- Follow the [PEP 8](https://www.python.org/dev/peps/pep-0008/) coding style for Python code. +- Ensure that your code is clean and well-documented. +- Write tests for your code (if applicable). + +## Code of Conduct + +Please read and follow our [Code of Conduct](CODE_OF_CONDUCT.md). + +We welcome contributions and look forward to seeing your improvements to the project! diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..2aebdec --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,25 @@ +## Bug Report + +**Describe the bug** + +A clear and concise description of what the bug is. + +**To Reproduce** + +Steps to reproduce the behavior: +1. Step 1 +2. Step 2 +3. Step 3 +4. See error + +**Expected behavior** + +A clear and concise description of what you expected to happen. + +**Environment:** +- OS: [e.g., Windows 10, Ubuntu 20.04] +- Python version: [e.g., 3.9] +- Version of Auto Website Visitor: [e.g., v0.0.1] + +**Logs** +- Please provide any relevant logs or screenshots that can help us understand the issue. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000..a948b0d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,17 @@ +## Feature Request + +**Is your feature request related to a problem? Please describe.** + +A clear and concise description of what the problem is. Ex. I'm always frustrated when... + +**Describe the solution you'd like** + +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** + +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** + +Add any other context or screenshots about the feature request here. diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..360d015 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,26 @@ +## Description + +**Please describe the changes made and why they are necessary.** + +## Related Issue + +**Please link any related issues (e.g., Fixes #123).** + +## Type of Change + +- [ ] Bug fix +- [ ] New feature +- [ ] Documentation update +- [ ] Other (please describe) + +## Checklist + +- [ ] I have followed the project's code of conduct. +- [ ] I have written tests for my changes. +- [ ] My code is clean and well-commented. +- [ ] I have updated the documentation (if needed). +- [ ] I have tested my changes and they work as expected. + +## Additional Information + +**Is there any other context you'd like to provide?** diff --git a/.github/SECURITY.md b/.github/SECURITY.md new file mode 100644 index 0000000..2f37443 --- /dev/null +++ b/.github/SECURITY.md @@ -0,0 +1,76 @@ +# ๐Ÿ”’ **SECURITY POLICY** ๐Ÿ›ก๏ธ + +Hey there, awesome devs! ๐Ÿ‘‹ Weโ€™re super hyped that youโ€™re vibing with **Auto Website Visitor** ๐Ÿš€. Letโ€™s keep this party secure for everyone! Below are the deets you need to know about reporting security issues and playing it safe. ๐Ÿ’ปโœจ + +--- + +## ๐Ÿ” **Supported Versions** + +We only drop security updates for the **latest version** of the project. +If youโ€™re chillinโ€™ with an old version, itโ€™s time to glow up! โฌ†๏ธโœจ + +| Version | Supported? ๐Ÿ“ข | +|---------|---------------| +| 0.0.2 | โœ… Yessir! | +| 0.0.1 | โŒ Nah, time to upgrade! | + +--- + +## ๐Ÿ†˜ **Found a Bug or Vulnerability?** ๐Ÿ‘€๐Ÿ› + +Uh-oh! If youโ€™ve stumbled upon a security issue, donโ€™t panic ๐Ÿ˜…โ€”weโ€™ve got your back: + +1. **Slide into our inbox**: + ๐Ÿ“ฉ Email us at **nayanchandradas@hotmail.com** ASAP. + (Pro tip: Keep it secret, keep it safe. No public posting! ๐Ÿ”) + +2. **Spill the tea โ˜•**: + - Whatโ€™s the issue? + - Steps to reproduce it (bonus points for screenshots or logs ๐Ÿ“ธ). + - Why do you think itโ€™s a security threat? ๐Ÿ‘€ + +3. **Hold tight, fam**: + Weโ€™ll hit you back within **48 hours**โ€”max. Pinky promise! ๐Ÿคž + +--- + +## โš ๏ธ **Big Fat Disclaimer** + +๐Ÿšจ **Listen up, fam!** ๐Ÿšจ +This tool is strictly for **personal use ONLY**. Weโ€™re all about ethical vibes here, so: + +- ๐Ÿšซ **Donโ€™t misuse** this project for anything illegal, shady, or spammy. +- ๐Ÿง  **Think responsibly**: Use it to test your own stuff, learn, or vibe with analyticsโ€”**not** to cause chaos. + +If you break these rules and something goes sideways, itโ€™s all on you. **We are NOT liable** for any trouble you get into, fam. Be chill, keep it legal, and donโ€™t summon the internet police. ๐Ÿš” + +--- + +## ๐Ÿ‘‘ **Our Commitment to Security** โœจ + +We take security **mad seriously** ๐Ÿซก. Hereโ€™s how we roll: +- Fixing vulnerabilities FAST AF. ๐Ÿ› ๏ธ +- Keeping you updated ๐Ÿ—ž๏ธ if things go south. + +Weโ€™re here to vibe with you to keep this project **safe and sound** for everyone. ๐Ÿ’™ + +--- + +## ๐Ÿ› ๏ธ **Security Besties** + +We โค๏ธ these tools to keep it tight: +- **Dependabot**: Spotting those sus dependencies. ๐Ÿ•ต๏ธโ€โ™‚๏ธ +- **Bandit** and **PyUp**: Regular audits to stay on point. + +Got a better tool idea? HMU! ๐Ÿ’Œ + +--- + +## ๐Ÿ–ค **Thanks for Being a Security Superhero!** ๐Ÿ™Œ + +You = the real MVP ๐Ÿฆธโ€โ™‚๏ธ๐Ÿฆธโ€โ™€๏ธ for helping make this project better and safer. + +Letโ€™s build something amazing **together** and keep the internet safe for all the homies! ๐Ÿ’ช๐Ÿ”ฅ + +Stay secure, +**Team Auto Website Visitor** โœจ diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..f8e019a --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,20 @@ +version: 2 +updates: + # Python dependencies updates + - package-ecosystem: "pip" + directory: "/" + schedule: + interval: "weekly" # Check for updates weekly (can be "daily", "weekly", or "monthly") + day: "sunday" # Specify the day updates are checked + ignore: + - dependency-name: "selenium" # Ignore specific package updates + versions: ["<4.0.0"] # Ignore versions below specified + # GitHub Actions updates + - package-ecosystem: "github-actions" + directory: "/" # Check for updates in the root directory + schedule: + interval: "weekly" # Check for updates weekly + day: "monday" # Day updates are checked (optional) + ignore: + - dependency-name: "actions/checkout" # Ignore specific Actions updates + versions: ["<3.0.0"] # Ignore versions below specified diff --git a/.github/workflows/python-ci.yml b/.github/workflows/python-ci.yml new file mode 100644 index 0000000..0504948 --- /dev/null +++ b/.github/workflows/python-ci.yml @@ -0,0 +1,51 @@ +name: Python Package CI and Publish + +on: + push: + branches: + - main + pull_request: + branches: + - main + +jobs: + build-and-publish: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.9" + + - name: Install build tools + run: python -m pip install --upgrade pip setuptools wheel twine requests + + - name: Build the package + run: | + python setup.py sdist bdist_wheel + + - name: Check if version exists on PyPI + id: check-version + run: | + PACKAGE_NAME="auto-website-visitor" + VERSION=$(python setup.py --version) + STATUS_CODE=$(curl -o /dev/null -s -w "%{http_code}" https://pypi.org/project/$PACKAGE_NAME/$VERSION/) + if [ "$STATUS_CODE" -eq 200 ]; then + echo "The version $VERSION already exists on PyPI. Skipping upload." + echo "upload_required=false" >> $GITHUB_ENV + else + echo "Version $VERSION is not published on PyPI. Proceeding with upload." + echo "upload_required=true" >> $GITHUB_ENV + fi + + - name: Publish to PyPI + if: env.upload_required == 'true' + env: + TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }} + TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }} + run: | + python -m twine upload dist/* diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8dbed5a --- /dev/null +++ b/.gitignore @@ -0,0 +1,41 @@ +# Python bytecode files +*.pyc +*.pyo +*.pyd +__pycache__/ + +# Virtual environment directories +.venv/ + +# Windows system files +Thumbs.db + +# Logs +*.log + +# Distribution / packaging +*.egg +*.egg-info/ +dist/ +build/ +*.tar.gz +*.zip + +# PyInstaller files +*.spec + +# Test-related files +nosetests.xml +coverage.xml +*.cover +*.hypothesis/ + +# Jupyter Notebook checkpoints +.ipynb_checkpoints/ + +# Environment variable files +.env + +# Other +*.bak +*.tmp diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..38dabeb --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,50 @@ +# ๐Ÿ“ **Change Log** โœจ + +> **Keep up with the glo-ups, bug fixes, and fresh vibes in every version!** ๐Ÿ”ฅ + +--- + +## **[0.0.2]** โ€“ *2025-01-14* + +### ๐ŸŽ‰ **Major Glow-Up Alert!** ๐Ÿš€ +Hereโ€™s whatโ€™s popping in version **0.0.2**: + +### ๐ŸŒŸ **New Features:** +- **โ™พ๏ธ Unlimited Visits Mode**: Want endless visits? Now you can set `visit count = 0` and chill while it keeps going. +- **Proxy Validator**: No more headaches! We double-check your proxy before startingโ€”just clean vibes only. ๐Ÿงน๐Ÿ”’ +- **Driver Cache Rework**: Tidy gang approved! Driver files now live in `~/.browser_driver_cache` to reduce mess. ๐Ÿ—„๏ธ + +### โšก **Improved Realness:** +- **Auto-Reconnect**: Got disconnected? Donโ€™t stressโ€”this update reboots like a champ when youโ€™re back online. ๐Ÿ”„๐Ÿ’ป +- **Better Logs:** Say hello to polished, easy-to-read logs that give off real organized energy. ๐Ÿ“โœจ +- **Minimum Interval Timer:** Spamming? Nah. We made sure your intervals are set to at least **5 seconds**โ€”go responsibly. โณ๐Ÿ›‘ + +### ๐Ÿ› **Bugs That Got Yeeted:** +- Proxy setup for **Firefox**? Fixed. No more clunky configs. ๐ŸฆŠ +- Tweaked **headless mode** for smoother operation. Now crash-free. ๐Ÿ‘ป +- Squashed interval bugs to stop accidental chaos. ๐Ÿ’ฅ + +--- + +## **[0.0.1]** โ€“ *2025-01-12* ๐ŸŽ‰ + +### ๐ŸŒŸ **OG Vibes โ€“ First Release Ever!** ๐ŸŽŠ +Where it all started! Hereโ€™s what we shipped on **Day One**: + +### ๐Ÿ’Ž **Core Features:** +- Multi-browser support for **Chrome** and **Firefox**. +- Headless mode to keep things lowkey. ๐Ÿคซ +- Manual visit count and interval setupsโ€”youโ€™re in full control. ๐ŸŽ›๏ธ +- Logging system to keep tabs on what went down. ๐Ÿ“ +- Fully interactive CLI for an easy-peasy user experience. ๐Ÿ™Œ + +--- + +## **Stay Tuned for More Magic** โœจ + +Weโ€™re hyped to keep improving this tool, squashing bugs, and adding rad new features. Got feedback or a bug report? HMU anytimeโ€”weโ€™re all ears! ๐Ÿ’Œ + +--- + +**Peace and Good Vibes,** +๐Ÿ’– **Team Auto Website Visitor** diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..87e2d87 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 nayandas69 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..902f817 --- /dev/null +++ b/README.md @@ -0,0 +1,111 @@ +# ๐ŸŒ Auto Website Visitor + +Welcome to **Auto Website Visitor**! ๐Ÿš€ This is your go-to tool to automate website visits effortlessly. Whether you're testing your siteโ€™s performance, checking analytics, or just having some fun, this tool has got you covered. Built for Windows (.exe) users and available via `pip` for Python enthusiasts. Let's dive in! ๐ŸŒŸ + +![GitHub Stars](https://img.shields.io/github/stars/nayandas69/auto-website-visitor?style=flat-square&color=yellow&logo=github&logoColor=white) +![GitHub Forks](https://img.shields.io/github/forks/nayandas69/auto-website-visitor?style=flat-square&color=brightgreen&logo=github&logoColor=white) +![GitHub Issues](https://img.shields.io/github/issues/nayandas69/auto-website-visitor?style=flat-square&color=red&logo=github&logoColor=white) +![Discussions](https://img.shields.io/github/discussions/nayandas69/auto-website-visitor?style=flat-square&color=cyan&logo=discourse&logoColor=white) +![Workflow Status](https://img.shields.io/github/actions/workflow/status/nayandas69/auto-website-visitor/python-ci.yml?style=flat-square&color=4DB6AC&logo=github) +![Open Source](https://badges.frapsoft.com/os/v1/open-source.svg?v=103) +![PyPI Version](https://img.shields.io/pypi/v/auto-website-visitor?style=flat-square&color=00C853&logo=pypi) +![Python Version](https://img.shields.io/pypi/pyversions/auto-website-visitor?style=flat-square&color=42A5F5&logo=python) +![PyPI Downloads](https://static.pepy.tech/badge/auto-website-visitor/month?style=flat-square&color=5C6BC0) +![Total Downloads](https://static.pepy.tech/badge/auto-website-visitor?style=flat-square&color=8E24AA) + +## ๐Ÿ”ฅ Features + +- ๐Ÿ’ป **Cross-Browser Support**: Works seamlessly with Chrome and Firefox. +- ๐Ÿ•ถ๏ธ **Headless Mode**: Run it in stealth mode without opening the browser. +- ๐Ÿ•’ **Scheduling**: Automate visits at custom intervals. +- ๐ŸŒ **Proxy Support**: Browse like a ninja with proxy setup. +- ๐Ÿ“ˆ **Logs**: Keep track of every visit with detailed logs. +- ๐Ÿš€ **Frequent Updates**: Stay updated with the latest features. + +--- + +## ๐ŸŽฏ How to Use + +### For Windows (.exe): +1. **Download the .exe** file from the [latest release](https://github.com/nayandas69/auto-website-visitor/releases/latest). +2. Run the file and follow the CLI prompts. +3. Sit back and let the tool handle everything! ๐Ÿ’ผ + +### For Python Users (via pip): +1. Install the package: + ```bash + pip install auto-website-visitor + ``` +2. Run it directly in Python: + ```bash + python -m auto-website-visitor + ``` +3. Enter the details, and boom โ€“ it's running! ๐Ÿš€ + +--- + +## ๐Ÿ› ๏ธ Installation + +**Windows Users:** +- Download the `.exe` file from the [Releases Page](https://github.com/nayandas69/auto-website-visitor/releases). + +**Python Users:** +- Install via pip: + ```bash + pip install auto-website-visitor + ``` + +--- + +## ๐Ÿ”ง Requirements + +- Python 3.7+ +- Google Chrome or Firefox (latest versions). + +--- + +## ๐Ÿ›ก๏ธ How It Works + +1. Launch the app. +2. Enter: + - Website URL ๐ŸŒ + - Number of visits ๐Ÿ“Š + - Interval time (in seconds) โณ + - Browser preference (Chrome/Firefox) ๐Ÿ” + - Proxy settings (optional) ๐Ÿ•ต๏ธโ€โ™‚๏ธ +3. Hit enter and let the magic begin! ๐Ÿช„ + +--- + +## ๐Ÿค Contribute +Pull requests, issues, and feature suggestions are always welcome. Letโ€™s make this tool even cooler together! โœจ + +1. Fork the repo. +2. Create your feature branch: `git checkout -b feature/my-feature`. +3. Commit your changes: `git commit -m 'Add some feature'`. +4. Push to the branch: `git push origin feature/my-feature`. +5. Open a pull request. ๐Ÿ’Œ + +--- + +## ๐Ÿ“œ License + +This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details. + +--- + +## ๐Ÿง‘โ€๐Ÿ’ป Author +**Nayan Das** +- ๐ŸŒ [Website](https://socialportal.nayanchandradas.com) +- ๐Ÿ“ง [Email](mailto:nayanchandradas@hotmail.com) + +--- + +## ๐Ÿคฉ Show Some Love +If you found this project helpful, donโ€™t forget to: + +- โญ Star the repo! +- ๐Ÿ—จ๏ธ Join the [discussions](https://github.com/nayandas69/auto-website-visitor/discussions)! +- ๐Ÿ› ๏ธ Contribute your ideas! + +Letโ€™s make browsing automation easy and aesthetic for everyone! ๐Ÿ’– diff --git a/assets/icon.ico b/assets/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..fbc4a849163380b3f3fa33437debb9fcfd3384ec GIT binary patch literal 432254 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

?iw5We)OjHJ-$etr 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�W_*xi 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%0A)Mz@54SZ{~!&% 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 visit_count: + break + visit_number += 1 + print(f"{Fore.YELLOW}Waiting for {visit_interval_seconds} seconds before the next visit...\n") + time.sleep(visit_interval_seconds) + + print(f"{Fore.GREEN}Visit task completed successfully!") + driver.quit() + +@retry_on_disconnect +def check_for_update(): + """Check the GitHub API for the latest release and compare it with the user's current version.""" + print(f"{Fore.CYAN}Checking for updates...") + try: + response = requests.get(LATEST_RELEASE_API) + response.raise_for_status() + latest_release = response.json() + latest_version = latest_release.get("tag_name", "Unknown") + whats_new = latest_release.get("body", "No information provided.") + + print(f"{Fore.GREEN}Your Current Version: {CURRENT_VERSION}") + + if latest_version != CURRENT_VERSION: + print(f"{Fore.YELLOW}Latest Version Available: {latest_version}") + print(f"{Fore.BLUE}What's New:\n{Style.BRIGHT}{whats_new}\n") + + choice = input(f"{Fore.YELLOW}Would you like to update to the latest version? (y/n): ").strip().lower() + if choice == 'y': + print(f"{Fore.CYAN}Download the latest .exe file here: {REPO_URL}/releases/latest") + print(f"{Fore.CYAN}If using via pip, run: {Fore.GREEN}pip install --upgrade auto-website-visitor") + elif choice == 'n': + print(f"{Fore.YELLOW}New version {latest_version} is waiting for you!") + else: + print(f"{Fore.RED}Invalid choice. Please select 'y' or 'n'.") + else: + print(f"{Fore.GREEN}You are already using the latest version: {CURRENT_VERSION}") + except requests.RequestException as e: + print(f"{Fore.RED}Error while checking for updates: {e}") + +def show_help(): + """Display help information about the app.""" + print(f"{Fore.YELLOW}How to use this CLI Auto Website Visitor:") + print("1. Start - Initiates website visits based on your input.") + print("2. Check Update - Checks for the latest version from the repository.") + print("3. Help - Shows instructions for using the application.") + print("4. Exit - Exits the application with a goodbye message.") + print("Logs are maintained for your convenience.") + print("For issues or suggestions, please contact the author:") + +def exit_app(): + """Exit the program with a goodbye message.""" + print("Thank you for using Auto Website Visitor!") + print("For more information, visit the author's website.") + print("Goodbye!") + sys.exit(0) + +def start(): + """Start the visit task after gathering user inputs.""" + website_url, visit_count, visit_interval_seconds, browser, headless, proxy = get_user_input() + + print(f"\n{Fore.CYAN}You have entered the following details:") + print(f"Website URL: {Fore.GREEN}{website_url}") + print(f"Visit Count: {Fore.GREEN}{visit_count if visit_count != 0 else 'Unlimited'}") + print(f"Visit Interval: {Fore.GREEN}{visit_interval_seconds} seconds") + print(f"Browser: {Fore.GREEN}{browser}") + print(f"Headless Mode: {Fore.GREEN}{headless}") + if proxy: + print(f"Using Proxy: {Fore.GREEN}{proxy}") + else: + print(f"Not using any proxy.") + + confirmation = input(f"{Fore.YELLOW}Do you want to start with these details? (y/n): {Fore.WHITE}").strip().lower() + + if confirmation == "y": + print(f"{Fore.GREEN}Starting the visits...\n") + visit_task(website_url, visit_count, visit_interval_seconds, browser, headless, proxy) + else: + print(f"{Fore.RED}Operation aborted by user.") + +def main(): + """Main CLI menu for user to select options.""" + while True: + print(AUTHOR_INFO) + print(f"{Fore.CYAN}Please choose an option:") + print(f"{Fore.YELLOW}1. Start") + print(f"{Fore.YELLOW}2. Check Update") + print(f"{Fore.YELLOW}3. Help") + print(f"{Fore.YELLOW}4. Exit") + choice = input(f"{Fore.CYAN}Enter your choice (1/2/3/4): ") + + if choice == "1": + start() + elif choice == "2": + check_for_update() + elif choice == "3": + show_help() + elif choice == "4": + exit_app() + break + else: + print(f"{Fore.RED}Invalid choice, please try again.") + +if __name__ == "__main__": + main() diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..ba98b03 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,4 @@ +selenium>=4.0.0 +colorama>=0.4.4 +webdriver-manager>=3.8.0 +requests>=2.25.1 diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..c4f816e --- /dev/null +++ b/setup.py @@ -0,0 +1,52 @@ +from setuptools import setup, find_packages + +# Read the README.md for a long description +with open("README.md", "r", encoding="utf-8") as fh: + long_description = fh.read() + +setup( + name="auto-website-visitor", + version="0.0.2", + author="Nayan Das", + author_email="nayanchandradas@hotmail.com", + author_website="https://nayanchandradas.com", + description=("A CLI tool to automate website visits using Selenium and Python."), + long_description=long_description, + long_description_content_type="text/markdown", + url="https://github.com/nayandas69/auto-website-visitor", + project_urls={ + "Bug Tracker": "https://github.com/nayandas69/auto-website-visitor/issues", + "Documentation": "https://github.com/nayandas69/auto-website-visitor#readme", + "Source Code": "https://github.com/nayandas69/auto-website-visitor", + }, + classifiers=[ + "Programming Language :: Python :: 3", + "License :: OSI Approved :: MIT License", + "Operating System :: OS Independent", + ], + keywords=[ + "auto website visitor", "website visitor", "automation", "selenium", + "selenium python", "cli tool", "website traffic", "website automation", + ], + packages=find_packages(include=["*"], exclude=["tests*", "docs*"]), # Automatically finds packages in the root + py_modules=["main"], # Single file module + python_requires=">=3.6", # Python version requirement + install_requires=[ + "selenium>=4.0.0", + "colorama>=0.4.4", + "webdriver-manager>=3.8.0", + "requests>=2.25.1", + ], + entry_points={ + "console_scripts": [ + "auto-website-visitor=main:main", # Command to run the script + ], + }, + include_package_data=True, + zip_safe=False, + license="MIT", +) +# The setup() function is the core of the setup.py script. It takes a lot of arguments, but most of them are optional. +# Here's a breakdown of the arguments used in this script: +# name: The name of the package. This is what users will use to install the package using pip. +# version: The version of the package. This is used by pip to check for updates and dependencies. \ No newline at end of file diff --git a/version.txt b/version.txt new file mode 100644 index 0000000..5dc56ca --- /dev/null +++ b/version.txt @@ -0,0 +1,2 @@ +0.0.1 +0.0.2 diff --git a/whats_new.txt b/whats_new.txt new file mode 100644 index 0000000..0e30b03 --- /dev/null +++ b/whats_new.txt @@ -0,0 +1,20 @@ +# ๐Ÿš€ **What's New in Auto Website Visitor v0.0.2** + +๐ŸŒŸ **New Features:** +- **Infinite Visits Mode:** Hit those websites endlessly with a slick new "unlimited visits" option. No limits, no problems! โ™พ๏ธ +- **Proxy Validation:** Enter your proxy like a pro! We check for valid formats so you're not out here debugging typos. ๐Ÿ”’ +- **Custom Cache Directory:** Your drivers now have a cool hangout spot in `~/.browser_driver_cache`โ€”less clutter, more style. ๐Ÿ—„๏ธ + +๐Ÿ› ๏ธ **Improvements:** +- **Auto-Reconnect on Internet Drops:** Got bad Wi-Fi? No stressโ€”we've got a retry loop waiting to reconnect when youโ€™re back online. ๐Ÿ”„โšก +- **Logs Glow-Up:** Cleaner logs and fancy console output so youโ€™re always in the know about what's popping in the background. ๐Ÿ“โœจ +- **Better CLI UX:** Minimum intervals enforced (5 seconds), tighter validation, and crisp feedback keep everything user-friendly. โœ… + +๐Ÿ› **Fixes:** +- Squashed the bug where intervals could be *too short*โ€”keeping it chill with a solid minimum now. ๐Ÿšซโฑ๏ธ +- **Proxy Setup for Firefox:** Fixed flaky configsโ€”it's a seamless setup now! ๐ŸฆŠ๐Ÿ”— +- Cleared out weird edge case crashes when launching headless in certain scenarios. ๐Ÿ˜Œ๐Ÿ”ง + +--- + +**Ready to level up your automation game?** ๐Ÿ’ฅ Head over to the main menu and give it a whirl. Your vibe is set to power user now! ๐Ÿ™Œ