艺赛旗RPA 网页处理系列(四):网页表格中获取数据,并点击相应记录后的按钮操作说明总结
目前藝賽旗RPA已經更新到8.0版本,可以讓所有用戶免費下載試用http://www.i-search.com.cn/index.html?from=line1 (復制鏈接下載)
最近有很多同學都在問如何取得網頁表格里的數據?如何根據表格里的數據點擊相應的操作?
這兩個問題實際上在我們的社區里已經有相關的帖子了,但還是很多人會問,也不會操作
- 第一個問題,可參考 如何從 table 中取出數據 6.0 版本
- 第二個問題,可參考 點擊網頁表格中特定行里面的一個操作按鈕
在這里我做一個總結,并一步步的操作說明供大家參考
在實際操作之前,你需要做以下幾件事情:
把上面兩個帖子可以先瀏覽一下
了解一些 css selector 的知識,我也不是專家,這里不做總結 ?,也是百度里搜資料看,大家也要養成自學的一些技能
學會一些審查網頁元素的小技巧,可參考 網頁檢查 / 審查小技巧
需要了解一些 python 語言 pandas 的知識
需求實現說明
好了,我們先來說一下需求,我需要在表格中找到產品代碼為 test120 的記錄,并點擊對應的刪除按鈕。截圖如下
那么在解決這個問題的時候,首先就是要先能獲取到表格數據并匹配到相應的記錄(如 test120),然后再找到該記錄對應的刪除按鈕進行點擊操作,因此大致可以分為兩個部分,也就是開篇說的第一個和第二個問題的集合。
獲取網頁表格數據
3.1 拾取網頁表格
使用一個可拾取的組件來拾取表格,這里用【鼠標點擊】組件來操作
這里需要注意,拾取的時候要拾取整個網頁的表格,而不是表格中的某一個內容,正確拾取如下圖所示
也可以通過設計器里的圖片預覽功能驗證你拾取的對不對
3.2 獲取網頁表格的 selector
【鼠標點擊】組件的查找路徑中,選擇 selector
7289e87543b148e5b30cbcfa442e6337_E5DA75892CE647CB8DDAE307D2AE570B.png
選擇后通過編譯,看下對應的代碼
selector=r’body > DIV:nth-of-type(1) > FORM:nth-of-type(1) > DIV:nth-of-type(2) > DIV:nth-of-type(1) > TABLE:nth-of-type(1)'這種最后一個 > 后面是 TABLE 標簽的,就是我們想要的。
3.3 獲取表格中數據
通過使用以下代碼獲取表格里的數據,這里不做詳述,可復制使用
可以通過函數或代碼塊的方式調用
import ubpa.iie as iie
import re
import pandas as pd
#把3.2章節當中selector=后面的代碼復制到這里
table_string = iie.get_html(title=r’理財管理’,selector=r’body > DIV:nth-of-type(1) > FORM:nth-of-type(1) > DIV:nth-of-type(2) > DIV:nth-of-type(1) > TABLE:nth-of-type(1)’)
tb_start = re.compile(’’)
tb_end = re.compile(’’)
last_str = tb_end.sub(’’, tb_start.sub(’’, table_string))
#調用了pandas中的read_html方法,注意header=0,有些表格header不是0
data = pd.read_html(last_str, flavor=“bs4”, header=0)[0]
#這一步把‘產品代碼’這列轉為字符串,可能有None或者數字
data[‘產品代碼’] = data[‘產品代碼’].apply(str)
#打印data
print(data)
print(’-------------------’)
#通過這個,你可以看到data有哪些列
print(data.columns)
實際上【鼠標點擊】組件的目的就是為了獲取網頁表格的 selector 而已,獲取后該組件就可以刪掉了
運行結果如下:
到此就成功獲取了當前網頁表格中的所有數據,我們想要刪除的 test120 的數據記錄也在其中
需要注意,通過 pandas 讀取出來的數據都是 dataframe 類型的數據集
3.4 過濾提取數據
使用【數據過濾】組件,對剛剛獲取的 dataframe 類型變量 data 進行數據過濾,并返回給變量 data2
37276cb9b78b4bf08d27f5fd19c6c80c_279E22E4D20E418D847B4D7FB6DCF5AA.png
我們已經獲取到了產品代碼為 test120 的數據記錄
3.5 獲取記錄的行編號
#獲取行編號,這是一個數組list,如果有多個記錄,在list中就會有多個元素
#如果index里有多個值,也就代表了多個記錄,可以使用循環遍歷操作,這里不做詳述,交給你們了
print(data2.index)
#獲取編號里的第一個元素單位
print(data2.index[0])
運行結果:
說明該記錄在這里的 index 是 3
4.1 找規律
通過組件拾取獲得組件的 selector,并找到規律
先拾取 test120 這條記錄對應的刪除按鈕
獲取的 test120 這條記錄的 selector 如下
‘#boxTable > TBODY:nth-of-type(1) > TR:nth-of-type(5) > TD:nth-of-type(8) > A:nth-of-type(2) > B:nth-of-type(1)’
我們再分別獲取前面 3 個記錄刪除按鈕的 selector,看看有什么規律可循
#頁面第1??條記錄
‘#boxTable > TBODY:nth-of-type(1) > TR:nth-of-type(2) > TD:nth-of-type(8) > A:nth-of-type(2) > B:nth-of-type(1)’
#頁面第2??條記錄
‘#boxTable > TBODY:nth-of-type(1) > TR:nth-of-type(3) > TD:nth-of-type(8) > A:nth-of-type(2) > B:nth-of-type(1)’
#頁面第3??條記錄
‘#boxTable > TBODY:nth-of-type(1) > TR:nth-of-type(4) > TD:nth-of-type(8) > A:nth-of-type(2) > B:nth-of-type(1)’
#test120記錄
‘#boxTable > TBODY:nth-of-type(1) > TR:nth-of-type(5) > TD:nth-of-type(8) > A:nth-of-type(2) > B:nth-of-type(1)’
這下能發現出什么了么?
test120 在數據表格里的 index 是 3(3.5 章節)
而對應的刪除按鈕的TR:nth-of-type(5)是 5
那只要申明一個變量,變量的內容就是 index+2,用變量的方式替換TR:nth-of-type(5)里面寫死的值不就可以了么
4.2 申明變量
根據 4.1 章節中所得邏輯,先聲明一個變量 test,用于存放會變化的值
#在設計器代碼窗口中,將鼠標拾取刪除按鈕的selector=后面的代碼復制過來,并賦值給test變量
#可使用代碼塊組件進行變量的賦值
test = r’#boxTable > TBODY:nth-of-type(1) > TR:nth-of-type(%d) > TD:nth-of-type(8) > A:nth-of-type(2) > B:nth-of-type(1)’%(data2.index[0] + 2)
4.3 鼠標點擊刪除按鈕實現
這一步也是最簡單的,只要將 test 變量直接填入【鼠標點擊】組件的查找路徑中即可
至此,一個簡單的網頁表格中獲取數據,并點擊相應記錄后的按鈕操作就完成了。
完整運行后的結果
如果當前頁面有多條記錄需要做刪除操作,就需要使用循環來實現,這里就不說了,就交給各位同學去做了
針對此場景,我們也會推出操作說明視頻及參考工程,不過最主要的還是要大家自己動手去學習是試。 ?
總結
以上是生活随笔為你收集整理的艺赛旗RPA 网页处理系列(四):网页表格中获取数据,并点击相应记录后的按钮操作说明总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Genius In Our Lives
- 下一篇: 乔安智联未能找到使用指定服务器,智联物联