You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何获取Yandex.ru搜索提示表的CSS选择器?指定选择器匹配失败

解决Yandex搜索提示表CSS选择器定位问题

我明白你现在在定位Yandex搜索页的提示弹窗时碰了壁——那串长长的CSS选择器怎么都找不到元素。咱们一步步来排查和解决这个问题:

一、先给选择器“瘦个身”

你用的那串选择器太冗余了,里面像mini-suggest__popup_svg_yesmini-suggest__popup_theme_flat这类类名,很可能是网站动态生成的,会根据页面状态或者版本更新变化。咱们保留最核心的、稳定的类名就行:

  • 提示弹窗的基础容器类是mini-suggest__popup,加上标记可见状态的mini-suggest__popup_visible,组合成的选择器足够精准了:'.mini-suggest__popup.mini-suggest__popup_visible'
  • 修改后的代码可以试试:
browser.implicitly_wait(5)
try:
    suggest = browser.find_element_by_css_selector('.mini-suggest__popup.mini-suggest__popup_visible')
except NoSuchElementException:
    print('no table with hints')

二、排查是否存在iframe嵌套(小概率但要确认)

有些网站会把部分交互内容放在iframe里,你可以先检查下Yandex的提示弹窗是不是在iframe中:

  1. 打开浏览器开发者工具(按F12),选中提示弹窗元素
  2. 在Elements面板里往上找父级标签,看有没有<iframe>
  3. 如果确实在iframe里,需要先切换到对应iframe才能定位:
# 先找到对应的iframe(示例用id定位,你可以换成实际的选择器)
iframe = browser.find_element_by_id('target-iframe-id')
browser.switch_to.frame(iframe)

# 现在再查找提示元素
suggest = browser.find_element_by_css_selector('.mini-suggest__popup.mini-suggest__popup_visible')

# 操作完记得切回主文档
browser.switch_to.default_content()

三、换用更可靠的显式等待

隐式等待是全局生效的,有时候对动态加载的元素不够灵活。试试用WebDriverWait做显式等待,专门等提示弹窗出现:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException

# 先在搜索框输入内容,触发提示弹窗
search_box = browser.find_element_by_id('text')
search_box.send_keys('test')

try:
    # 最多等10秒,直到提示弹窗可见
    suggest = WebDriverWait(browser, 10).until(
        EC.visibility_of_element_located((By.CSS_SELECTOR, '.mini-suggest__popup.mini-suggest__popup_visible'))
    )
    print('成功找到提示表!')
except TimeoutException:
    print('no table with hints')

四、重新获取最新的选择器

如果上面的方法都不行,可能是网站的类名已经更新了:

  1. 打开Yandex首页,输入内容触发提示弹窗
  2. 右键弹窗,选择“检查”打开开发者工具
  3. 在Elements面板里选中弹窗元素,右键选择「Copy > Copy selector」,把复制到的最新选择器替换到你的代码里就行

内容的提问来源于stack exchange,提问作者Идентикон

火山引擎 最新活动