理解并修复在 Python 中将 Paste_keys 函数与 Selenium 一起使用时的“缺少位置参数”和“文本未定义”错误

问题描述 投票:0回答:1

正在学习 Python,并正在开发一个使用 Selenium 来自动将剪贴板中的文本粘贴到网站的文本字段中的项目。我引用了这个 Stack Overflow 问题的答案:[https://stackoverflow.com/questions/28637931/paste-command-using-selenium] 我定义了一个paste_keys函数:

def paste_keys(self, xpath, text):
os.system("echo %s| clip" % text.strip())
el = self.driver.find_element_by_xpath(xpath)
el.send_keys(Keys.CONTROL, 'v')

但是,我面临以下错误: “缺少两个位置参数”错误:当我仅使用 xpath 参数调用该函数时,如下所示:paste_keys('//*[@id="txt-url"]'),我收到一条错误消息“两个位置参数”失踪了”。 “文本未定义”错误:如果我从函数定义中删除 self 和 text 参数:

def paste_keys(xpath):
   os.system("echo %s| clip" % text.strip())
   el = self.driver.find_element_by_xpath(xpath)
   el.send_keys(Keys.CONTROL, 'v')

我收到一条错误消息,提示“文本”未定义。 我知道该函数需要 self 和 text 参数,但我不确定在我的上下文中为它们提供什么。我正在尝试从剪贴板粘贴文本,因此没有要传递的特定文本值。至于 self,我没有使用类,所以我不确定它的目的。

这是我当前的代码:

# ... (imports and other code) ...

def paste_keys(xpath):
    el = driver.find_element_by_css_selector(xpath)
    el.send_keys(Keys.CONTROL, 'v')

def order(k): 
    # ... (other code) ...
    paste_keys("input[id='txt-url']")
    # ... (other code) ...

if __name__ == '__main__':
    order(data)

有人可以解释原始paste_keys函数中self和text参数的用途,以及如何使其适应我想从剪贴板粘贴的场景吗?我想更好地理解错误消息和基本概念。

python-3.x selenium selenium-webdriver bots paste
1个回答
1
投票

如果您的方法位于类内部,那么

self
在那里有意义,否则没有意义。

self
用于引用类对象本身。

假设您有一个类,其中包含您的方法作为其自身的函数

class Hooks:
    def paste_keys(self ,xpath, text):
        os.system("echo %s| clip" % text.strip())
        el = self.driver.find_element_by_xpath(xpath)
        el.send_keys(Keys.CONTROL, 'v')

当你要使用该方法时,它会像这样

Hooks hooksObject = Hooks()
hooksObject.paste_keys(xpath, text)

Python 会将您的调用转换为 -

Hooks.paste_keys(hooksObject, xpath, test);

其次,如果您不将该方法用作类函数,那么您可以将其重写为

def paste_keys(xpath, text):
   os.system("echo %s| clip" % text.strip())
   el = driver.find_element_by_xpath(xpath) #keep in mind - here driver has to be global, if not - you can pass it as parameter
   el.send_keys(Keys.CONTROL, 'v')

并像这样使用它

paste_keys(xpath, text)

还有一篇关于self

的精彩帖子
© www.soinside.com 2019 - 2024. All rights reserved.