Selenium报错:'WebElement'对象无'username'属性,求GitHub自动登录修复
GitHub自动登录Selenium代码错误排查与修复
错误原因
报错AttributeError: 'WebElement' object has no attribute 'username'的核心问题是:你在找到输入框元素后,错误地给WebElement对象添加了.username和.password属性,而WebElement本身并没有这些属性。找到输入框元素后,直接调用send_keys()方法即可填入内容。
修正后的代码
from selenium import webdriver import time from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from githubuser import username, password class Github: def __init__(self,username,password): self.browser = webdriver.Chrome() self.username = username self.password = password def signin(self): self.browser.get("https://github.com/login/") time.sleep(2) # 移除多余的.username和.password属性,直接调用send_keys self.browser.find_element(By.XPATH,'//*[@id="login_field"]').send_keys(self.username) self.browser.find_element(By.XPATH,'//*[@id="password"]').send_keys(self.password) time.sleep(2) self.browser.find_element(By.XPATH,'//*[@id="login"]/div[4]/form/div/input[11]').click() github = Github(username = username, password = password) github.signin()
额外优化建议(可选)
- 尽量避免使用
time.sleep()固定等待,改用Selenium的显式等待(WebDriverWait),可以更高效地等待元素加载完成,示例:from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 替换time.sleep(2)为: WebDriverWait(self.browser, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="login_field"]'))) - 定位登录按钮的XPath可以更稳定,比如用
//input[@name="commit"]代替索引定位,避免页面结构变化导致定位失败。
内容的提问来源于stack exchange,提问作者ofowardar
相关产品推荐
相关产品推荐

