diff --git a/worker/tasks/boss_recruit.py b/worker/tasks/boss_recruit.py index 19fe188..c0ee749 100644 --- a/worker/tasks/boss_recruit.py +++ b/worker/tasks/boss_recruit.py @@ -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)