如何为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
相关产品推荐
相关产品推荐

