部分主要對於工程中的變量進行管理和設置,支持手動拖拉至右側畫布 1全局變量:全局變量可以在整個工程中傳遞,被不同的子流程或函數進行調用,全局可見可調用 2 流程參數:只對子流程設置傳入參數,供子流程內部使用 3 流程變量:只能用於當前流程中,不能被其他流程調用 最下方顯示【工程】、【運行】和【查找】信息顯示窗口,窗體可以沿着邊界線進行拖動來調整顯示的區域。窗口右上角一排按鈕,功能分別是搜索窗口信息、清空窗口信息內容、停止運行以及窗口最大化、隱藏窗口。窗口右下角有一個小手,支持面板的移動和拖拉【固定】:點擊“固定”按鈕,組件界面固定顯示在最前端,便於連續添加多個組件。
版本管理:
iS-RPA9.0設計器集成了 git 本地版本管理,所有工程版本都是自動管理,每次保存都會產生一個 add + commit,可以方便的對工程版本進行管理。由於自動保存的存在,日常編輯過程有了完全保障,可以隨意進行恢復。
拾取:
開啟拾取(F2):拾取過程中,按下F2鍵,關閉拾取;再次按下F2鍵,重新開啟拾取。 CS拾取(F3):拾取過程中,按下F3鍵,只拾取CS。 UIA拾取(F4):拾取過程中,按下F4鍵,進行細粒度拾取,拾取更細化。 圖片拾取(F5):拾取過程中,按下F5鍵,將切換為圖片拾取的方式,當鼠標變為截圖標志時,進行拖選截圖即可。
IE拾取(F6):拾取過程中,按下F6鍵,只拾取IE。
JAVA拾取(F7):拾取過程中,按下F7鍵,只拾取JAVA。
區域拾取(F8):用於拾取所選區域中的位置進行鼠標點擊。先選擇需要拾取的控件區域,再按下F8,在用鼠標移動到該區域中需要鼠標點擊的位置,即可完成拾取。在運行時會點擊該區域中設置的鼠標位置進行點擊。
Chrome拾取(F9):拾取過程中,按下F9鍵,只拾取Chrome。
Firefox拾取(F10):拾取過程中,按下F10鍵,只拾取Firefox。
退出錄制拾取(F12):結束並保存錄制流程。
“窗口標題”:
記錄控件所在的窗口的標題信息。勾選上則表示在操作該步驟前會進行激活窗口的操作,如去掉勾選,則不會進行窗口激活的操作。
模擬按鍵
用於完成鍵盤的輸入操作。通過鼠標右鍵選擇【模擬按鍵】。 注:模擬的是真實的鍵盤輸入操作,如部分控件無法拾取,可先通過鼠標點擊控件,獲得輸入光標后,再進行鍵盤的##輸入操作。 將需要填寫的內容直接在設置中輸入即可,需要加單引號。輸入的內容也可以通過變量進行傳遞調用,輸入的內容也##可以通過變量進行傳遞調用 如需連續操作多次設置的按鍵,在按鍵后加入空格和次數即可。
鍵盤-熱鍵輸入
可通過設置組合快捷鍵的方式來完成相關的快捷鍵操作,在頁面或程序當中如果快捷鍵的設定,使用該方法較佳。 在下拉框中也可以輸入自定義的按鍵,如a,合起來就是Ctrl+a的熱鍵操作,用於全選。
鍵盤-控件輸入
控件輸入適用於所有瀏覽器中網銀的密碼輸入,安裝完銀行的控件后,用控件輸入拾取密碼輸入的元素框, 就可以實現密碼數據的輸入。可手工輸入文本內容,也可以通過變量的方式調用。變量使用見《變量》章節。
控制-Check
通過對CheckBox類型控件(復選框)的拾取,對復選框進行勾選和去勾選的操作。 拾取的時候需要注意,需要拾取到單獨的復選框,而不能拾取到外層的整個框體。
圖片-截圖
通過截取設置的區域位置,對區域內進行截屏並在本地生成圖片的操作,需要在“圖片位置”中選擇圖片保存在本地的路徑。 截圖組件可設置返回值,返回的是圖片的絕對路徑,可用變量保存該返回值。
關閉網頁標簽欄
熱鍵輸入:ctrl+w
try:
一開始流程先進開始,開始后面的代碼發生異常的話,就走異常后面的代碼,最后無論發生沒有發生異常,都會走結束
merge
該組件主要用於將從兩個excel文件或兩個Sheet頁中讀取出的DataFrame數據集進行數據合並的操作。
列重命名
對表格列進行重命名的操作。 【df】中選擇DataFrame數據集 【src_field】選擇原列名 【dst_field】選擇修改后的列名
RPADe解鎖屏,是否鎖屏等組件,Remote解鎖實現服務器遠程連接客戶端機器。
時間
當前時間&日期 當前日期 當前時間 格式化為字符:將date日期按指定格式返回為字符串。 格式化為時間 時間相差天數 時間前|后(n)天 獲取年 獲取月 獲取日 獲取時 獲取分 獲取秒 獲取周幾
設置顏色
字體顏色,范圍背景顏色
范圍刪除內容
zip:
【src_file】 需要解壓的文件 例如 src_file = r’D:\abc\新建文abc.zip’ 多個文件夾解壓,逗號隔開 src_file = r’C:\11\test2.zip,C:\11\test1.zip’ 【dst_file】 解壓之后的全路徑 例如 dst_file = r’D:\xlss\aaaaa’ 【密碼】 給壓縮后的文件設置密碼。
zip解壓
zip解壓就是把壓縮文件解壓出來。 【src_file】 需要解壓的文件 例如 src_file = r’D:\abc\新建文abc.zip’ 【dst_file】 解壓之后的全路徑 例如 dst_file = r’D:\xlss\aaaaa’
OCR
內置的OCR功能需要調用百度的庫進行識別,因此需要連接外網才可以。
另外需要注意的是,OCR功能每天有使用次數的限制:驗證碼每天100次, 通用文字每天200次,身份證和營業執照每天各10次; 能夠滿足日常的測試與使用,若是超過則只能通過其他方式繼續使用了。
殺死進程
import osos.system('taskkill /F /IM notepad.exe')
開啟RPA的時候,盡量使用使用管理員的方式打開
字符編碼錯誤
要是中文字符串出現過多的話導致錯誤,None=-UTF-8 code 的情況發生的話,就在 "C:\ueba\studio-v6\config\language\language_cn.json"中打開這個文件,然后把“# 編譯日期:”,把它修改為“#coding=utf-8\n# 編譯日期:”,保存。重新打開設計器
模擬中軸滾動
1 使用cmd切換到RPA工作的python路徑,pip install pywin32 2 在RPA項目中創建一個全局函數組件 import win32api import win32con # -a代表下移的距離,自己設置即可 def test_1(a): win32api.mouse_event(win32con.MOUSEEVENTF_WHEEL,0,0,-a) 3 在全局函數之前加上鼠標點擊組件 4 在自己的項目中運行即可
關於設置文本獲取不到元素
在登錄工商銀行的時候,發現文本框獲取不到,這樣的話可以時候ctrl+點擊就可以獲取到元素了
輸入密碼的時候,使用控件輸入
圖片驗證碼的時候,使用截圖先截下來,然后使用獲取OCR文本,使用全局函數獲取
def idcode_check(ocr_code): code=(re.sub("0-9A-Za-z","",ocr_code)) return code
鼠標拖拽功能
from ctypes import * from ctypes.wintypes import * def imouse_drag(x1, y1, x2, y2,button='left',speed=10): try: dll = windll.LoadLibrary("../Com.Isearch.Func.AutoIt/AutoItX3.dll") return dll.AU3_MouseClickDrag(button,x1,y1,x2,y2,speed) except Exception as e: raise e
可以使用全局函數包裝,然后x1,y1就是鼠標開始的位置,然后將目標位置的元素拖拽到x2,y2的位置
在設計器中嘗試解析 PDF 數據
首先,你需要一個解析 pdf 的包,我們在 iS-RPA5.0 之后內置了 pdfplumber 的包,選擇他的主要原因是這個包對表格處理比較好,而且他是 python 的原裝包,不是 java 之類轉過來的包,那么我們看看簡單的例子:
import pdfplumber #導入pdf包 import re #導入正則表達式包 pdf = pdfplumber.open("path/to/file.pdf") #加載pdf page0 = pdf.pages[0] #取出第一頁,你可以用for來遍歷所有頁面 tables = page0.extract_tables() #從page0里面取出多個tables texts = page0.extract_text() #從page0里面取出所有文本 results = re.findall(r"([0-9]{1,3}(,[0-9]{3})*\.[0-9]+)", texts) #從文本中提取帶千分位和小數點的數字
請注意,pdfplumber 缺省通過表格線來區分行和列,所以下列情況是無法提取出表格的:* 你的表格是圖片,通過選擇可以確定是否圖片* 你的表格不是用線來分隔,或者分隔不全,例如列用線,行沒線這種情況下,你就需要嘗試:page0.extract_tables(table_settings={})
table_settings 的寫法參考:Github 上的 Pdfplumber這個需要大家多多嘗試,另外正則表達式學習也是很關鍵的,因為你可以使用正則表達式來提取 page0.extract_text() 中提取到的文本。
查閱:http://support.i-search.com.cn/article/1540084292275
將 PDF 轉化為圖片
遇到一個項目,需要將 PDF 文件的某一頁 P 一張圖片上去,我的思路為先將 PDF 文件轉為圖片,再把兩張圖片合成,再將合成好的圖片轉為 PDF,本文將分享如何將 PDF 文件轉為圖片。通過查資料除了 wand 我嘗試過多種方法,但是其他方法貌似都是對 linux 的支持比較好,最后我用 wand 在 windows 上運行成功了。用到 python 的三個庫:io、wand、PyPDF2,涉及 wand 中的 image 類、color 類,PyPDF2 中的中的 PdfFileReader、PdfFileWriter 類。wand 庫對於圖片的處理功能還是比較強大的,wand 的 image 類依賴 ImageMagick,因此在使用 wand 之前我們需要先在電腦中安裝 ImageMagick,ImageMagick 是一個免費的創建、編輯、合成圖片的軟件。這里我遇到兩個坑:1.32 位、64 位的 python 與 32 位、64 位的 ImageMagick 兼容問題,大家在安裝前先檢查好自己的 python;2.python3 目前還不兼容 ImageMagick7 以上的版本,而 ImageMagick 的官網上下載不到 7 以下的版本,這里我把文件放在這里:c2f3a13453f14f06bfe7c29724da4d88_ImageMagick6.rar ,里邊包含 6 版本的 32 位與 64 位的 ImageMagick。就是以下報錯信息困擾了我好久:(這里完全看不出來是兼容性的問題 (┬_┬))安裝完成后,將 ImageMagic 添加到環境變量
以下為代碼加注解:
import io from wand.image import Image from wand.color import Color from PyPDF2 import PdfFileReader, PdfFileWriter def pdf_convert(filename, page, res=120): #初始化PdfFileReader對象 pdfile = PdfFileReader(filename, strict=False) idx = page + 1 #從此PDF文件中按編號檢索頁面 pageObj = pdfile.getPage(page) #創建PdfFileWriter對象,通常PdfFileReader生成的頁面的情況下,用此對象編寫PDF文件 dst_pdf = PdfFileWriter() #在PdfFileWriter中添加頁面,該頁面通常從PdfFileReader實例獲取 dst_pdf.addPage(pageObj) #BytesIO實現了在內存中讀寫bytes,來操作二進制數據 pdf_bytes = io.BytesIO() #將添加到此對象的頁面集合作為PDF文件寫出 dst_pdf.write(pdf_bytes) #設置文件指針從0開始 pdf_bytes.seek(0) #創建Image對象(支持with)將文件流傳入(resolution為分辨率參數) with Image(file=pdf_bytes, resolution=res) as img: #img = Image(file=pdf_bytes, resolution=res) #設置圖片格式為png img.format = 'png' #img.compression_quality = 90 #設置背景顏色 img.background_color = Color("white") #保存到當前路徑並標記頁碼(rindex返回字符最后出現的位置) img_path = '%s%d.png' % (filename[:filename.rindex('.')], idx) #以此文件名保存圖片 img.save(filename=img_path) #img.destroy()
本代碼實現了將一頁 PDF 轉化為圖片,多頁只需要加循環修改 page 的值即可。有問題歡迎大家交流,有不足的地方歡迎大家指正。另附:PdfFileReader 文檔:https://pythonhosted.org/PyPDF2/PdfFileReader.htmlPdfFileWriter 文檔:https://pythonhosted.org/PyPDF2/PdfFileWriter.htmlwand.image 文檔:http://docs.wand-py.org/en/latest/wand/image.html
解析pdf文件
import pdfplumber import re #加載pdf文件 pdf=pdfplumber.open('C語言程序設計(第四版) 譚浩強著 高清晰版.PDF') #取出第一頁,也可以用for來遍歷所有頁面 page0=pdf.pages[12] #從page0中取出多個tables tables=page0.extract_tables() #從page0中取數所有文本 texts=page0.extract_text() print(texts)
excel與word互轉
# coding=utf-8 import pandas as pd from docx import Document from docx.shared import Pt from docx.shared import Inches from docx.oxml.ns import qn def excel_to_word(): excel_path = 'C:\\isearch\\excel_sourse.xlsx' df = pd.read_excel(excel_path,header = None) df = df.fillna('') df_list = df.values document = Document() document.add_heading(df_list[0][0],1) document.add_heading(df_list[1][0],2) for i in range(2,len(df_list)): if df_list[i][1] == '' and df_list[i][2] == '' and df_list[i][3] == '' and df_list[i][0]: if df_list[i][0].startswith('('): document.add_heading(df_list[i][0],3) else: document.add_heading(df_list[i][0],2) else: if df_list[i][0]: document.add_paragraph(df_list[i][0]+':'+str(df_list[i][1])) if df_list[i][2]: document.add_paragraph(df_list[i][2]+':'+str(df_list[i][3])) document.save('C:\\isearch\\out_word.docx') def word_to_excel(): df = pd.DataFrame(columns=('1', '2', '3','4','5')) d = Document('C:\\isearch\\out_word.docx') title_index_list = [] index_tuple_list= [] for i in range(len(d.paragraphs)): if d.paragraphs[i].style.name != 'Normal': title_index_list.append(i) for i in range(len(title_index_list)-1): if title_index_list[i+1] - title_index_list[i] !=1 : index_tuple_list.append([title_index_list[i]+1,title_index_list[i+1]]) index_tuple_list.append([title_index_list[-1]+1,len(d.paragraphs)]) tmp_dict_list = [] for i in range(len(index_tuple_list)): tmp_dict = {} for j in range(index_tuple_list[i][0],index_tuple_list[i][1]): tmp_value = d.paragraphs[j].text tmp_list = tmp_value.split(':') tmp_dict[tmp_list[0]] = tmp_list[1] tmp_dict_list.append(tmp_dict) for i in range(len(d.paragraphs)): if d.paragraphs[i].style.name != 'Normal': title_index_list.append(i) tmp_dict_list_index = 0 for i in range(len(title_index_list)-1): df.loc[len(df)] = ['' for n in range(5)] df.iloc[-1,0] = d.paragraphs[title_index_list[i]].text if title_index_list[i+1] - title_index_list[i] != 1 : df.loc[len(df)] = ['' for n in range(5)] df.loc[len(df)] = ['' for n in range(5)] tmp_key_list = [] for key in tmp_dict_list[tmp_dict_list_index].keys(): tmp_key_list.append(key) for i in range(len(tmp_key_list)):
python 轉換 word,excel,ppt 到 pdf
需要使用的 win32com 庫產品自帶,無需額外導入。
from win32com import client #word轉換為pdf def word_to_pdf(): w = client.Dispatch("Word.Application") doc = w.Documents.Open('d:\\test\\a.docx') doc.ExportAsFixedFormat('D:\\test\\word.pdf', client.constants.wdExportFormatPDF) w.Quit() #excel轉換為pdf def excel_to_pdf(): xlApp = client.Dispatch("Excel.Application") books = xlApp.Workbooks.Open('d:\\test\\b.xlsx') books.ExportAsFixedFormat(0, 'D:\\test\\excel.pdf') xlApp.Quit() #ppt轉換為pdf def ppt_to_pdf(): p = client.Dispatch("PowerPoint.Application") ppt = p.Presentations.Open('d:\\test\\c.pptx', False, False, False) ppt.ExportAsFixedFormat('D:\\test\\ppt.pdf', 2, PrintRange=None) p.Quit()
驗證碼相關
http://support.i-search.com.cn/article/1546840042899 滑動驗證碼和點擊驗證碼詳情
百度圖像識別API
-
注冊百度雲賬號,注冊並登陸。http://ai.baidu.com/
-
登陸百度雲,進入控制台,再進入應用列表創建應用,得到相應的 key
-
將 key 作為參數放到代碼中后,進行簡單的文本識別
-
在使用前安裝aip (pip install baidu-aip)
-
from aip import AipOcr """ 你的 APPID AK SK """ APP_ID = '14404096' API_KEY = '67LMmai5y0CGA7NoHiUb9hSf' SECRET_KEY = ''xxx" client = AipOcr(APP_ID, API_KEY, SECRET_KEY) def get_file_content(filePath): with open(filePath, 'rb') as fp: return fp.read() image = get_file_content('path') """ 調用通用文字識別, 圖片參數為本地圖片 """ print(client.basicGeneral(image))
-
測試后的識別結果
-