# get_jobs: a Java and Playwright bot that auto-applies on Boss, 51job, Liepin and Zhilian

> loks666/get_jobs is a Spring Boot 3.5 and JDK 21 desktop tool that drives job boards with Patchright and writes results to a SQLite file. It is aimed at Chinese-market job seekers, and its own README recommends using it only as a fallback for Boss.

**loks666/get_jobs** — 💼【AI找工作助手】全平台自动投简历脚本：(boss、前程无忧、猎聘、智联招聘)

- Repository: https://github.com/loks666/get_jobs
- Website: https://github.com/loks666/get_jobs
- Stars: 8,573 · Forks: 1,012
- Language: Java
- License: NOASSERTION
- Published: 2026-09-21 · Updated: 2026-09-21 · Language: en
- Canonical page: https://hysenlabs.com/projects/loks666-get-jobs

## The problem get_jobs targets: repetitive applications on Chinese job boards

Applying to a few hundred postings on Boss Zhipin, 51job, Liepin and Zhilian is mostly copy and paste. Each site has its own login flow, its own search filters, and its own daily cap on how many people you can contact. get_jobs exists to push that repetition into a scheduled Java process that runs on your own machine.

The intended user is a job seeker on the Chinese market who is willing to run a Gradle project locally. The README addresses that person directly and even frames the tool as a backup: it states that Boss is now usable for applications, that the other platforms are untested, and that manual application on Boss is still preferable with this project used as a PC fallback. That is an unusually candid positioning statement for a project of this kind, and it should shape how you read the feature list.

The feature list is broad. The README describes a web management UI, AI matching of a posting against your profile, AI-written greeting messages, automatic sending of an image resume, filters for inactive HR accounts, headhunter postings and target salary, WeCom push notifications, and a blacklist that updates after each run. Only the Boss module is described as fully exercised.

## How get_jobs works: Spring Boot drives Patchright, SQLite holds the state

The stack is visible from the repository root and the README badges. The backend is Spring Boot 3.5 on JDK 21, built with Gradle 9.7. Browser automation runs through Patchright 1.62, a Playwright-derived driver; the README notes the program detects the operating system, downloads the matching chromedriver and drives the browser. Persistence is SQLite 3, and the front end is Next.js 16 with React 19.

Platform logic is split by site. Each board has its own class: Boss.java, Liepin.java, Job51.java and ZhiLian.java under src/main/java. Configuration lives in the database rather than in files, which is why the web UI exists: you edit cities, industries, experience and education through the front end, and the backend reads those rows at run time. The README states the empty database template ships with 16 tables and 673 dictionary rows covering city, industry, experience and education dropdowns, so the schema is fixed before your first run.

The AI layer is optional and only wired into Boss. A .env file holds HOOK_URL for a WeCom bot, BASE_URL, API_KEY and MODEL. The README says any OpenAI-compatible endpoint works and that the project does not bind itself to a specific provider. The same file also carries the WeCom webhook used for notifications, so one file controls both the AI calls and the push channel.

## Installing get_jobs and running a first Boss application

The README gives a git clone as the starting point, followed by Gradle and JDK 21. Clone the repository and move into it.

```bash
git clone https://github.com/loks666/get_jobs.git
cd get_jobs
```

The next step is the one most likely to stop a new user. The project does not create its tables on startup, so an empty database must be placed by hand. Download getjobs.db.template from the latest release, rename it, and put it under db/ at the repository root, so the final path is db/getjobs.db. The README warns existing users not to overwrite their own db/getjobs.db, because configuration and login cookies live there.

The AI and notification settings go in a .env file. The README shows this shape:

```bash
HOOK_URL=https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=your_key_here
BASE_URL=https://api.openai.com
API_KEY=sk-xxx
MODEL=gpt-5-nano
```

HOOK_URL is the WeCom robot webhook, BASE_URL is the OpenAI-compatible endpoint, API_KEY is the credential and MODEL is the model name. The README estimates that a full day of Boss applications costs roughly 0.06 USD with gpt-5-nano, which is a claim from the maintainer rather than an independent measurement.

With the database in place, start the application from the main class GetJobsApplication.java, or launch the backend alone and drop the prebuilt front-end dist folder into resources. Configuration is then edited in the web UI, where the README says the defaults are usually fine except for your region and target role. For Boss, the README states that the sayHi configuration value must be set to your greeting text or the application attempt fails. Image resumes are opt-in: convert your PDF to resume.jpg, place it in resources, and set sendImgResume to true.

## Where get_jobs breaks: caps, platform rot and a cookie-shaped dependency

