selenium 可以使用 driver.execute_script(js) 來執行部分JS代碼。雖然 selenium 自動化測試工具本質上是模擬人的部分操作,但是它所具備的功能讓他可以突破人的極限去做一些事情,甚至可以做到一些連人都做不到的事情。
比如說在驗證碼輸入錯誤以後,給出用戶重新輸入的提示信息:
driver.find_element_by_xpath(login_button).click() # 點擊登錄
time.sleep(SHORT_PROTECTION_TIME) # 等待片刻再去點擊彈窗確認按鈕
while True:
try:
driver.switch_to.alert.accept() # 試圖點擊彈窗
except NoAlertPresentException:
break # 沒有彈窗,表示驗證碼輸入正確,退出循環
else: # 有彈窗並已經點掉,則給出提示並等待重新輸入驗證碼
print("請在網頁重新輸入正確的驗證碼!")
js = """
var span = document.createElement('span');
span.innerHTML = '請在10秒內重新輸入正確的驗證碼!';
span.style.position = 'absolute';
span.style.top = '49%';
span.style.left = '47%';
span.style.color = 'red';
span.style.fontSize = '20px';
document.body.appendChild(span);
setTimeout(function() {document.body.removeChild(span)},9000);
"""
driver.execute_script(js)
time.sleep(LONG_PROTECTION_TIME / 2) # 等待重新輸入驗證碼
driver.find_element_by_xpath(login_button).click() # 點擊登錄
time.sleep(SHORT_PROTECTION_TIME) # 等待片刻再去點擊彈窗確認按鈕