Python+Undetected Chromedriver无法定位Nike网站Cookie按钮求助
问题分析与解决方案
核心错误
你当前代码的主要问题是定位方式与传入的选择器不匹配:
- 你使用了
By.CLASS_NAME,但传入的是完整的CSS复合选择器(包含父子元素、多类名的语法),而CLASS_NAME仅支持传入单个类名,这直接导致元素无法被找到。
修正步骤与代码
1. 更换定位方式为CSS选择器
将By.CLASS_NAME改为By.CSS_SELECTOR,同时可以简化选择器(冗长的复合选择器容易因页面样式更新失效),比如直接定位Cookie按钮的核心类。
2. 用显式等待替代固定sleep
固定sleep(8)不稳定,页面加载速度受网络影响,改用WebDriverWait等待元素可点击,能大幅提升代码可靠性。
修正后的完整代码
import undetected_chromedriver as uc from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC def main(): # 初始化浏览器 browser = uc.Chrome() browser.get('https://www.nike.com/fr/snkrs-app?cp=24158993452_search_%7Csnkrs%7C10689554523%7C109060467241%7Ce%7Cc%7CFR%7Capp%7C508994633917&gclsrc=aw.ds&ds_rl=1252249&gclid=CjwKCAjwk_WVBhBZEiwAUHQCmV8yy66lssIN5EzoS0K8I4B1k9yk5kduxXy62w27SLfnChI_0U4UvBoC4P8QAvD_BwE') try: # 等待Cookie按钮可点击,超时15秒 accept_btn = WebDriverWait(browser, 15).until( EC.element_to_be_clickable((By.CSS_SELECTOR, "button.ncss-btn-primary-dark")) ) accept_btn.click() print("Cookie按钮已点击") except Exception as e: print(f"找不到Cookie按钮或点击失败: {str(e)}") # 可选:打印当前页面源码,排查元素是否存在 # print(browser.page_source) # 保持浏览器打开,按回车关闭 input("按回车键关闭浏览器...") browser.quit() if __name__ == '__main__': main()
其他可选定位方案
如果上述CSS选择器仍失效,可以尝试:
- 按按钮文本定位(法国官网Cookie按钮文本通常是"Accepter tout"):
accept_btn = WebDriverWait(browser, 15).until( EC.element_to_be_clickable((By.XPATH, "//button[text()='Accepter tout']")) ) - 按按钮的aria属性定位(更稳定,不易受样式变化影响):
accept_btn = WebDriverWait(browser, 15).until( EC.element_to_be_clickable((By.CSS_SELECTOR, "button[aria-label='Accepter tout les cookies']")) )
内容的提问来源于stack exchange,提问作者User58
相关产品推荐
相关产品推荐

