Scylla is an intelligent automation tool designed to streamline the job application process on various recruitment platforms. It automates browsing job listings, evaluating job authenticity using a Large Language Model (LLM), and initiating communication with HR for legitimate opportunities. The system is built with a modular architecture, allowing for easy extension to new job platforms.
The following table lists the job recruitment platforms currently supported by Scylla:
| Platform | Status |
|---|---|
BOSS直聘 |
✅ |
智联招聘 |
WIP |
51 Job (前程无忧) |
WIP |
-
Python >= 3.12: Ensure you have a compatible Python version installed.
-
uv(recommended) orpip: For dependency management. -
Playwright Browsers: Playwright requires browser binaries. Install them after installing the Python package:
playwright install
-
Clone the repository:
git clone https://github.com/0x0501/Scylla.git cd scylla -
Install dependencies: Using
uv(recommended for speed and efficiency):uv sync
Or using
pip(ifuvis not preferred or available):pip install -r requirements.txt # You might need to generate this from pyproject.toml
Create a .env file in the root directory of the project with the following environment variables:
OPENAI_API_KEY="your_openai_api_key_here"
OPENAI_BASE_URL="https://api.openai.com/v1" # Or your custom LLM endpoint
LLM_MODEL_NAME="o1" # Or your preferred LLM model nameOPENAI_API_KEY: Your API key for accessing the OpenAI API or a compatible LLM service.OPENAI_BASE_URL: The base URL for your LLM API. Defaults to OpenAI's API.LLM_MODEL_NAME: The specific LLM model to be used for job authenticity evaluation.
To run the automation for a specific platform (e.g., "boss"):
python main.pyBy default, main.py is configured to run the "boss" platform in non-headless mode (browser UI visible). You will be prompted to log in via QR code if no existing session is found.
Currently, the platform and headless mode are hardcoded in main.py. Future versions could introduce command-line arguments for dynamic selection:
# Example of how it might be run with arguments in the future
# python main.py --platform boss --headlessTo add support for a new job recruitment platform:
-
Create a new Python file (e.g.,
my_new_platform.py) in theplatforms/directory. -
In
my_new_platform.py, create a class that inherits fromcore.base_platform.BasePlatform. -
Implement all abstract methods defined in
BasePlatform:login,is_logged_in,logout,configure_network_interception,run, andchat_with_hr. -
Register your new platform in
main.py(or a dedicated configuration file if implemented):from core.manager import PlatformManager PlatformManager.register_platform("my_new_platform_name", "platforms.my_new_platform")
Scylla's architecture is designed for modularity and extensibility:
graph TD
A[main.py] --> B(PlatformManager)
B --> C{Platform Specific Logic}
C --> D[platforms/boss.py]
A --> E(BrowserManager)
E --> F[Playwright Browser]
C --> G(BasePlatform)
G --> H[LLM Evaluation]
G --> I[Job Recording to CSV]
H --> J[OpenAI API]
G --> K[Network Interception]
K --> F
D --> G
main.py: The entry point of the application, responsible for initializing thePlatformManagerandBrowserManager, and orchestrating the automation flow for a selected platform.core/: Contains core functionalities and abstract classes:base_platform.py: Defines theBasePlatformabstract class, which all platform-specific implementations must inherit from. It includes common methods for login, logout, network interception, job evaluation (evaluateusing LLM), and job recording (recordto CSV).browser.py: Manages Playwright browser instances, contexts, and pages, including configuration and anti-bot measures.manager.py: Handles the dynamic loading and management of different platform implementations.base_job_meta_description.pyandbase_record.py: Data models for job metadata and recorded job details.utils.py: Utility functions (not explicitly reviewed but assumed for common tasks).
platforms/: Houses concrete implementations for each job recruitment platform (e.g.,boss.pyfor Zhipin.com). These classes extendBasePlatformand implement platform-specific interactions.cookies/: Directory for storing browser session cookies to maintain login states.logs/: Directory for storingrecords.csv, which logs all processed job information.
Contributions are welcome! Please feel free to submit issues, pull requests, or suggest improvements.
This project is licensed under the MIT License.