哈爾濱建站在線咨詢做好網(wǎng)絡(luò)推廣
5 、 鼠標鍵盤操作
? ?? ?在瀏覽器中,通常會用到鼠標來進行操作,比如右鍵菜單中選擇一個操作,在 selenium 中提供了下列鼠標相關(guān)操作。
? ?? ?ActionChains 類提供了以下方法:
- 點擊鼠標:click()
- 右擊鼠標:context_click()
- 雙擊鼠標:double_click()
- 拖拽元素:drag_and_drop()
- 長按鼠標:click_and_hold()
- 移動鼠標到元素上:move_to_element()
- 右擊鼠標:context_click()
- 模擬鍵盤上下鍵滾動:send_keys(Keys.PAGE_DOWN) 或 send_keys(Keys.PAGE_UP)
- 模擬鼠標滾輪滾動:execute_script(“window.scrollTo(0, document.body.scrollHeight);”)
5.1 鼠標右擊
? ?? ?context_click()是Selenium庫中的一個方法,它可以模擬鼠標右鍵點擊操作。在瀏覽器中,右鍵點擊會彈出一個菜單,該菜單顯示了可用于該元素的所有操作。context_click()方法可用于執(zhí)行此操作并選擇要執(zhí)行的操作。
? ?? ?模擬用戶在 LMD 登陸界面,在輸入郵箱地址的輸入框右鍵,但是這里本身沒有定義右鍵,所以不能打開右鍵,而無法操作右鍵,如果在項目中有用到,那右鍵后的菜單也可以進行定位,并操作。示例:
from selenium import webdriver
driver=webdriver.Firefox()
driver.get ('http://www.chuangyijia.com/admin/login') driver.implicitly_wait(3)
test=driver.find_element_by_id('email')
找到要執(zhí)行右鍵操作的元素ActionChains(driver).context_click(test).perform() 對被操作元素執(zhí)行右鍵
注意事項:
- context_click()方法需要使用ActionChains類,需要先導(dǎo)入該類:from selenium.webdriver.common.action_chains import ActionChains
- 在右鍵點擊后選擇操作時,可以使用send_keys()方法模擬鍵盤按鍵操作。在這里,我們使用Keys類,該類提供了一些常用鍵的常量,例如:Keys.CONTROL表示Ctrl鍵。
5.2 鼠標雙擊
? ?? ?double_click()是一個鼠標事件函數(shù),它會在鼠標雙擊時被觸發(fā)。雙擊事件是指用戶快速連續(xù)點擊鼠標左鍵兩次,一般用于實現(xiàn)某些特殊操作或者進行快速編輯等操作。在雙擊事件中,第一次單擊會觸發(fā)單擊事件,第二次單擊會觸發(fā)雙擊事件。
? ?? ?在double_click()函數(shù)中,可以定義一些動作和操作,例如打開一個新窗口、刪除一條記錄、選擇一個項等。它主要被用于圖形用戶界面(GUI)中,如各種框架和庫中的圖形庫,如Tkinter、Qt、wxWidgets等。因為在GUI中,鼠標雙擊事件是一種非常常見的用戶操作。
from selenium import webdriver
driver=webdriver.Firefox()
driver.get ('http://www.chuangyijia.com/admin/login') driver.implicitly_wait(3)
test=driver.find_element_by_id('email')
找到要執(zhí)行右鍵操ActionChains(driver).double_click(test).perform() 對被操作元素執(zhí)行雙擊
5.3 鼠標拖放
? ?? ?在一些 web 頁面中,一些菜單需要將鼠標放上去,才會顯示它的子菜單,在這種情況下,自動化需要模擬人為將鼠標放到菜單上。
? ?? ?move_to_element()方法是Selenium中模擬鼠標拖放操作的一種方法。它可以將鼠標指針移動到指定的元素上,然后按住鼠標左鍵拖動該元素到目標位置。
? ?? ?下面通過百度頁面來實現(xiàn)這個操作,在百度頁面中,要對搜素的設(shè)置進行設(shè)置, 這種操作需要將鼠標放到頁面的設(shè)置菜單中,才能看到搜索設(shè)置,才能進行下一步的
操作。代碼如下:
driver.get('https://www.baidu.com')
打開百度頁面seting=driver.find_element_by_link_text('設(shè)置')
找到設(shè)置ActionChains(driver).move_to_element(seting).perform() 將鼠標移動到設(shè)置菜單上
driver.find_element_by_link_text('搜索設(shè)置').click() 點擊設(shè)置下的搜索設(shè)置
注意事項:
- move_to_element()方法需要使用ActionChains類,需要先導(dǎo)入該類:from selenium.webdriver.common.action_chains import ActionChains
- 在移動到源元素和目標元素時,可以使用find_element_by_xpath()方法或其他定位方法來定位元素。
- click_and_hold()方法按下鼠標左鍵不釋放,直到使用release()方法釋放鼠標左鍵。
5.4 按鍵用法
? ?? ?使用鍵盤時,需要導(dǎo)入 selenium.webdriver.common.keys 中的 Keys 模塊。
? ?? ?send_keys() 方法是Selenium WebDriver 中用于模擬輸入的一種方法。它可以向指定的元素或當前活動的元素發(fā)送鍵盤輸入,如文本、特殊字符、組合鍵等。
? ?? ?下面代碼模擬用戶通過鍵盤向郵箱地址中輸入一個數(shù)字。
driver.find_element_by_xpath('//form[@id="login"]/input[1]'). send_keys(Keys.NUMPAD3)
Keys.NUMPAD3 表示從鍵盤輸入數(shù)字 3
? ?? ?下面模擬操作 tab 鍵和 enter 鍵
driver.find_element_by_xpath('//form[@id="login"]/input[1]'). send_keys('lib@163.com')
輸入郵箱driver.find_element_by_xpath('//form[@id="login"]/input[2]'). send_keys('12345678')
輸入密碼driver.find_element_by_xpath('//form[@id="login"]/input[2]'). send_keys(Keys.TAB)
按下 tab 鍵driver.find_element_by_xpath('//form[@id="login"]/button').send_keys(Keys.ENTER)
按下回車鍵
? ?? ?通過上面的代碼能夠看出,輸入郵箱和密碼之后,按下 tab 鍵,操作會切換到登陸按鈕上,然后在登陸按鈕上模擬用戶按下 enter 鍵。
? ?? ?當然這樣的操作需要按業(yè)務(wù)的順序來的,否則會出錯。
注意事項:
- send_keys() 方法需要使用 WebElement 對象,需要先通過元素定位方法(如 find_element_by_xpath())獲取該元素的 WebElement 對象。
- send_keys() 方法可以一次性輸入多個字符,使用逗號分隔,如 send_keys(“123”, “,”, “abc”) 將輸入 “123,abc”。
- send_keys() 方法還可以模擬各種鍵盤操作,如輸入特殊字符、組合鍵等,具體可以參考 Selenium 官方文檔或相關(guān)教程。
5.5 組合鍵
? ?? ?在 web 頁面使用鍵盤除了上面的操作之外,還可能會有其他操作,比如組合鍵。
? ?? ?接下來,通過代碼模擬用戶在界面輸入郵箱地址之后,使用 ctrl+a 的方式,將其全選, 然后在使用 ctrl+c 的方式將內(nèi)容復(fù)制出來,登陸成功后,將復(fù)制的內(nèi)容粘貼到創(chuàng)意列表的標題中。代碼如下:
driver.find_element_by_xpath('//form[@id="login"]/input[1]'). send_keys('lib@163.com')
輸入郵箱地址driver.find_element_by_xpath('//form[@id="login"]/input[1]'). send_keys(Keys.CONTROL,'a')
將輸入的字符串使用 ctrl+a 鍵全選driver.find_element_by_xpath('//form[@id="login"]/input[1]'). send_keys(Keys.CONTROL,'c')
在按下 ctrl+c,將全選的內(nèi)容復(fù)制到剪切板driver.find_element_by_xpath('//form[@id="login"]/input[2]'). send_keys('12345678')
輸入密碼driver.find_element_by_xpath('//button[contains(text(),"登錄 ")]').click()
登陸#sleep(2)
driver.implicitly_wait(3)
driver.find_element_by_css_selector('#dashboard-menu > li:nth-child(2) > a:nth-child(1)').click()
點擊待審核管理driver.find_element_by_css_selector('#input01').send_keys(Key s.CONTROL,'v')
在搜索欄中的標題輸入框中,用 ctrl+v 粘貼到輸入框