定位可见元素
给元素添加属性 xbox-display 的值为 true
实例化Selector类
元素结构
{
'id': 'ifream-xpath',
'name': 'ifream-xpath',
'type': 'simple',
'xpath': {
'enable': 'true',
'segments': ['//iframe[@id="aa-challenge-whole-page-iframe"]', '//input[@name="submit_button"]']
}
}
示例代码
def handle_captcha(web_page:xbot.web.WebBrowser):
"""处理亚马逊数英验证码"""
# 构造验证码 xpath selector
captcha_data = {'id': 'ifream-xpath', 'name': 'ifream-xpath', 'type': 'simple', 'xpath': {'enable': 'true', 'segments': ['//iframe[@id="aa-challenge-whole-page-iframe"]', '//img[@alt="captcha"]']}}
captcha_selector = Selector(captcha_data)
captcha_input_data = {'id': 'ifream-xpath', 'name': 'ifream-xpath', 'type': 'simple', 'xpath': {'enable': 'true', 'segments': ['//iframe[@id="aa-challenge-whole-page-iframe"]', '//input[@id="aa_captcha_input"]']}}
captcha_input_selector = Selector(captcha_input_data)
submit_data = {'id': 'ifream-xpath', 'name': 'ifream-xpath', 'type': 'simple', 'xpath': {'enable': 'true', 'segments': ['//iframe[@id="aa-challenge-whole-page-iframe"]', '//input[@name="submit_button"]']}}
submit_selector = Selector(submit_data)
xbot.logging.info("处理亚马逊数英验证码结束")
for i in range(5):
if xbot_visual.web.browser.element_display(browser=web_page, content_type="display", selector=captcha_selector):
try:
web_element = web_page.find(captcha_selector)
result = xbot_visual.web_service.cloud_captch(
captcha_engine="jfbym",
captcha_type="10111",
image_source="web",
web_page=web_page,
web_element=web_element,
win_element=None,
image_url=None,
image_path=None,
timeout="20",
)
web_page.find_by_xpath(captcha_input_selector).input(result)
web_page.find_by_xpath(submit_selector).click()
except Exception as e:
xbot.logging.error(f"验证码处理异常: {e}")
sleep(3) # 控制频率,避免封号
else:
break # 如果验证码元素已消失,跳出
xbot.logging.info("处理亚马逊数英验证码结束")