Selenium网页爬虫Pylance报错'login'未定义 同写法next无错问题咨询
报错问题修复方案
错误根因
- 核心错误:Selenium的
click()方法本身不需要传入任何参数,你在调用时额外传入的next、login均为未定义变量。其中next是Python内置的迭代器函数,因此Pylance不会触发未定义提示,但属于完全无效的错误传参;login没有任何预先定义的逻辑,因此直接触发"login" is not defined报错。 - 额外隐藏问题:
- 读取账号信息的函数中
password = [1]是语法错误,你需要读取分割后的列表第二个元素,正确写法为password = info[1] - Chrome启动最大化的参数写法错误,正确参数为
start-maximized,不是start.maximized find_element_by_xpath是Selenium 3的旧API,在4.0+版本已被弃用,推荐使用新版定位写法
- 读取账号信息的函数中
修复后的代码
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.options import Options import time def account_info(): with open('account_info.txt', 'r') as f: info = f.read().split() email = info[0] password = info[1] return email, password email, password = account_info() options = Options() options.add_argument("start-maximized") driver = webdriver.Chrome(options=options) driver.get("https://twitter.com/i/flow/login") email_xpath = '//*[@id="layers"]/div[2]/div/div/div/div/div/div[2]/div[2]/div/div/div[2]/div[2]/div[1]/div/div[2]/label/div/div[2]/div/input' next_xpath = '//*[@id="layers"]/div[2]/div/div/div/div/div/div[2]/div[2]/div/div/div[2]/div[2]/div[2]/div/div' password_xpath = '//*[@id="layers"]/div[2]/div/div/div/div/div/div[2]/div[2]/div/div/div[2]/div[2]/div[1]/div/div[2]/div/label/div/div[2]/div/input' login_xpath = '//*[@id="layers"]/div[2]/div/div/div/div/div/div[2]/div[2]/div/div/div[2]/div[2]/div[2]/div/div' time.sleep(1) driver.find_element(By.XPATH, email_xpath).send_keys(email) time.sleep(0.5) driver.find_element(By.XPATH, next_xpath).click() time.sleep(0.5) driver.find_element(By.XPATH, password_xpath).send_keys(password) time.sleep(0.5) driver.find_element(By.XPATH, login_xpath).click()
如果你仍需使用旧版本Selenium的API,仅需要删除所有click()方法中的传参即可,不需要修改其他定位逻辑。
内容的提问来源于stack exchange,提问作者sel23is
相关产品推荐
相关产品推荐