The README is the harshest critic of its own platform coverage. 51job is described as having application limits, a restricted number of search results, and few real recruiters, with a workaround of pausing ten seconds between pages. Zhilian is described as having a cap of around 100 applications and as not worth using; it also requires you to pick a default resume, either the online one or an attachment, or submissions fail. Liepin is called reasonably recommended because it is high volume, but with a low success rate, and it requires the greeting text to be set in the latest mobile app and a WeChat binding.

Boss carries a daily greeting limit of 150, and the README still suggests manual application there. That means the automation is not a replacement for the platform UI even on the best-supported site.

Two operational constraints apply across the board. The README states that overseas proxies must be turned off, because the target platforms are domestic and a foreign proxy slows page loads. Persistent login depends on long-lived cookies stored in SQLite, with the README suggesting a QR scan roughly once a week on most platforms. That also means the database file is a credential store: losing db/getjobs.db loses your sessions, and copying it around copies your logins.

## get_jobs against a general browser automation script

The obvious alternative is writing your own Playwright or Selenium script against one board. The difference is where the state lives. A hand-written script usually keeps filters in code or environment variables and writes results to a log; get_jobs keeps filters, cookies, blacklists and application history in a SQLite schema with 16 tables and a dictionary of 673 option rows, and exposes them through a Next.js admin UI. That is a real difference in maintenance cost: changing your target cities is a form field rather than a code edit, but you inherit a fixed schema you did not design.

The second difference is the AI step. A plain automation script sends the same greeting to everyone. get_jobs calls an OpenAI-compatible endpoint to score the match and draft a greeting per posting, with cost tracked against a model you choose. If you do not want an external API in the loop, that layer is dead weight, and the README's own advice to apply manually on Boss suggests the maintainer does not consider the automation decisive on its own.

## Licence, maintenance and the cost of upgrading get_jobs

The repository badge and the README both point at PolyForm Noncommercial 1.0.0. Free non-commercial use is permitted, commercial use is prohibited, and the README says commercial licensing requires contacting the author. The GitHub licence field reads NOASSERTION, so the badge and README text are the clearer signal; if you plan to use this at a company or in a paid service, treat that as a blocker to resolve with the author rather than something to interpret yourself.

The last push to main was on 2026-09-16, and release v2.0.1 was published the same day as a front-end package. The previous release, v1.0.0, is dated 2025-11-26, so the release cadence is uneven and the version numbers do not tell you much about backend changes. Upgrades are not a simple pull in one respect: the README explicitly warns that replacing db/getjobs.db during an upgrade destroys configuration and login state. Any upgrade path therefore involves keeping your database and letting the application adapt to it, and the README does not document a migration procedure for schema changes between versions.

## Conclusion

Adopt get_jobs if you are job hunting on the Chinese market, you are comfortable running a Gradle and JDK 21 project, and you accept that Boss is the only platform the README calls usable today. Skip it if you need commercial use rights, want a supported product with a documented API contract, or expect the 51job and Zhilian modules to work, since the README itself describes both as broken. Before you invest time, download getjobs.db.template from the latest release, confirm the renamed db/getjobs.db loads, and check whether the .env AI keys are optional for your chosen platform.

## FAQ

### What is get_jobs?

It is a Java and Spring Boot application that automates job applications on Boss Zhipin, 51job, Liepin and Zhilian, driving the sites with the Patchright browser automation library and storing configuration, cookies and application records in a local SQLite database. It ships a Next.js web UI for configuration.

### Which platforms does get_jobs actually support today?

The README states Boss is usable and that the other platforms have not been tested, and it still recommends applying manually on Boss with this project as a PC fallback. It separately describes 51job and Zhilian as effectively broken, and treats Liepin as high volume but low success rate.

### Why does get_jobs fail to start without a database file?

The README states the project does not create tables automatically and cannot start without a database. You download getjobs.db.template from the latest release, rename it to getjobs.db and place it at db/getjobs.db; the empty database already contains the 16 tables and 673 dictionary rows.

### Can I use get_jobs commercially?

The README and the repository badge both reference PolyForm Noncommercial 1.0.0, which allows free non-commercial use and prohibits commercial use, with commercial licensing handled by contacting the author. The GitHub licence field itself reads NOASSERTION.

## Sources

- [Issues](https://github.com/loks666/get_jobs/issues)
- [loks666/get_jobs on GitHub](https://github.com/loks666/get_jobs)
- [Project website](https://github.com/loks666/get_jobs)
- [README](https://github.com/loks666/get_jobs/blob/main/README.md)
- [Releases](https://github.com/loks666/get_jobs/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/loks666-get-jobs
