使用Selenium无法筛选含MUST TRY标签的菜品,返回全部菜品如何解决?
错误原因
你现有代码的筛选逻辑存在两个问题:
- XPath路径写法错误:
//div[contains(text(),'MUST TRY')]开头的//代表从整个页面根节点开始检索,只要页面存在任意一个带MUST TRY标识的元素,所有菜品的判断结果都为真,自然会输出全部菜品 - 直接调用
find_element检索不存在的元素时会抛出异常,无法走到else分支
修正后的代码
把需要修改的判断逻辑替换为以下内容即可:
# 先统一获取所有菜品容器,弃用旧版本已废弃的find_elements_by_xpath写法 dish_divs = driver.find_elements(By.XPATH, "//div[@class = 'sc-1s0saks-11 cYGeYt']") for item in dish_divs: # XPath加.前缀限定只在当前菜品节点内搜索,用find_elements避免抛异常 must_try_tags = item.find_elements(By.XPATH, ".//div[contains(text(),'MUST TRY')]") if must_try_tags: name = item.find_element(By.CSS_SELECTOR,'h4.sc-1s0saks-15.iSmBPS') print(name.text) driver.close()
运行后就只会输出带MUST TRY标识的菜品名称。
内容的提问来源于stack exchange,提问作者Iswar Chand
相关产品推荐
相关产品推荐

