自動化福音(爬蟲、辦公、測試等) SeleniumBase 使用筆記(三)
SeleniumBase 製作WEB使用者使用導覽,並匯出 JS
SeleniumBase 包含強大的 JS 程式碼生成器,用於將 Python 轉換為 JavaScript,而製作使用者導覽,就是其中的應用之一,使用者導覽能將 SaaS 產品採用率提高 10 倍或更多
目錄
- 建立導覽 的API
- 新增導覽步驟 API
- 播放導覽 API
- 匯出 JS API
- 啟用命令
- 例子
- 執行效果
建立導覽
建立導覽需要使用特定的方法(API)來編寫 Py 指令碼,支援 5 個 JavaScript 庫
# 最短版本
# name 如果同時建立多個導覽,請使用它來標記。
self.create_tour(name=None, theme=None) # 預設使用 IntroJS
# 利用 Shepherd JS 建立
# theme 可選"light"/"arrows", "dark", "default", "square", and "square-dark"
self.create_shepherd_tour(name=None, theme=None) # 等同於:self.create_tour(theme="shepherd")
# 利用 Bootstrap Tour 庫建立
self.create_bootstrap_tour(name=None) # 等同於:self.create_tour(theme="bootstrap")
# 利用 IntroJS 庫建立
self.create_introjs_tour(name=None) # 等同於:self.create_tour(theme="introjs")
# 利用 DriverJS 庫建立
self.create_driverjs_tour(name=None) # 等同於:self.create_tour(theme="driverjs")
# 利用 Hopscotch Library 建立
self.create_hopscotch_tour(name=None) # 等同於:self.create_tour(theme="hopscotch")
新增導覽步驟
要新增遊覽步驟,請使用以下方法:
# 引數說明:
# message 要顯示的訊息
# selector 要附加到的元素的 CSS 選擇器
# name 如果同時建立多個導覽,請使用它來標記。
# title 顯示在郵件上方的其他標題文字。
# theme 設定網站導覽的預設主題。
# alignment 從top", "bottom", "left", "right"中進行選擇。(“top”是預設值,但是 Hopscotch 和 DriverJS 預設 bottom )
# duration 自動執行下一步時的延遲(僅限 Bootstrap 主題生效)
self.add_tour_step(message, selector=None, name=None, title=None, theme=None, alignment=None, duration=None,)
播放導覽
使用以下方法播放導覽:
# 引數:
# name 如果同時建立多個導覽,請使用它來標記。
# interval 表示將在經過 n 秒後,自動重播
self.play_tour(name=None, interval=0)
匯出導覽
如果要將建立的遊覽儲存為 JavaScript 檔案,請使用下方方法,匯出後的JS,複製到“開發者工具》控制檯”中,提前開啟對應的網站,即可執行:
# name=指定標記匯出,filename=js檔案
self.export_tour(name=None, filename="my_tour.js")
啟用命令
使用下面的命令,直接執行指令碼
# 正常啟動
pytest my_tour.py
# 禁用網站內容的安全策略(不一定對此網站有效),
pytest my_tour.py --disable-csp
例子
例子啟動命令:pytest my_tour.py --firefox --disable-csp
使用火狐瀏覽器,並禁用CSP,CSP是一種安全策略,它允許網站不去載入外部JS。
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""
@ Project : selenium-base-student
@ File : my_tour.py
@ Author : yqbao
@ Version : V1.0.0
@ Description : my_tour
"""
from seleniumbase import BaseCase
BaseCase.main(__name__, __file__)
class MyTourClass(BaseCase):
def test_taobao_tour_intro_js(self):
self.open('https://www.taobao.com/') # 開啟頁面
self.wait_for_element('div.main .main-inner') # 等待頁面元素可見
self.create_tour() # 建立,這等同:self.create_tour(theme='IntroJS')
self.add_tour_step("歡迎來到淘寶網!", title="開始使用者導覽") # 新增步驟,指明開始
self.add_tour_step('商品搜尋框', "input#q", alignment='bottom') # 下方
self.add_tour_step('搜尋', "button.btn-search", alignment='bottom')
self.add_tour_step("您如果有賬號,則登入點這個裡。", 'div.member-ft a:nth-of-type(1)', alignment='bottom')
self.add_tour_step("您如果沒有賬號,則點這個裡可以註冊屬於您自己的賬號。", 'div.member-ft a:nth-of-type(2)',
alignment='bottom')
self.add_tour_step("分類欄,可以幫助你按照類別查詢。", 'div.J_Service ', alignment='right') # 右側
self.add_tour_step("你已經學會使用淘寶啦。", title="使用者導覽結束") # 新增步驟,指明結束
self.export_tour(filename="taobao_introjs_tour.js") # 匯出導覽js
self.play_tour() # 播放導覽
執行效果
例子執行效果
匯出的JS
//////// Load Tour Start Page (if not there now) ////////
if (window.location.href != "https://www.taobao.com/") {
window.location.href="https://www.taobao.com/";
}
//////// Resources ////////
function injectCSS(css_link) {var head = document.getElementsByTagName("head")[0];var link = document.createElement("link");link.rel = "stylesheet";link.type = "text/css";link.href = css_link;link.crossorigin = "anonymous";head.appendChild(link);};
function injectJS(js_link) {var head = document.getElementsByTagName("head")[0];var script = document.createElement("script");script.src = js_link;script.defer;script.type="text/javascript";script.crossorigin = "anonymous";script.onload = function() { null };head.appendChild(script);};
function injectStyle(css) {var head = document.getElementsByTagName("head")[0];var style = document.createElement("style");style.type = "text/css";style.appendChild(document.createTextNode(css));head.appendChild(style);};
injectCSS("https://cdn.jsdelivr.net/npm/intro.js@5.1.0/minified/introjs.min.css");
injectStyle(" .introjs-button.introjs-nextbutton, .introjs-button.introjs-donebutton { color: #fff !important; background-color: #367be5 !important; border: 1px solid #245ac0 !important; text-shadow: none; box-shadow: none; } .introjs-button.introjs-nextbutton:hover, .introjs-button.introjs-donebutton:hover { color: #fff !important; background-color: #245ac0 !important; border: 1px solid #245ac0 !important; } .introjs-button { box-sizing: content-box; text-decoration: none; } .introjs-button.introjs-skipbutton { color: #367be5; } .introjs-tooltip, .introjs-floating { box-sizing: content-box; position: absolute; }");
injectJS("https://cdn.jsdelivr.net/npm/intro.js@5.1.0/intro.min.js");
//////// Tour Code ////////
function loadTour() { if ( typeof introJs !== "undefined" ) {
// IntroJS Tour
function startIntro(){
var intro = introJs();
intro.setOptions({
steps: [
{
intro: '<font size="3" color="#33477B"><center><b>開始使用者導覽</b></center><hr>歡迎來到淘寶網!</font>',
position: 'top'},{element: 'input#q',
intro: '<font size="3" color="#33477B">商品搜尋框</font>',
position: 'bottom'},{element: 'button.btn-search',
intro: '<font size="3" color="#33477B">搜尋</font>',
position: 'bottom'},{element: 'div.member-ft a:nth-of-type(1)',
intro: '<font size="3" color="#33477B">您如果有賬號,則登入點這個裡。</font>',
position: 'bottom'},{element: 'div.member-ft a:nth-of-type(2)',
intro: '<font size="3" color="#33477B">您如果沒有賬號,則點這個裡可以註冊屬於您自己的賬號。</font>',
position: 'bottom'},{element: 'div.J_Service ',
intro: '<font size="3" color="#33477B">分類欄,可以幫助你按照類別查詢。</font>',
position: 'right'},{
intro: '<font size="3" color="#33477B"><center><b>使用者導覽結束</b></center><hr>你已經學會使用淘寶啦。</font>',
position: 'top'},]
});
intro.setOption("disableInteraction", true);
intro.setOption("overlayOpacity", .29);
intro.setOption("scrollToElement", true);
intro.setOption("keyboardNavigation", true);
intro.setOption("exitOnEsc", true);
intro.setOption("hidePrev", true);
intro.setOption("nextToDone", true);
intro.setOption("exitOnOverlayClick", false);
intro.setOption("showStepNumbers", false);
intro.setOption("showProgress", false);
intro.start();
$tour = intro;
};
startIntro();
} else { window.setTimeout("loadTour();",100); } }
loadTour()
在火狐瀏覽器“開發者工具》控制檯”中複製匯出的JS執行
導覽,瞭解更多見這裡
GitHub SeleniumBase
本文章的原文地址
GitHub主頁