如何通过Selenium Python向搜索框输入文本并解决点击搜索不跳转问题
问题原因及修复方案
现有代码的核心问题
- 隐式等待使用错误:
implicitly_wait()的参数单位是秒,你传入1000相当于设置全局等待超时为1000秒,且该配置应该在driver初始化后全局设置一次,不是点击搜索后才设置,无法解决点击后等待页面跳转的问题。 - 未等待页面跳转就直接获取当前URL:点击搜索按钮后页面需要加载时间,你同步直接拿
current_url拿到的还是跳转前的主页地址,自然匹配失败。 - 搜索关键词和预期URL不匹配:你输入的搜索内容是
samsung 20,但预期URL里的搜索词是samsung s20,多了字符s,就算跳转成功也会判定失败。 - 缩进错误:你给出的代码中
actualUrl2开始的部分缩进不对,会直接报语法错误。
修正后的代码
# 建议在driver初始化时就设置一次隐式等待,全局生效 self.driver.implicitly_wait(10) # 操作搜索框 self.driver.find_element(By.CSS_SELECTOR, ".search-box").click() # 输入的关键词要和预期URL里的对应,这里修正为samsung s20 self.driver.find_element(By.CSS_SELECTOR, ".search-box").send_keys("samsung s20") self.driver.find_element(By.CSS_SELECTOR, ".search-icon").click() # 显式等待页面URL发生变化,代替直接硬等 from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 最长等待10秒,直到URL包含搜索路径的特征 WebDriverWait(self.driver, 10).until(EC.url_contains("/srq=")) actualUrl2 = "https://www.trendyol.com/srq=samsung%20s20&qt=samsung%20s20&st=samsung%20s20&os=1" expected2 = self.driver.current_url if actualUrl2 == expected2: print("Welcome") else: print("Başarısız") print(expected2)
额外排查点
如果修改后还是停留在主页,按以下顺序排查:
- 确认
.search-icon的选择器是否正确,是否点击到了真实的搜索提交按钮,部分网站搜索框按回车键也可以提交,可以替换点击操作为输入完关键词后发送回车键:send_keys(Keys.ENTER),需要提前导入from selenium.webdriver.common.keys import Keys - 确认页面是否有弹窗、Cookie提示遮挡了搜索按钮,导致点击没有触发提交动作,可以先处理弹窗再执行搜索操作。
内容的提问来源于stack exchange,提问作者Sdeveci
相关产品推荐
相关产品推荐

