selenium模擬點擊拖動canvas


本質上是調用鼠標模擬點擊的模塊 ActionChains ,實現 點擊不松開 -> 模擬移動鼠標 -> 松開鼠標 的這么一個操作。這里依然以 迅捷圖片 作為示范

 

 

1. 打開網站並上傳圖片(index)

依然使用selenium打開網站,相比之前要多引入 ActionChains 模塊,用來模擬點擊。

from selenium import webdriver # 模擬點擊的模塊 from selenium.webdriver.common.action_chains import ActionChains browser = webdriver.Firefox() # 使用瀏覽器訪問網址 browser.get('http://app.xunjietupian.com/crop') 
 

接下來手動上傳圖片,自動上傳圖片的的教程可以看我之前寫的博客 《python+Selenium+AutoIT上傳本地資源》
現在的頁面應該是這個樣子(這是一個錨點)

在這里插入圖片描述

2. 實現模擬點擊

這一步的作用實際上是為了定位,用來查看當前鼠標在哪個位置。這里分為兩步:

  1. 獲取圖片所在的元素
  2. 執行點擊

第一步 :通過閱讀源碼,可以得到該元素的classname,直接獲取該對象

canvas = browser.find_element_by_class_name('upper-canvas') 
 

第二步 :使用下列函數進行模擬點擊:

# 首先設置點擊的坐標 x = 300 y = 300 # 執行點擊操作 ActionChains(browser).move_to_element_with_offset(canvas,x,y).context_click().perform() 
 
  • move_to_element_with_offset 指的是鼠標在canvas(畫布)上移動到(x,y)的位置
  • context_click 指的是右鍵點擊
  • perform 是執行前面的所有操作

就可以得到如下結果:
在這里插入圖片描述

彈出菜單的位置就是坐標為(300,300)的那個點了。如果要用鼠標左鍵的話,將 context_click 修改為 click 就可以了。

3. 實現模擬拖拽

除了 context_click 、 click 之外,還有一個函數 click_and_hold ,意思是點擊后不松開,這也就是要實現截圖的主要函數了。接下來的代碼分成三個步:

  1. 點擊並不松開
  2. 移動鼠標
  3. 松開鼠標

第一步 :將點擊函數替換成 click_and_hold 即可

ActionChains(browser).move_to_element_with_offset(canvas,200,200).click_and_hold().perform() 
 

第二步 :執行 move_by_offset 函數,將鼠標在之前的基礎上移動xoffset,yoffset的距離

ActionChains(browser).move_by_offset(xoffset=300,yoffset=200).perform() 
 

第三步 :執行 release 即可

ActionChains(browser).release().perform() 
 

順序執行后,就可以看到裁剪框出現了。
在這里插入圖片描述

4. 完整代碼

from selenium import webdriver import os import time from selenium.webdriver.common.action_chains import ActionChains browser = webdriver.Firefox() # 使用瀏覽器訪問網址 browser.get('http://app.xunjietupian.com/crop') 
 

從這里開始手動上傳圖片,達到 這樣 的效果
接下來執行以下代碼

canvas = browser.find_element_by_class_name('upper-canvas ') ActionChains(browser).move_to_element_with_offset(canvas,200,200).click_and_hold().perform()
ActionChains(browser).move_by_offset(xoffset=300,yoffset=200).perform()
ActionChains(browser).release().perform()

 

轉:https://www.pythonf.cn/read/99311


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM