使用硒粘贴到文本框中
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
此问题主要基于对以下问题的回答
我的目标是将剪贴板中的文本粘贴到某个网站的某个文本字段中。
在调用 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