开发Instagram自动登录脚本遇InvalidSelectorException错误求助
你的代码报错核心是XPATH选择器语法无效,原因是匹配按钮文本时混用了非标准引号(´和`),且引号未正确配对,导致XPATH解析失败。
修正后的代码方案
方案1:修正引号格式(严格匹配文本)
把XPATH里的文本用标准双引号/单引号包裹,确保引号配对:
from time import sleep from selenium import webdriver from selenium.webdriver.common.by import By browser = webdriver.Firefox() browser.implicitly_wait(5) browser.get('https://www.instagram.com/') sleep(2) # 改用标准双引号包裹文本,外层用单引号 login_link = browser.find_element(By.XPATH, '//button[text()="Allow essential and optional cookies"]') login_link.click() # 别忘了添加点击操作
方案2:用contains匹配(更稳定,适配文本细微变化)
Instagram的按钮文本偶尔会有空格、大小写调整,用contains能避免严格匹配失败:
login_link = browser.find_element(By.XPATH, '//button[contains(text(), "Allow essential and optional cookies")]')
进阶优化:替换sleep为显式等待
sleep(2)是固定等待,容易因页面加载慢导致元素找不到,改用Selenium的显式等待更可靠:
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 browser = webdriver.Firefox() browser.get('https://www.instagram.com/') # 等待最多10秒,直到按钮可点击 wait = WebDriverWait(browser, 10) cookie_button = wait.until(EC.element_to_be_clickable((By.XPATH, '//button[contains(text(), "Allow essential and optional cookies")]'))) cookie_button.click()
错误原因说明
你原代码中的XPATH://button[text()=´Allow essential and optional cookies],使用了**左单引号´**和**反引号```` ```**两种非标准引号,XPATH只识别标准单引号'和双引号",且要求字符串两端引号类型一致,因此触发了InvalidSelectorException。
内容的提问来源于stack exchange,提问作者Justus
相关产品推荐
相关产品推荐

