如果僱一個人7d×24h每10秒刷新一次Power BI,我需要每月支付他多少錢?
眾所周知,powerbi的計劃刷新支持每天更新8次,並且計劃時間必須是整點或者半點兩個選項,這對於很多需要及時刷新的數據來說太慢了,比如雙十一、雙十二的成交額數據,分毫必爭,錯失1分鐘可能就會產生較嚴重的問題。
更為嚴重的是,即便設定整點更新,按計劃更新所需的時間執行至少需要10分鐘。一開始我以為是數據量大的原因導致,結果,即便更換了一個報表,數據量特別小,只有一張表兩行兩列的數據,刷新時間仍然需要十幾分鍾,這我就接受不了了。(下圖)
經過各種和世紀互聯的溝(si)通(bi),並請教了國外的專家,才得到一個明確的回覆,這個事情就是這樣,沒辦法,辦不了,等著吧……
我心想,這肯定不行啊……
於是
python大法用起來
那麼問題來了,怎麼把大象裝進冰箱裡?
分三步:
第一步,買一個冰箱
第二步,買一頭大象
第三步,把大象裝進冰箱裡。
那麼舉一反三,我們就可以得出用Python大法自動刷新powerbi的步驟:
第一步,安裝python
第二步,根據powerbi網頁編寫代碼
第三步,運行代碼,葛優躺喝咖啡,美滋滋
第一步不用說了,內事不決問度娘,外事不決問谷哥
第三步也不用說了,編好了,狠狠地戳一下鼠標左鍵搞定
說一下第二步:
1.我們需要使用的庫是selenium,一個第三方的Python庫,可以模擬瀏覽器操作,是一個用於Web應用程序測試的工具。我們使用的selenium裡的webdriver模塊來操控瀏覽器。
<code>from
seleniumimport
webdriver/<code>
2.接著,打開Firefox瀏覽器,路徑是你的geckodriver.exe位置,這個在安裝軟件的時候可以設置的。
<code>brower = webdriver.Firefox(executable_path=r'C:\Program Files\Mozilla Firefox\geckodriver.exe'
)/<code>
3.打開瀏覽器要輸入網址,輸入的是這個頁面的網址,先拷貝下來,如下的格式:https://app.powerbi.cn/groups/xxxxxxxxxxxxxxxxxxxxxx/list/datasets
將下面的鏈接改成你自己的實際鏈接
brower.get("https://app.powerbi.cn/groups/xxxxxxxxxxxxx/list/datasets")
這樣selenium就創建好了一個打開的網頁,等待登陸:
4.在填寫用戶名的地方右鍵-查看元素
很明顯,我們不能手動去填寫賬號和密碼,太掉價了
發現有一個input id='i0116',我們就通過這個id來確定輸入框的位置,使用的是find_element_by_id,用send_keys輸入賬號,因為我使用的是國內的世紀互聯的賬號,你們改成自己的賬號就行,國際版國內版代碼是相同的。
<code>brower
.find_element_by_id
('i0116'
).send_keys
()/<code>
5.輸入的賬號後,我們應該點擊下一步,在下一步的按鈕處點擊右鍵-查看元素,有一個id="idSIButton9",那麼就好辦了
<code>brower
.find_element_by_id
('idSIButton9'
).click
()/<code>
這樣就到了輸入密碼的界面
6.我們發現輸入密碼界面和輸入賬號界面是集備一致的,所以直接將代碼寫出來:
<code>time
.sleep
(5
)brower
.find_element_by_id
('i0118'
).send_keys
('duqkyg-qefby1-gipGun'
)brower
.find_element_by_id
('idSIButton9'
).click
()/<code>
插入一個time.sleep(5),表示暫停5秒,因為可能網速原因導致輸入賬號後的跳轉需要一點點時間,這個可以自己調整。
這樣就直接進入到了數據集刷新的頁面:
當然,在運行之後的代碼前加入time.sleep(10),因為powerbi網頁對網速要求很高,看個人網速和電腦配置情況
7.接下來就是要獲取刷新按鈕的位置並模擬點擊了
仍然右鍵-查看元素
這裡我們使用brower.find_element_by_xpath來確定元素的位置
<code>keshi_refresh
=brower.find_element_by_xpath(".//*[@class='refreshNow pbi-glyph pbi-glyph-refresh' and @aria-describedby='主任課時提報管理datasetMenu2']"
)/<code>
確定完元素,就要模擬點擊
<code>keshi_refresh
.click
()/<code>
上圖最後一條就是剛剛按需刷新的記錄。
這樣就完成了一次刷新。
但是我們想要的是每隔10秒就進行一次刷新啊,而且是24小時不間斷?!!
只要創建一個死循環,10秒運行一下模擬點擊click()就好:
<code>while
True
:keshi_refresh
.click
()time
.sleep
(10)/<code>
效果如下:
這樣,我們就完成了利用Python來突破powerbi每天只有8次自動更新並且自動更新時間特別長的難題了。
那麼問題就來了,如果僱一個人7d×24h不間斷每10秒刷新一次Power BI,我需要每月支付他多少錢?
完整源代碼請關注【學謙數據運營】回覆“1”獲取。
————————————
以上的使用selenium創建瀏覽器模擬點擊刷新的方式已經可以做到完全不影響正常使用電腦的情況下進行。
因為前幾天有人在群裡問,我隨口說了一句,最簡單的辦法是找一臺破電腦,用按鍵精靈10秒點擊一次,需要佔用一臺電腦。如果有廢舊電腦可以打開網頁的話,是可以採用這種方式的。
但是這種方式仍然有一個小小的問題,就是需要打開一個新的瀏覽器頁面,並且如果按照10秒模擬點擊一次,其實內存消耗還是比較大的,尤其是配置比較低的電腦。那麼該怎麼辦呢?
在點擊刷新按鈕的時候,右鍵網頁-查看元素-網絡,我們發現每一次刷新,其實就是代表著這一個post請求,那麼只要我們將這個post請求的內容用Python發送出去,不就達到我們的目的了嗎
欲知後事如何,請關注本頭條號【學謙數據運營】全網同名,等待下次更新。