无论剪贴板中的数据行数是nr,都要创建变量

时间:2016-02-19 10:52:32

标签: python

我创建了一个程序,使用我在Windows剪贴板中的数据(使用像QWERTY123这样的字符串的行)在基于Web的软件(使用Selenium)中执行某些操作。这意味着对于每一行,程序从剪贴板中复制该行,粘贴到字段中并执行任务。对于所有行,此任务应以相同的方式执行。我的问题是,同样的剪贴板有2行(如下面的代码),其他时间例如20,其他77 ...等等。无论我有多少行,我怎么能修改我的代码才能工作?

请看我在这里做了什么:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

import tkinter as tk


path_to_Ie = 'C:\\Python34\\ChromeDriver\\ChromeDriver.exe' 
browser = webdriver.Chrome(executable_path = path_to_Ie)
url = 'https://wwww.corp/'
browser.get(url)


browser.find_element_by_xpath("//*[@id='username']").send_keys("user")
browser.find_element_by_xpath("//*[@id='password']").send_keys("pass")

browser.find_element_by_xpath("//*[@id='login-link']").click()

browser.get('https://wwww.corp/soft.html')

time.sleep(2)

browser.find_element_by_xpath("//*[@id='content-column']/div[4]/form/div[1]/span/label").click()

time.sleep(2)


browser.find_element_by_xpath("//*[@id='agent_list_filter_id_2']").clear()

root = tk.Tk()
# keep the window from showing
root.withdraw()

# read the clipboard
machineName = root.clipboard_get()


one1, two2 = machineName.split('\n') # generates variables for the data (2 rows) of clipboard


one = one1.replace(" ", "") #
two = two2.replace(" ", "") #

browser.find_element_by_xpath("//*[@id='agent_list_filter_id_2']").send_keys(one) # send first row data



browser.find_element_by_xpath("//*[@id='content-column']/div[4]/form/div[1]/span/span[1]").click()



browser.find_element_by_xpath("//*[@id='action-select-all']/span/span").click()



browser.find_element_by_xpath("//*[@id='action-delete']/span/span").click()


browser.find_element_by_xpath("//*[@id='btn_save']").click() # last command to delete the first row


browser.get('https://wwww.corp/soft.html')

time.sleep(2)


browser.find_element_by_xpath("//*[@id='agent_list_filter_id_2']").clear()

browser.find_element_by_xpath("//*[@id='agent_list_filter_id_2']").send_keys(two) # send 2nd row data



browser.find_element_by_xpath("//*[@id='content-column']/div[4]/form/div[1]/span/span[1]").click()



browser.find_element_by_xpath("//*[@id='action-select-all']/span/span").click()



browser.find_element_by_xpath("//*[@id='action-delete']/span/span").click()


browser.find_element_by_xpath("//*[@id='btn_save']").click() # last command to delete the 2nd row

欢迎任何输入。 感谢。

1 个答案:

答案 0 :(得分:0)

您不需要将每个剪贴板行分配给变量 - 使用split('\n')为您提供列表,其中每一行都是剪贴板中该项列表中的项目。使用该列表,您可以按下标访问每一行,即列表中项目的位置。

此外,您似乎想要从每个剪贴板行中删除所有空格?我不确定这是否符合您的要求:'Hi there you' => 'Hithereyou'。您可以在拆分之前一次性完成剪贴板数据:

rows = root.clipboard_get().replace(' ', '').split('\n')

或者,如果要在之后删除每行中的前导和尾随空格,将其拆分为行:

rows = root.clipboard_get().split('\n')
rows = [row.strip() for row in rows]    # removes leading and trailing whitespace from each row
print(rows)
print(rows[0])    # the first row
print(rows[1])    # the second row

假设后者,如果剪贴板包含例如(注意领先的空白)

    Some data from the first row
  More data on the second row

输出结果为:

['Some data from the first row', 'More data on the second row']
Some data from the first row
More data on the second row

这涵盖了基础知识。现在,查看代码的结构,对每个剪贴板行基本上做同样的事情。这意味着您可以使用循环迭代每一行并执行所需的浏览器命令:

rows = root.clipboard_get().split('\n')
rows = [row.strip() for row in rows]

for row in rows:
    browser.get('https://wwww.corp/soft.html')
    time.sleep(2)
    browser.find_element_by_xpath("//*[@id='agent_list_filter_id_2']").clear()

    browser.find_element_by_xpath("//*[@id='agent_list_filter_id_2']").send_keys(row)
    browser.find_element_by_xpath("//*[@id='content-column']/div[4]/form/div[1]/span/span[1]").click()
    browser.find_element_by_xpath("//*[@id='action-select-all']/span/span").click()
    browser.find_element_by_xpath("//*[@id='action-delete']/span/span").click()
    browser.find_element_by_xpath("//*[@id='btn_save']").click()