使用Selenium自动化Instagram时遇'WebDriver'无find_element_by_name属性报错
问题解决步骤
1. 核心错误原因
你遇到的'WebDriver' object has no attribute 'find_element_by_name'错误,是因为Selenium 4.x及以上版本已经移除了find_element_by_name这类旧的元素定位方法,必须使用基于By类的新语法。
2. 代码修复点
(1)导入必要的By类
在代码开头添加:
from selenium.webdriver.common.by import By
(2)替换旧定位方法并修正输入框定位错误
把原代码里的:
input_username = browser.find_element_by_name('username') input_password = browser.find_element_by_name('username')
改成:
input_username = browser.find_element(By.NAME, 'username') input_password = browser.find_element(By.NAME, 'password')
注意:你原代码里把密码框也错误定位成了username,这是第二个问题,必须改成password才能正确找到密码输入框。
(3)调整不合理的间隔时间(可选)
你设置的between_messages = 2000是2000秒(超过30分钟),这个间隔过长,可根据需求调整为60-120秒这类合理值。
3. 修复后的完整代码
from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By import time, random # Instagram账号的用户名和密码 my_username = 'a' my_password = 'm' # 要发私信的Instagram用户名列表 usernames = ['user1', 'user2', 'user3'] # 私信内容 messages = ['Hey! Please follow my page', 'Hey, how are you doing?', 'Hey'] # 消息之间的间隔时间(秒) between_messages = 60 # 建议调整为合理值 browser = webdriver.Chrome('chromedriver') # 登录函数 def auth(username, password): try: browser.get('https://instagram.com') time.sleep(random.randrange(2, 4)) input_username = browser.find_element(By.NAME, 'username') input_password = browser.find_element(By.NAME, 'password') input_username.send_keys(username) time.sleep(random.randrange(1, 2)) input_password.send_keys(password) time.sleep(random.randrange(1, 2)) input_password.send_keys(Keys.ENTER) except Exception as err: print(err) browser.quit() auth(my_username, my_password)
4. 额外注意事项
- 确保ChromeDriver版本和Chrome浏览器版本完全匹配,否则会出现页面异常关闭的问题。
- Instagram有严格的反爬机制,频繁自动化操作可能导致账号受限,谨慎使用此类脚本。
内容的提问来源于stack exchange,提问作者Aris
相关产品推荐
相关产品推荐

