from typing import *
try:
from xbot.app.logging import trace as print
except:
from xbot import print
from xbot_ai import *
def select_job_category_by_hover(browser, job_type_trigger, dropdown_panel, secondary_panel, primary_category: str, secondary_category: str) -> None:
"""
title: 职位类型二级分类选择
description: 点击%job_type_trigger%打开下拉面板,在%dropdown_panel%中悬浮%primary_category%一级分类,等待%secondary_panel%展开后点击%secondary_category%二级分类
inputs:
- browser (WebBrowser): 目标网页
- job_type_trigger (Selector): `职位类型`,uuid: sa8b5r0v
- dropdown_panel (Selector): `职位类型下拉面板`,uuid: sa8njl4h
- secondary_panel (Selector): `二级分类面板`,uuid: sa9rzw8k
- primary_category (str-textbox): 要悬浮的一级分类名称,eg: 设计
- secondary_category (str-textbox): 要点击的二级分类名称,eg: 家具设计
outputs:
- None
"""
print("1. 点击职位类型触发器打开下拉面板")
trigger_element = browser.find_all_by_xpath(job_type_trigger, timeout=3)[0]
trigger_element.click(delay_after=0.3)
print("2. 在职位类型下拉面板中查找一级分类")
panel_element = browser.find_all_by_xpath(dropdown_panel, timeout=3)[0]
primary_items = panel_element.find_all_by_xpath(".//div[@class='position-select-dropdown__item']", timeout=3)
target_primary_item = None
for item in primary_items:
item_text = item.get_text().strip()
print(f" a. 检查一级分类: {item_text}")
if primary_category in item_text:
target_primary_item = item
print(f" b. 找到匹配的一级分类: {item_text}")
break
if not target_primary_item:
raise Exception(f"未找到一级分类: {primary_category}")
print("3. 悬浮一级分类项,等待二级分类面板展开")
target_primary_item.hover(delay_after=0.3)
print("4. 等待二级分类面板展开并查找目标二级分类")
# 等待页面状态稳定
browser.wait_load_completed(timeout=3)
# 查找所有可能的二级分类面板
secondary_panels = browser.find_all_by_xpath("//div[@class='position-select-dropdown__main']", timeout=3)
target_secondary_link = None
for panel in secondary_panels:
# 检查面板是否可见且包含目标分类
try:
secondary_links = panel.find_all_by_xpath(".//a[contains(@href, 'javascript:;')]", timeout=1)
for link in secondary_links:
link_text = link.get_text().strip()
print(f" a. 检查二级分类: {link_text}")
if secondary_category in link_text or link_text == secondary_category:
target_secondary_link = link
print(f" b. 找到匹配的二级分类: {link_text}")
break
if target_secondary_link:
break
except:
continue
if not target_secondary_link:
raise Exception(f"未找到二级分类: {secondary_category}")
print("5. 点击目标二级分类")
target_secondary_link.click(delay_after=0.3)
print(f"成功选择职位类型: {primary_category} -> {secondary_category}")