我创建了一个程序,使用我在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
欢迎任何输入。 感谢。
答案 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()