使用硒粘贴到文本框中

Paste into texbox using selenium

此问题主要基于对以下问题的回答

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

在调用 function.The 函数时我应该为“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 参数的函数。)

如果简单地从函数中删除“text and self”参数 即

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)


如果您的方法在 class 中,那么 self 就有意义,否则就没有意义。

self用于引用class对象本身。

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

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

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

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

的遗憾post