Selenium开发Instagram自动登录脚本调用send_keys触发NoneType报错如何解决
问题定位与修复方案
1 核心报错原因
你遇到的AttributeError: 'NoneType' object has no attribute 'send_keys'报错来自登录逻辑的最后一行代码:
LoginPassword = ui.WebDriverWait(driver, 10).until(ec.element_to_be_clickable((By.NAME, "password"))).send_keys(InstagramPassword).send_keys(Keys.ENTER)
Selenium 中的send_keys()方法没有返回值(默认返回None),你在第一个send_keys(InstagramPassword)之后直接链式调用第二个send_keys(Keys.ENTER),相当于对None调用方法,自然会触发报错。
另外你写的用户名输入行也存在冗余问题:send_keys返回None,赋值给LoginUsername变量没有实际意义,只是没有调用后续方法所以没触发报错。
2 其他隐藏问题
还有一行代码存在逻辑错误:
RandomnessTime = WebDriverWait(driver, (1 - int(RandomnessTime)))
WebDriverWait 的第二个参数是最长等待超时时间,必须为正整数,如果你输入的 RandomnessTime 大于1,这里会得到负数,直接抛出参数错误。如果你的本意是等待随机时间,应该用time.sleep()配合随机数模块,而不是 WebDriverWait。
3 修正后的代码
# Importing from selenium.webdriver.chrome.service import Service from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.support import expected_conditions as ec from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait import time import random from selenium.webdriver.support import ui # Setting everything up service = Service("\Program Files (x86)\chromedriver.exe") # Program Starts RandomnessTime = input("Select Randomness time:") InstagramUsername = input("Enter Username:") InstagramPassword = input("Enter Password:") driver = webdriver.Chrome(service=service) driver.get('https://www.instagram.com/') wait = ui.WebDriverWait(driver, 10) driver.maximize_window() # 同意cookie wait.until(ec.element_to_be_clickable((By.CSS_SELECTOR, ".aOOlW.bIiDR"))).click() # 随机等待 wait_seconds = random.randint(1, int(RandomnessTime)) time.sleep(wait_seconds) # Logging in # 输入用户名 username_input = ui.WebDriverWait(driver, 10).until(ec.element_to_be_clickable((By.NAME, "username"))) username_input.send_keys(InstagramUsername) # 输入密码+提交 password_input = ui.WebDriverWait(driver, 10).until(ec.element_to_be_clickable((By.NAME, "password"))) password_input.send_keys(InstagramPassword) password_input.send_keys(Keys.ENTER) # Clicking "Not Now". ui.WebDriverWait(driver, 10).until(ec.element_to_be_clickable((By.CSS_SELECTOR, ".aOOlW.HoLwm"))).click()
内容的提问来源于stack exchange,提问作者BluBalloon
相关产品推荐
相关产品推荐

