使用Robot機器人框架實現自動化操作

banq發表於2022-03-11

RPA只是一種自動執行重複性任務的方法,這些任務通常由人類使用軟體機器人完成。這些通常是在 Web 瀏覽器、MS Excel、電子郵件客戶端等圖形使用者介面 (GUI) 中完成的任務……
開源RPA專案有Robot FrameworkTagUI,Robot Framework 擁有最多的 GitHub 明星,並得到廣泛社群的支援。是 Python 之上的一層非常酷,因此很容易將自定義 Python 程式碼插入到機器人中。
Robot Framework是一個用python語言開發的自動化測試框架。機器人框架支援大多數型別的功能測試,例如使用者介面測試(UI)、後端測試(如 REST 服務測試)甚至資料庫測試。

Robot框架把你的典型程式語言的功能稱為關鍵字。我們將定義一些關鍵字,以便我們能夠抽象出一些你在瀏覽器中處理網站時遇到的粗糙邊緣。特別是,網站是非同步載入許多元素的野獸,這意味著元素可能還不可見或未啟用。
機器人的速度本來就比人類快得多,所以如果你不小心,你的機器人很容易因為使用者介面尚未準備好或因為其他競賽條件的出現而出錯。
當然,你可以在你的程式碼中插入睡眠語句,這將模擬人類會遇到的時間,但這是一種反模式,因為:
  • 新增sleep睡眠語句會使你的機器人變得更慢
  • 時間可以根據網路、後端伺服器、甚至你的計算能力而變化。

相反,我們將建立一些輔助關鍵字,等待元素的可見和啟用,甚至在頁面載入時間過長或發生意外錯誤時引入一個重試迴圈。
這個關鍵字是:Wait Until Element Ready

Wait Until Element Ready Inner
    [Arguments]    ${locator}    ${timeout}=None

    Wait Until Page Contains Element    ${locator}    ${timeout}
    Wait Until Element Is Visible    ${locator}
    Wait Until Element Is Enabled    ${locator}
    Scroll Element Into View    ${locator}
    
    Wait Until Element Is Visible    ${locator}
    Wait Until Element Is Enabled    ${locator}
    Scroll Element Into View    ${locator}

Wait Until Element Ready
    [Arguments]    ${locator}    ${timeout}=None
    Wait Until Keyword Succeeds    3   1s    Wait Until Element Ready Inner    ${locator}    ${timeout}



接下來,我們將定義Click Element When Ready,它是使用Wait Until Element Ready,然後點選該元素。

Click Element When Ready Inner
    [Arguments]    ${locator}
    Wait Until Element Ready    ${locator}
    ${element}=    Get WebElement     ${locator}
    Click Element    ${element}
    [Return]    ${element}

Click Element When Ready
    [Arguments]    ${locator}
    Wait Until Keyword Succeeds    3   1s    Click Element When Ready Inner    ${locator}


為了使我們能夠恢復同一個瀏覽器會話,這將有助於我們避免Todoist在每次登入時向我們傳送電子郵件,我們將借用這篇文章中的一個技巧。

Open Browser Profiled
    [Arguments]    ${url}
    ${options}=    Evaluate    sys.modules['selenium.webdriver'].ChromeOptions()    sys, selenium.webdriver
    Call Method    ${options}    add_argument    --user-data-dir\=${USER_DATA_PATH}
    Create WebDriver    Chrome    chrome_options=${options}
    Go To    ${url}


詳細原始碼:github.com/redgeoff/grocery-shopping-bot
點選標題更多
 

相關文章