【问题标题】:Paste into texbox using selenium使用 selenium 粘贴到文本框中
【发布时间】:2021-01-18 05:59:34
【问题描述】:

本题主要基于以下问题Paste command using Selenium的回答

我的目标是将剪贴板中的文本粘贴到某个网站的某个文本字段中。

调用函数时“self”和“text”应该输入什么。函数是这样定义的

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"]')

,我收到一条错误消息,提示“xyz 行中缺少两个位置参数”。xyz 行是包含上述代码的行 (我调用了只提供 xpath 参数的函数。)

如果只是从函数中删除“文本和自我”参数 即

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')

,我收到另一个错误提示“未定义文本”。

作为修复它的最后一次尝试,我尝试在调用函数时传递一个空白参数,即

paste_keys( , '//*[@id="txt-url"]' , )

我收到无效的语法错误,并且箭头指向第一个逗号

虽然我本可以等待评论的回复,但我希望更深入地理解这个错误和概念,因为我是一个学习 python 的爱好者。

我更新的代码

from config import data
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys
import time

#driver = webdriver.Chrome()

driver = webdriver.Chrome('./chromedriver')

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


def order(k): 
    
    driver.get(k['downloader_url'])

    driver.execute_cdp_cmd('Network.setUserAgentOverride', {"userAgent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.53 Safari/537.36'})
    
    paste_keys("input[id='txt-url']" )
    time.sleep(10)
    driver.find_element_by_css_selector("a[data-fquality='480']").click()
    time.sleep(5)
    #driver.find_element_by_link_text('Download .mp4').ActionChains.contextClick(productLink).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.RETURN).build().perform()
    
    download_url_element = driver.find_element_by_xpath("//div[@id='process-result']/div/a")
    download_url_element_value=download_url_element.get_attribute("href")
    print(download_url_element_value)
if __name__ == '__main__':
    order(data)


【问题讨论】:

  • 您希望我们决定要使用哪些参数,哪些不使用?
  • 问题是我不明白链接答案中提到的那些参数。我只想将剪贴板文本粘贴到文本字段中
  • 这是一种从剪贴板粘贴文本的方法。如果您只想粘贴文本,请使用 driver.find_element_by_xpath(xpath).send_keys(TEXT)
  • @JaSON 即使我想从剪贴板粘贴

标签: python-3.x selenium selenium-webdriver bots paste


【解决方案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的gret帖子

【讨论】:

  • 它不在我程序的类中,我应该粘贴我的完整代码以便更好地理解吗?
  • 所以基本上我可以摆脱 self 参数。还有我应该为“文本”提供什么论据,或者如何摆脱“文本”
  • 是的 - 你可以摆脱自我,它在课堂之外。 “粘贴”的文本在变量中?或者你想复制粘贴?
  • 我想从剪贴板粘贴,所需的文本已经在剪贴板中,它不存在于变量中。我真的很感激你为帮助我所做的努力
  • os.system("echo %s| clip" % text.strip()) - 它保留剪贴板中的文本
猜你喜欢
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 2011-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-14
  • 1970-01-01
相关资源
最近更新 更多