【Selenium+Python Webdriver】报错之:TypeError: user_login() missing 1 required positional argument: 'self'
先贴一下源码:
base.py文件如下:
from selenium import webdriver class Page(object): ''' 页面基础类,用于所有页面的继承 ''' rb_url = 'http://XXXXX' def __init__(self,selenium_driver,base_url=rb_url): self.driver = selenium_driver self.base_url = base_url self.timeout = 30 def on_page(self): return self.driver.current_url == (self.base_url + self.url) def open(self): self._open(self.url) def _open(self,url): url = self.base_url + url self.driver.get(url) assert self.on_page(),'url is NOT%s' %url def find_element(self,*loc): return self.driver.find_element(*loc) def find_elements(self,*loc): return self.driver.find_element(*loc) def script(self,src): return self.driver.execute_script(src)
loginPage.py文件如下:
from base import Page from selenium.webdriver.common.by import By from selenium import webdriver class login(Page): url = '' login_username_loc = (By.CSS_SELECTOR,"#_easyui_textbox_input1") login_password_loc = (By.CSS_SELECTOR,"#_easyui_textbox_input2") login_button_loc = (By.CSS_SELECTOR,"button[type=submit]") def login_username(self,username): self.find_element(*self.login_username_loc).send_keys(username) def login_password(self,password): self.find_element(*self.login_password_loc).send_keys(password) def login_button(self): self.find_element(*self.login_button_loc).click() #定义统一登录口 def user_login(self,username='zc',password='1'): self.open() self.login_username(username) self.login_password(password) self.login_button() if __name__ == '__main__': user_login()
运行时报错:
TypeError: user_login() missing 1 required positional argument: 'self'
经查询是因为self丢失了要传递的参数。
解决方法如下:
一、定义的user_login()位置不动,把self替换引参数,见下面:
#定义统一登录口 def user_login(driver = webdriver.Chrome(),username='zc',password='1'): loginPage = login(driver) loginPage.open() loginPage.login_username(username) loginPage.login_password(password) loginPage.login_button()
二、定义的user_login()移动到class中,self会指向base.py文件的selenium_driver无参数
TypeError: __init__() missing 1 required positional argument: 'selenium_driver'
完整修改代码如下:
base.py文件修改:
def __init__(self,selenium_driver = webdriver.Chrome(),base_url=rb_url): self.driver = selenium_driver self.base_url = base_url self.timeout = 30
loginPage.py文件修改如下:
from base import Page from selenium.webdriver.common.by import By from selenium import webdriver class login(Page): url = '' login_username_loc = (By.CSS_SELECTOR,"#_easyui_textbox_input1") login_password_loc = (By.CSS_SELECTOR,"#_easyui_textbox_input2") login_button_loc = (By.CSS_SELECTOR,"button[type=submit]") def login_username(self,username): self.find_element(*self.login_username_loc).send_keys(username) def login_password(self,password): self.find_element(*self.login_password_loc).send_keys(password) def login_button(self): self.find_element(*self.login_button_loc).click() #-->移动到class中,定义统一登录口 def user_login(self,username='zc',password='1'): self.open() self.login_username(username) self.login_password(password) self.login_button() if __name__ == '__main__':
#需要引用才可以,参考地址
login().user_login()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App