haah
This commit is contained in:
@@ -46,10 +46,10 @@ class BossRecruitHandler(BaseTaskHandler):
|
||||
task_type = TaskType.BOSS_RECRUIT.value
|
||||
|
||||
async def execute(
|
||||
self,
|
||||
task_id: str,
|
||||
params: Dict[str, Any],
|
||||
progress_cb: Callable[[str, str], Coroutine],
|
||||
self,
|
||||
task_id: str,
|
||||
params: Dict[str, Any],
|
||||
progress_cb: Callable[[str, str], Coroutine],
|
||||
) -> Any:
|
||||
job_title = str(params.get("job_title", "") or "").strip() or "相关岗位"
|
||||
# account_name 实际就是 browser_name(由服务端从 BossAccount.browser_name 注入)
|
||||
@@ -98,17 +98,17 @@ class BossRecruitHandler(BaseTaskHandler):
|
||||
# ────────────────────── 同步主流程 ──────────────────────
|
||||
|
||||
def _run_sync(
|
||||
self,
|
||||
job_title: str,
|
||||
account_name: str,
|
||||
bit_api_base: str,
|
||||
selected_filters: List[str],
|
||||
position_names: List[str],
|
||||
greet_target: int,
|
||||
worker_id: str,
|
||||
cancel_event,
|
||||
age_min: Optional[int] = None,
|
||||
age_max: Optional[int] = None,
|
||||
self,
|
||||
job_title: str,
|
||||
account_name: str,
|
||||
bit_api_base: str,
|
||||
selected_filters: List[str],
|
||||
position_names: List[str],
|
||||
greet_target: int,
|
||||
worker_id: str,
|
||||
cancel_event,
|
||||
age_min: Optional[int] = None,
|
||||
age_max: Optional[int] = None,
|
||||
) -> Dict[str, Any]:
|
||||
self.ensure_not_cancelled(cancel_event)
|
||||
|
||||
@@ -158,18 +158,18 @@ class BossRecruitHandler(BaseTaskHandler):
|
||||
# ────────────────────── 主招聘循环(对齐 1.py main) ──────────────────────
|
||||
|
||||
def _run_main_flow(
|
||||
self,
|
||||
*,
|
||||
page,
|
||||
job_title: str,
|
||||
selected_filters: List[str],
|
||||
position_names: List[str],
|
||||
greet_target: int,
|
||||
worker_id: str,
|
||||
account_name: str,
|
||||
cancel_event,
|
||||
age_min: Optional[int] = None,
|
||||
age_max: Optional[int] = None,
|
||||
self,
|
||||
*,
|
||||
page,
|
||||
job_title: str,
|
||||
selected_filters: List[str],
|
||||
position_names: List[str],
|
||||
greet_target: int,
|
||||
worker_id: str,
|
||||
account_name: str,
|
||||
cancel_event,
|
||||
age_min: Optional[int] = None,
|
||||
age_max: Optional[int] = None,
|
||||
) -> Dict[str, Any]:
|
||||
details: List[dict] = []
|
||||
errors: List[str] = []
|
||||
@@ -331,7 +331,7 @@ class BossRecruitHandler(BaseTaskHandler):
|
||||
container.ele("x://*[contains(text(),'确定')]").click()
|
||||
|
||||
def _load_and_extract_geek_list(
|
||||
self, page, container, selected_filters: List[str]
|
||||
self, page, container, selected_filters: List[str]
|
||||
) -> List[dict]:
|
||||
"""
|
||||
与 1.py 一致的抓包逻辑:
|
||||
@@ -379,17 +379,17 @@ class BossRecruitHandler(BaseTaskHandler):
|
||||
).strip()
|
||||
|
||||
def _greet_geek_list(
|
||||
self,
|
||||
*,
|
||||
page,
|
||||
container,
|
||||
geek_list: List[dict],
|
||||
greeted_keys: set[str],
|
||||
position_label: str,
|
||||
default_job: str,
|
||||
cancel_event,
|
||||
age_min: Optional[int] = None,
|
||||
age_max: Optional[int] = None,
|
||||
self,
|
||||
*,
|
||||
page,
|
||||
container,
|
||||
geek_list: List[dict],
|
||||
greeted_keys: set[str],
|
||||
position_label: str,
|
||||
default_job: str,
|
||||
cancel_event,
|
||||
age_min: Optional[int] = None,
|
||||
age_max: Optional[int] = None,
|
||||
) -> Tuple[int, List[dict]]:
|
||||
"""与 1.py _greet_geek_list_skip_greeted 一致的去重逻辑,增加年龄过滤。"""
|
||||
added = 0
|
||||
@@ -494,14 +494,22 @@ class BossRecruitHandler(BaseTaskHandler):
|
||||
a = page.get_frame(1)
|
||||
time.sleep(random.uniform(0.5, 5))
|
||||
|
||||
# 与 1.py 一致:打招呼
|
||||
a.ele(f'x://*[contains(text(),"打招呼")]', timeout=2).click(by_js=True)
|
||||
time.sleep(random.uniform(0.5, 5))
|
||||
|
||||
# 与 1.py 一致:收藏
|
||||
a.ele(f'x://*[contains(text(),"收藏")]', timeout=2).click(by_js=True)
|
||||
time.sleep(random.uniform(0.5, 5))
|
||||
|
||||
# 与 1.py 一致:打招呼
|
||||
try:
|
||||
a.ele(f'x://*[contains(text(),"打招呼")]', timeout=2).click(by_js=True)
|
||||
time.sleep(random.uniform(0.5, 5))
|
||||
except:
|
||||
pass
|
||||
try:
|
||||
a.ele(f'x://*[@class="btn-v2 btn-sure-v2 btn-greet"]', timeout=2).click(by_js=True)
|
||||
except:
|
||||
pass
|
||||
time.sleep(random.uniform(0.5, 5))
|
||||
|
||||
# 与 1.py 一致:btn-outline × 3
|
||||
for i in range(3):
|
||||
a.ele('x://*[@class="btn-v2 btn-outline-v2"]').click(by_js=True)
|
||||
|
||||
Reference in New Issue
Block a user