You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Swiggy搜索输入框获取正确的Selenium定位器?

问题:Swiggy自动化搜索时无法定位元素

我尝试自动化Swiggy平台的食物搜索功能,但在操作搜索输入框时出现错误,用SelectorsHub找定位器也没解决,终端报错如下:

代码片段

from selenium import webdriver
import time

from selenium.webdriver import Keys
from selenium.webdriver.common.by import By

browser = webdriver.Chrome()
browser.get('https://google.com')
browser.maximize_window()

search = browser.find_element(By.XPATH, "//textarea[@id='APjFqb']")
search.send_keys("Swiggy")
search.send_keys(Keys.RETURN)

site = browser.find_element(By.PARTIAL_LINK_TEXT, "Swiggy")
site.click()

search_btn = browser.find_element(By.XPATH, "//span[normalize-space()='Search']")
search_btn.click()

search_food = (browser.find_element(By.CSS_SELECTOR, 'button[class*="SearchButton"]'))
search_food.click()

time.sleep(10)

错误信息

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//input[@placeholder='Search for restaurants and food']"}
  (Session info: chrome=123.0.6312.107); For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#no-such-element-exception
Stacktrace:
    GetHandleVerifier [0x00007FF713927032+63090]
    (No symbol) [0x00007FF713892C82]
    (No symbol) [0x00007FF71372EC65]
    (No symbol) [0x00007FF71377499D]
    (No symbol) [0x00007FF713774ADC]
    (No symbol) [0x00007FF7137B5B37]
    (No symbol) [0x00007FF71379701F]
    (No symbol) [0x00007FF7137B3412]
    (No symbol) [0x00007FF713796D83]
    (No symbol) [0x00007FF7137683A8]
    (No symbol) [0x00007FF713769441]
    GetHandleVerifier [0x00007FF713D225AD+4238317]
    GetHandleVerifier [0x00007FF713D5F70D+4488525]
    GetHandleVerifier [0x00007FF713D579EF+4456495]
    GetHandleVerifier [0x00007FF713A00576+953270]
    (No symbol) [0x00007FF71389E54F]
    (No symbol) [0x00007FF713899224]
    (No symbol) [0x00007FF71389935B]
    (No symbol) [0x00007FF713889B94]
    BaseThreadInitThunk [0x00007FFC9DBB257D+29]
    RtlUserThreadStart [0x00007FFC9F24AA48+40]
解决方案
  • 补全等待机制:固定time.sleep()不稳定,改用Selenium显式等待,确保元素加载完成后再操作。
  • 处理窗口切换:点击Swiggy链接会打开新标签页,必须切换到新窗口才能定位元素。
  • 优化定位逻辑:原代码中点击SearchButton属于多余操作,点击搜索图标后直接定位输入框即可。

修改后的代码:

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

browser = webdriver.Chrome()
browser.get('https://google.com')
browser.maximize_window()

# 搜索Swiggy
search = WebDriverWait(browser, 10).until(
    EC.presence_of_element_located((By.XPATH, "//textarea[@id='APjFqb']"))
)
search.send_keys("Swiggy")
search.send_keys(Keys.RETURN)

# 点击Swiggy链接并切换到新窗口
site = WebDriverWait(browser, 10).until(
    EC.element_to_be_clickable((By.PARTIAL_LINK_TEXT, "Swiggy"))
)
site.click()
window_handles = browser.window_handles
browser.switch_to.window(window_handles[-1])

# 点击搜索按钮
search_btn = WebDriverWait(browser, 10).until(
    EC.element_to_be_clickable((By.XPATH, "//span[normalize-space()='Search']"))
)
search_btn.click()

# 定位搜索输入框并输入内容
search_input = WebDriverWait(browser, 10).until(
    EC.presence_of_element_located((By.XPATH, "//input[@placeholder='Search for restaurants and food']"))
)
search_input.send_keys("Pizza")
search_input.send_keys(Keys.RETURN)

# 可选择关闭浏览器
# browser.quit()

内容的提问来源于stack exchange,提问作者N1d4n

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 23:48:11