日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

安卓手机 Python 自动化( uiautomation、uiautomation2、weditor )

發布時間:2023/12/20 python 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 安卓手机 Python 自动化( uiautomation、uiautomation2、weditor ) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

其他自動化工具或者框架:

  • Airtest:https://airtest.readthedocs.io/zh_CN/latest/
  • autojs:Auto.js快速入門實戰教程:https://zhuanlan.zhihu.com/p/90065914
  • appium:https://blog.csdn.net/freeking101/article/details/107881979

AutomateIt、Automate、按鍵精靈、AutoJS 等 Android 自動化工具有什么特點?:https://www.zhihu.com/question/59503646

1、uiautomation

From:https://blog.csdn.net/ma524654165/article/details/77686526

? ? ? ? 主要用到一個 uiautomation 的開源框架,是一個國人用 Python 封裝 Windows GUI (UI Automation) 而成的自動化工具;

開源作者原文:http://www.cnblogs.com/Yinkaisheng/p/3444132.html

Github 地址:https://github.com/yinkaisheng/Python-UIAutomation-for-Windows

此自動化的主要思想:利用此框架抓取到程序的各種句柄,然后對句柄執行各種操作

一、uiautomation 方法

  • 1、WindowContrl(searchDepth,ClassName,SubName)
    ? ? ? ? 查找窗口中的程序,如果有中文則需用Unicode;可用window.Exists(maxSearchSeconds)來判斷此窗口是否存在;
  • 2、EditControl(searchFromControl)
    ? ? ? ? 查找編輯位置,找到后可用DoubleClick()來改變電腦的focus;edit.SetValue("string")輸入值;
  • 3、Win32API.SendKeys("string")?
    ? ? ? ? 如果已在編輯位置,則可用此方法來輸入值,{Ctrl}為ctrl鍵,其他類似;{@??8}格式可輸入8個@,
    ? ? ? ? 對于數字也可實現此功能,但對于字母不能...;
  • 4、MenuItemControl(searchFromControl,Name)???? ?????? ?????? 查找菜單按鈕;
  • 5、ComboBoxControl(searchFromControl,AutomationI) ?????
    ? ? ? ? 查找下拉框,然后在此基礎上用Select("name")方法來選擇需要的選項;
  • 6、BottonControl(searchFromControl,Name,SubName) ?????? 查找按鈕;
  • 7、automation.FindControl(firefoxWindow,lambda c:(isinstance(c, automation.EditControl) or isinstance(c, automation.ComboBoxControl)) and c.Name == 'Enter your search term')? ?按條件搜索handle

二、對找到句柄常用操作

  • Click()??????????? 點擊;
  • RighClik()?????? 右鍵點擊;
  • SendKeys()???? 發送字符;
  • SetValue()????? 傳值,一般對EditControl用;

三、對 windows 程序常用操作

  • subprocess.Popen('Name')?   用進程打開程序;
  • window.Close()????        關閉窗口;
  • window.SetActive()??????     使用;
  • window.SetTopMost()??     設置為頂層
  • window.ShowWindow(uiautomation.ShowWindow.Maximize)? 窗口最大化
  • window.CaptureToImage('Notepad.png')? 截圖;
  • uiautomation.Win32API.PressKey(uiautomation.Keys.VK_CONTROL)??? 按住Ctrl鍵
  • uiautomation.Win32API.ReleaseKey(uiautomation.Keys.VK_CONTROL) 釋放Ctrl鍵
  • automation.GetConsoleWindow()????? #return console window that runs python,打開控制臺
  • automation.Logger.ColorfulWriteLine('\nI will open <Color=Green>Notepad</Color> and <Color=Yellow>automate</Color> it. Please wait for a while.')? 控制臺傳值(彩色字體),普通傳值用WriteLine;
  • automation.ShowDesktop() 顯示桌面;

四、句柄的抓取

直接運行 automation 模塊枚舉窗口時,支持下列參數(從 doc 窗口運行 automation.py 程序 ):

-t intValue???? 延遲枚舉時間,單位秒 -r??????????????從樹的根部枚舉,如果不指定,從當前窗口枚舉 -d intValue??? 枚舉控件樹的的深度,如果不指定,枚舉整個樹 -f??????????????從焦點控件枚舉,如果不指定,從當前窗口枚舉 -c??????????????從光標下的控件枚舉,如果不指定,從當前窗口枚舉 -a??????????????獲取光標下控件及其所有父控件 -n??????????????顯示控件的完整Name, 如果不指定,只顯示前30個字符 -m??????????????顯示控件更多屬性,默認只顯示控件的四個屬性

示例:

automation.pyc –t3, 3秒后枚舉當前窗口所有控件 automation.pyc –d2 –t3, 3秒后枚舉當前窗口前三層控件 automation.pyc –r –d1 –t0 -n, 0秒后從根部枚舉前兩層控件,并顯示控件完整名稱 automation.pyc –c –t3, 3秒后顯示鼠標光標下面的控件信息

2、UIAutomator2

參考

  • :https://vic.kim/2019/05/20/UIAutomator2的使用/
  • :https://blog.csdn.net/d1240673769/article/details/113809889

uiautomator2 是一個可以使用 Python 對 Android 設備進行UI自動化的庫。其底層基于 Google uiautomator,Google 提供的 uiautomator 庫可以獲取屏幕上任意一個 APP 的任意一個控件屬性,并對其進行任意操作。

uiautomator2 不是 android SDK 下的 uiautomator,而是一個 python 庫,用于 Android 的 ui 自動化測試。使用 uiautomator2 只能用于?android 端測試,不像 appium 可以跨平臺可用于 ios 端。使用 uiautomator2 可以使用 wifi 或數據線和手機相連。

GitHub地址:https://github.com/openatx/uiautomator2
? ? ? ? ? ? https://github.com/openatx/uiautomator2/blob/master/README.md

工作原理:

如圖所示,python-uiautomator2 主要分為兩個部分,python 客戶端移動設備

  • Python端:運行腳本,并向移動設備發送 HTTP 請求
  • 移動設備:移動設備上運行了封裝了 uiautomator2 的 HTTP 服務,解析收到的請求,并轉化成 uiautomator2 的代碼。

整個過程

  • 在移動設備上安裝 atx-agent (守護進程), 隨后 atx-agent 啟動 uiautomator2 服務 ( 默認7912端口 ) 進行監聽
  • 在 PC 上編寫測試腳本并執行( 相當于發送 HTTP 請求到移動設備的 server 端)
  • 移動設備通過 WIFI 或 USB 接收到 PC 上發來的 HTTP 請求,執行制定的操作
  • 安裝 uiautomator2

    pip install --pre uiautomator2?
    pip install pillow (如果需要截圖,可安裝這個庫)

    設備安裝 atx-agent

    首先設備連接到 PC,并能夠 adb devices 發現該設備。
    執行下面的命令

    # init就是所有USB連接電腦的手機上都安裝uiautomator2 python -m uiautomator2 init# 指定手機安裝uiautomator2, 用 --mirror python -m uiautomator2 init --mirror --serial $SERIAL# 嫌棄慢的話,可以用國內的鏡像 python -m uiautomator2 init --mirror

    然后就會自動安裝庫所需要的設備端程序:uiautomator-server,atx-agent,openstf / minicap,openstf / minitouch。 最后提示 success,代表 atx-agent 初始化成功。

    安裝 weditor

    有了這個,方便我們快速的識別手機上的元素,方便寫代碼

    pip install -U weditor

    安裝好之后,就可以在命令行運行?weditor --help?確認是否安裝成功了。Windows 系統可以使用命令在桌面創建一個快捷方式:weditor --shortcut??,在 windows cmd 中執行上述命令后,會在桌面上創建一個快捷方式,如下圖:

    安裝 weditor 報錯 UnicodeDecodeError 時,可以安裝老版本:pip install weditor==0.6.3

    啟動方法

    • 方法 1:命令行執行?weditor?自動打開瀏覽器,輸入 設備的IP?或者 序列號( 序列號可以通過 adb devices 命令查看得到?),然后點擊 Connect
    • 方法 2:桌面上雙擊 WEditor 快捷方式即可。
    • 方法 3:命令行中執行?python -m weditor

    啟動后如下圖:

    應用以及操作

    調用 uiautomator2 的過程

    配置手機設備參數,設置具體操作的是哪一臺手機
    抓取手機上應用的控件,制定對應的控件來進行操作
    對抓取到的控件進行操作,比如點擊、填寫參數等。

    設備連接方法,有兩種

    python-uiautomator2 連接手機的方式有兩種,

    • 一種是通過WIFI。WIFI 最便利的地方是可以不用連接數據線
    • 一種是通過USB。USB則可以用在PC和手機網絡不在一個網段用不了的情況。

    (1)通過WiFi,假設設備IP 192.168.0.107和您的PC在同一網絡中

    import uiautomator2 as u2 d = u2.connect('192.168.0.107')

    (2)通過USB, 假設設備序列是123456789F

    import uiautomator2 as u2 d = u2.connect('123456789F') # USB鏈接設備。或者u2.connect_usb('123456f') #d = u2.connect_usb() 或者 d = u2.connect() ,當前只有一個設備時可以用這個

    在沒有參數的情況下調用 u2.connect(), uiautomator2 將從環境變量 ANDROID_DEVICE_IP 獲取設備 IP。如果這個環境變量是空的,uiautomator 將返回 connect_usb,您需要確保只有一個設備連接到計算機。

    檢查并維持設備端守護進程處于運行狀態:

    d.healthcheck()

    打開調試開關:

    d.debug = True d.info

    安裝應用,只能從URL安裝:

    d.app_install('http://some-domain.com/some.apk') #引號內為下載apk地址

    啟動應用:

    d.app_start('com.eg.android.AlipayGphone') #引號內為包名稱,這里為支付寶

    停止應用:

    #相當于'am force-stop'強制停止應用 d.app_stop('com.eg.android.AlipayGphone') #相當于'pm clear' 清空App數據 d.app_clear('com.eg.android.AlipayGphone')

    停止所有正在運行的應用程序:

    # 停止所有 d.app_stop_all()# 停止所有應用程序,除了com.examples.demo d.app_stop_all(excludes=['com.examples.demo'])

    跳過彈窗,禁止彈窗:

    d.disable_popups() # 自動跳過彈出窗口 d.disable_popups(False) # 禁用自動跳過彈出窗

    獲取設備信息:

    # 獲取基本信息 d.info# 獲取窗口大小 print(d.window_size()) # 設備垂直輸出示例: (1080, 1920) # 設備水平輸出示例: (1920, 1080)# 獲取當前應用程序信息。對于某些android設備,輸出可以為空 print(d.current_app())#獲取設備序列號 print(d.serial)#獲取WIFI IP print(d.wlan_ip)#獲取詳細的設備信息 print(d.device_info)

    獲取應用信息:

    d.app_info("com.eg.android.AlipayGphone") # 會輸出 ''' {"packageName": "com.eg.android.AlipayGphone", "mainActivity": "com.eg.android.AlipayGphone.AlipayLogin", "label": "支付寶", "versionName": "10.2.13.9020", "versionCode": 360, "size": 108306104 } ''' # 保存應用程序圖標 img = d.app_icon("com.eg.android.AlipayGphone") img.save("icon.png")

    推拉文件:

    (1)將文件推送到設備

    # push文件夾 d.push("foo.txt", "/sdcard/") # push和重命名 d.push("foo.txt", "/sdcard/bar.txt") # push fileobj with open("foo.txt", 'rb') as f:d.push(f, "/sdcard/") # 推動和更改文件訪問模式 d.push("foo.sh", "/data/local/tmp/", mode=0o755)

    (2)從設備中拉出一個文件

    d.pull("/sdcard/tmp.txt", "tmp.txt")# 如果在設備上找不到文件,FileNotFoundError將引發 d.pull("/sdcard/some-file-not-exists.txt", "tmp.txt")

    關鍵事件 ( 屏幕鍵盤?操作?):

    (1)打開/關閉屏幕

    d.screen_on()#打開屏幕 d.screen_off() #關閉屏幕

    (2)獲取當前屏幕狀態

    d.info.get('screenOn') # 需要 Android> = 4.4

    (3)硬鍵盤和軟鍵盤操作

    d.press("home") # 點擊home鍵 d.press("back") # 點擊back鍵 d.press("left") # 點擊左鍵 d.press("right") # 點擊右鍵 d.press("up") # 點擊上鍵 d.press("down") # 點擊下鍵 d.press("center") # 點擊選中 d.press("menu") # 點擊menu按鍵 d.press("search") # 點擊搜索按鍵 d.press("enter") # 點擊enter鍵 d.press("delete") # 點擊刪除按鍵 d.press("recent") # 點擊近期活動按鍵 d.press("volume_up") # 音量+ d.press("volume_down") # 音量- d.press("volume_mute") # 靜音 d.press("camera") # 相機 d.press("power") #電源鍵

    (4)解鎖屏幕

    d.unlock() # 相當于 # 1. 發射活動:com.github.uiautomator.ACTION_IDENTIFY # 2. 按home鍵

    手勢與設備的交互:

    # 單擊屏幕 d.click(x,y) # x,y為點擊坐標# 雙擊屏幕 d.double_click(x,y) d.double_click(x,y,0.1) # 默認兩個單擊之間間隔時間為0.1秒# 長按 d.long_click(x,y) d.long_click(x,y,0.5) # 長按0.5秒(默認)# 滑動 d.swipe(sx, sy, ex, ey) d.swipe(sx, sy, ex, ey, 0.5) #滑動0.5s(default)#拖動 d.drag(sx, sy, ex, ey) d.drag(sx, sy, ex, ey, 0.5)#拖動0.5s(default) # 滑動點 多用于九宮格解鎖,提前獲取到每個點的相對坐標(這里支持百分比)# 從點(x0, y0)滑到點(x1, y1)再滑到點(x2, y2) # 兩點之間的滑動速度是0.2秒 d.swipe((x0, y0), (x1, y1), (x2, y2), 0.2) # 注意:單擊,滑動,拖動操作支持百分比位置值。例: d.long_click(0.5, 0.5) 表示長按屏幕中心

    XPath:

    # 檢索方向 d.orientation # 檢索方向。輸出可以是 "natural" or "left" or "right" or "upsidedown"# 設置方向 d.set_orientation("l") # or "left" d.set_orientation("r") # or "right" d.set_orientation("n") # or "natural"#凍結/ 開啟旋轉 d.freeze_rotation() # 凍結旋轉 d.freeze_rotation(False) # 開啟旋轉########## 截圖 ############ # 截圖并保存到電腦上的一個文件中,需要Android>=4.2。 d.screenshot("home.jpg")# 得到PIL.Image格式的圖像. 但你必須先安裝pillow image = d.screenshot() # default format="pillow" image.save("home.jpg") # 或'home.png',目前只支持png 和 jpg格式的圖像# 得到OpenCV的格式圖像。當然,你需要numpy和cv2安裝第一個 import cv2 image = d.screenshot(format='opencv') cv2.imwrite('home.jpg', image)# 獲取原始JPEG數據 imagebin = d.screenshot(format='raw') open("some.jpg", "wb").write(imagebin)############################## 轉儲UI層次結構 # get the UI hierarchy dump content (unicoded).(獲取UI層次結構轉儲內容) d.dump_hierarchy()# 打開通知或快速設置 d.open_notification() #下拉打開通知欄 d.open_quick_settings() #下拉打開快速設置欄# 檢查特定的UI對象是否存在 d(text="Settings").exists # 返回布爾值,如果存在則為True,否則為False d.exists(text="Settings") # 另一種寫法 # 高級用法 d(text="Settings").exists(timeout=3) # 等待'Settings'在3秒鐘出現# 獲取特定UI對象的信息 d(text="Settings").info# 獲取/設置/清除可編輯字段的文本(例如EditText小部件) d(text="Settings").get_text() #得到文本小部件 d(text="Settings").set_text("My text...") #設置文本 d(text="Settings").clear_text() #清除文本# 獲取Widget中心點 d(text="Settings").center() #d(text="Settings").center(offset=(0, 0)) # 基準位置左前

    UI 對象 的 五種 定位方式:

    # text、resourceId、description、className、xpath、坐標# 執行單擊UI對象 #text定位單擊 d(text="Settings").click() d(text="Settings", className="android.widget.TextView").click()#resourceId定位單擊 d(resourceId="com.ruguoapp.jike:id/tv_title", className="android.widget.TextView").click() #description定位單擊 d(description="設置").click() d(description="設置", className="android.widget.TextView").click()#className定位單擊 d(className="android.widget.TextView").click()#xpath定位單擊 d.xpath("//android.widget.FrameLayout[@index='0']/android.widget.LinearLayout[@index='0']").click()#坐標單擊 d.click(182, 1264)# 等待元素出現(最多10秒),出現后單擊 d(text="Settings").click(timeout=10) # 在10秒時點擊,默認的超時0 d(text='Skip').click_exists(timeout=10.0) # 單擊直到元素消失,返回布爾 d(text="Skip").click_gone(maxretry=10, interval=1.0) # maxretry默認值10,interval默認值1.0 # 點擊基準位置偏移 d(text="Settings").click(offset=(0.5, 0.5)) # 點擊中心位置,同d(text="Settings").click() d(text="Settings").click(offset=(0, 0)) # 點擊左前位置 d(text="Settings").click(offset=(1, 1)) # 點擊右下# 執行雙擊UI對象 d(text="設置").double_click() # 雙擊特定ui對象的中心 d.double_click(x, y, 0.1) # 兩次單擊之間的默認持續時間為0.1秒#執行長按UI對象 # 長按特定UI對象的中心 d(text="Settings").long_click() d.long_click(x, y, 0.5) # 長按坐標位置0.5s默認# 將UI對象拖向另一個點或另一個UI對象 # Android<4.3不能使用drag. # 在0.5秒內將UI對象拖到屏幕點(x, y) d(text="Settings").drag_to(x, y, duration=0.5)# 將UI對象拖到另一個UI對象的中心位置,時間為0.25秒 d(text="Settings").drag_to(text="Clock", duration=0.25)

    常見用法:

    # 等待10s d.xpath("//android.widget.TextView").wait(10.0)# 找到并單擊 d.xpath("//*[@content-desc='分享']").click()# 檢查是否存在 if d.xpath("//android.widget.TextView[contains(@text, 'Se')]").exists:print("exists")# 獲取所有文本視圖文本、屬性和中心點 for elem in d.xpath("//android.widget.TextView").all():print("Text:", elem.text)#獲取視圖文本 for elem in d.xpath("//android.widget.TextView").all():print("Attrib:", elem.attrib)#獲取屬性和中心點 #返回: (100, 200) for elem in d.xpath("//android.widget.TextView").all():print("Position:", elem.center())# xpath常見用法: # 所有元素 //*# resource-id包含login字符 //*[contains(@resource-id, 'login')]# 按鈕包含賬號或帳號 //android.widget.Button[contains(@text, '賬號') or contains(@text, '帳號')]# 所有ImageView中的第二個 (//android.widget.ImageView)[2]# 所有ImageView中的最后一個 (//android.widget.ImageView)[last()]# className包含ImageView //*[contains(name(), "ImageView")]

    會在瀏覽器中打開網頁,輸入設備 devices 信息 可以 通過 adb devices 來進行查詢設備 信息。出現樹的模樣,代表鏈接上手機,然后點擊右上角的 Reload 實時顯示手機頁面。 這樣就可以開始你的元素定位了。

    通用的元素定位方式。

    • (1) 根據文本進行定位:d(text=顯示的文本).click()
    • (2) 通過 resourceId 進行定位:d(resourceId="com.tcl.tclplus:id/cart_layout").click()
    • (3) 滑動 上 或者 下 。手指向上,就是頁面往下拉,分兩種情況 拉到底 或者 只拉一部分。
      • 拉到底:d(scrollable=True).scroll.toEnd()
      • 拉一部分:d.swipe(0.806, 0.801,0.818, 0.487) # 向上滑動 ?橫坐標可以不變,縱坐標是變化的,是變小的趨勢 ?這是手指向上
      • 拉倒頁面首頁 開頭部分:d(scrollable=True).scroll.toBeginning(steps=50)
    • (4) 滑動 左右?
      ????????d(scrollable=True).scroll.horiz.toEnd() #橫向滾動到最右側
      ????????d(scrollable=True).scroll.horiz.toBeginning() #橫向滾動到最左側
      ????或者
      ????????c.水平向右滾動:d(scrollable=True).scroll.horiz.forward(steps=50)
      ????????d.水平向左滾動:d(scrollable=True).scroll.horiz.backward(steps=50)
    • (5) 滑動到指定位置:滑動到文本為測試的位置:d(scrollable=True).scroll.to(text ='測試')
    • (6) 元素判斷 ?可以這樣寫,通過判斷元素的存在性來執行不同的操作 s = self.d(resourceId="com.tcl.tclplus:id/iot_txt_home_name", text=u"立即登錄", className="android.widget.TextView" ) if len(s) == 0:print('元素未找到,執行退出操作')
    • (7) 隨機字符串或者隨機字母 輸入 a = random.sample(string.ascii_letters, 4) data = ''.join([str(x) for x in a]) # 隨機從大小寫字母中取四位,然后寫入到輸入框中。 d(resourceId="com.tcl.tclplus:id/et_invoice_header").set_text(data)
    • (8) 截圖 filepaths 就是截圖所存的路徑,可以自己填寫。filepaths = os.path.normpath(os.path.join(os.path.join(os.path.dirname(os.path.dirname(__file__)), "Automation/Tcase"))) def get_png(self, filename, filepath='/Member'):"""截圖操作,默認截圖的存儲路徑為Member"""imgName = filename + datetime.datetime.now().strftime('%Y%m%d%H%M%S') + '.png' # 截圖可以單獨保存為別的名字的文件stringPath = filepaths + '/image' + filepath + '\\' + imgNameprint stringPath# img.save('filename.png')#圖片保存在當前項目的文件夾下邊self.d.screenshot().save(stringPath) # 保存文件到指定的文件夾下邊self.get_png(filename='訂單-取消購買'.decode('utf-8'), filepath='/Market/訂單') 實際調用的時候 需要進行decode
    • (9) apk 自動安裝 def install_app(path):app_Path = lambda x: os.path.join(file_path, "app", x)apk = app_Path(path + ".apk")os.system('adb install -r -d ' + apk)time.sleep(5)
    • (10) 報告生成 # 用例文件很多 采用 關鍵字匹配的方式進行。def UI_Report(testcase, ReportPath):"""根據傳入的testcase 來判斷執行哪種報告生成方式。"""def Report(s):@wraps(s)def creat_report():AA = hasattr(testcase,'__call__')# AA = isfunction(testcase)if AA:print '這個是函數'suite = unittest.makeSuite(testcase)fp = file(ReportPath, 'wb')runner = HTMLTestRunner(stream=fp, title=r'UI自動化', description=r'接口自動化測試報告')runner.run(suite) #區別fp.close()else:print '不是函數,是執行run_main方法'fp = file(ReportPath, 'wb')runner = HTMLTestRunner(stream=fp, title=r'UI自動化測試報告', description=r'商城')runner.run(testcase)fp.close()return creat_reportreturn Reportdef all_case():testcase = unittest.TestSuite() # 加載測試套件# 用例的目錄,關鍵字進行匹配discover = unittest.defaultTestLoader.discover(filepath, pattern='Market*.py', top_level_dir=None)testcase.addTest(discover)return testcase@UI_Report(testcase=all_case(),ReportPath=filepath+'/report/result.html') def run():print '生成測試報告'if __name__ == '__main__':run()

      因為 run_main 執行的時候,是打印所有用例文件+名稱,而通過測試套件 添加 類名稱時,執行方式不一樣。至于公共函數,比如啟動 app、一些共有的操作,可以寫到 公共函數中

      ?在unitest中 增加setupclass 函數 是只 啟動一次app,跟setup 區別一下,下面增加你的公共函數。然后用例文件中 直接通過繼承的方式來進行。

    例如:class test(commons):

    def del_file(filepath):listdir = os.listdir(filepath) # 獲取文件和子文件夾for rename in listdir:rename = filepath + "//" + renameif os.path.isfile(rename): # 是文件os.remove(rename) # 刪除文件elif os.path.isdir(rename): # 是子文件duellist = os.listdir(rename)for f in duellist: # 遍歷該子文件夾file_path = os.path.join(rename, f)if os.path.isfile(file_path): # 刪除子文件夾下文件os.remove(file_path)elif os.path.isdir(file_path): # 強制刪除子文件夾下的子文件夾shutil.rmtree(file_path)

    可以在用例文件執行開頭增加一些 調用方法

    如刪除截圖 和初始化 app環境 都是可以的??

    3、pyautogui?

    From:https://www.jb51.net/article/183926.htm

    在使用 Python 做 安卓自動化腳本 時,兩個庫可以使用,一個為 PyUserInput 庫,另一個為pyautogui 庫。就本人而言,我更喜歡使用pyautogui庫,該庫功能多,使用便利。下面給大家介紹一下pyautogui庫的使用方法。在cmd命令框中輸入pip3 install pyautogui即可安裝該庫!

    常用操作

    我們在 pyautogui 庫中常常使用的方法,如下:

    import pyautogui# 調用在執行動作后暫停的秒數,只能在執行一些pyautogui動作后才能使用,建議用time.sleep pyautogui.PAUSE = 1# 啟用自動防故障功能,左上角的坐標為(0,0),將鼠標移到屏幕的左上角,來拋出failSafeException異常 pyautogui.FAILSAFE = True# 判斷(x,y)是否在屏幕上 x, y = 122, 244 pyautogui.onScreen(x, y) # 結果為truewidth, height = pyautogui.size() # 屏幕的寬度和高度 print(width, height)

    鼠標操作

    我們在 pyautogui 庫對于鼠標的使用方法大體如下:

    import pyautoguicurrentMouseX, currentMouseY = pyautogui.position() # 鼠標當前位置 print(currentMouseX, currentMouseY)# 控制鼠標移動,duration為持續時間 for i in range(2):pyautogui.moveTo(100, 100, duration=0.25) # 移動到 (100,100)pyautogui.moveTo(200, 100, duration=0.25)pyautogui.moveTo(200, 200, duration=0.25)pyautogui.moveTo(100, 200, duration=0.25)for i in range(2):pyautogui.moveRel(50, 0, duration=0.25) # 從當前位置右移100像素pyautogui.moveRel(0, 50, duration=0.25) # 向下pyautogui.moveRel(-50, 0, duration=0.25) # 向左pyautogui.moveRel(0, -50, duration=0.25) # 向上# 按住鼠標左鍵,把鼠標拖拽到(100, 200)位置 pyautogui.dragTo(100, 200, button='left') # 按住鼠標左鍵,用2秒鐘把鼠標拖拽到(300, 400)位置 pyautogui.dragTo(300, 400, 2, button='left') # 按住鼠標左鍵,用0.2秒鐘把鼠標向上拖拽 pyautogui.dragRel(0, -60, duration=0.2)# pyautogui.click( # x=moveToX, y=moveToY, clicks=num_of_clicks, # interval=secs_between_clicks, button='left' # ) # 其中,button屬性可以設置成left,middle和right。 pyautogui.click(10, 20, 2, 0.25, button='left') pyautogui.click(x=100, y=200, duration=2) # 先移動到(100, 200)再單擊 pyautogui.click() # 鼠標當前位置點擊一下 pyautogui.doubleClick() # 鼠標當前位置左擊兩下 pyautogui.doubleClick(x=100, y=150, button="left") # 鼠標在(100,150)位置左擊兩下 pyautogui.tripleClick() # 鼠標當前位置左擊三下pyautogui.mouseDown() # 鼠標左鍵按下再松開 pyautogui.mouseUp() pyautogui.mouseDown(button='right') # 按下鼠標右鍵 pyautogui.mouseUp(button='right', x=100, y=200) # 移動到(100, 200)位置,然后松開鼠標右鍵# scroll函數控制鼠標滾輪的滾動,amount_to_scroll參數表示滾動的格數。正數則頁面向上滾動,負數則向下滾動 # pyautogui.scroll(clicks=amount_to_scroll, x=moveToX, y=moveToY) pyautogui.scroll(5, 20, 2) pyautogui.scroll(10) # 向上滾動10格 pyautogui.scroll(-10) # 向下滾動10格 pyautogui.scroll(10, x=100, y=100) # 移動到(100, 100)位置再向上滾動10格# 緩動/漸變函數可以改變光標移動過程的速度和方向。通常鼠標是勻速直線運動,這就是線性緩動/漸變函數。 # PyAutoGUI有30種緩動/漸變函數,可以通過pyautogui.ease*?查看。 # 開始很慢,不斷加速 pyautogui.moveTo(100, 100, 2, pyautogui.easeInQuad) # 開始很快,不斷減速 pyautogui.moveTo(100, 100, 2, pyautogui.easeOutQuad) # 開始和結束都快,中間比較慢 pyautogui.moveTo(100, 100, 2, pyautogui.easeInOutQuad) # 一步一徘徊前進 pyautogui.moveTo(100, 100, 2, pyautogui.easeInBounce) # 徘徊幅度更大,甚至超過起點和終點 pyautogui.moveTo(100, 100, 2, pyautogui.easeInElastic)

    對于我們要獲取鼠標在屏幕中的位置,我們可以采用如下代碼:

    # 案例獲取鼠標的位置,方便復制我們定位的鼠標坐標點到代碼中 import pyautogui import time# 獲取鼠標位置 def get_mouse_position():time.sleep(5) # 準備時間print('開始獲取鼠標位置')try:for i in range(10):# Get and print the mouse coordinates.x, y = pyautogui.position()positionStr = '鼠標坐標點(X,Y)為:{},{}'.format(str(x).rjust(4), str(y).rjust(4))pix = pyautogui.screenshot().getpixel((x, y)) # 獲取鼠標所在屏幕點的RGB顏色positionStr += ' RGB:(' + str(pix[0]).rjust(3) + ',' + str(pix[1]).rjust(3) + ',' + str(pix[2]).rjust(3) + ')'print(positionStr)time.sleep(0.5) # 停頓時間except:print('獲取鼠標位置失敗')if __name__ == "__main__":get_mouse_position()

    也可以使用pyautogui庫幫助文檔的方法,不過本人認為使用上面的方法,更加便利。pyautogui庫幫助文檔的獲取鼠標位置的方法如下:

    import pyautoguiprint('Press Ctrl-C to quit.') try:while True:# Get and print the mouse coordinates.x, y = pyautogui.position()positionStr = 'X:' + str(x).rjust(4) + ' Y:' + str(y).rjust(4)pix = pyautogui.screenshot().getpixel((x, y)) # 獲取鼠標所在屏幕點的RGB顏色positionStr += ' RGB:(' + str(pix[0]).rjust(3) + ',' + \str(pix[1]).rjust(3) + ',' + str(pix[2]).rjust(3) + ')'print(positionStr, end='') # end='' 替換了默認的換行# 連續退格鍵并刷新,刪除之前打印的坐標,就像直接更新坐標效果print('\b' * len(positionStr), end='', flush=True) except KeyboardInterrupt: # 處理 Ctrl-C 按鍵print('\nDone.')

    鍵盤操作

    我們在pyautogui庫對于鍵盤的使用方法大體如下:

    import pyautoguipyautogui.typewrite('Hello world!') # 輸入Hello world!字符串 pyautogui.typewrite('Hello world!', interval=0.25) # 每次輸入間隔0.25秒,輸入Hello world!pyautogui.press('enter') # 按下并松開(輕敲)回車鍵 pyautogui.press(['left', 'left', 'left', 'left']) # 按下并松開(輕敲)四下左方向鍵 pyautogui.keyDown('shift') # 按下`shift`鍵 pyautogui.keyUp('shift') # 松開`shift`鍵pyautogui.keyDown('shift') pyautogui.press('4') pyautogui.keyUp('shift') # 輸出 $ 符號的按鍵pyautogui.hotkey('ctrl', 'v') # 組合按鍵(Ctrl+V),粘貼功能,按下并松開'ctrl'和'v'按鍵# pyautogui.KEYBOARD_KEYS數組中就是press(),keyDown(),keyUp()和hotkey()函數可以輸入的按鍵名稱 pyautogui.KEYBOARD_KEYS = ['\t', '\n', '\r', ' ', '!', '"', '#', '$', '%', '&', "'", '(', ')', '*', '+', ',', '-', '.','/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?', '@','[', '\\', ']', '^', '_', '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l','m', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~','accept', 'add', 'alt', 'altleft', 'altright', 'apps', 'backspace', 'browserback','browserfavorites', 'browserforward', 'browserhome', 'browserrefresh', 'browsersearch','browserstop', 'capslock', 'clear', 'convert', 'ctrl', 'ctrlleft', 'ctrlright', 'decimal','del', 'delete', 'divide', 'down', 'end', 'enter', 'esc', 'escape', 'execute', 'f1', 'f10','f11', 'f12', 'f13', 'f14', 'f15', 'f16', 'f17', 'f18', 'f19', 'f2', 'f20', 'f21', 'f22','f23', 'f24', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'final', 'fn', 'hanguel', 'hangul','hanja', 'help', 'home', 'insert', 'junja', 'kana', 'kanji', 'launchapp1', 'launchapp2','launchmail', 'launchmediaselect', 'left', 'modechange', 'multiply', 'nexttrack','nonconvert', 'num0', 'num1', 'num2', 'num3', 'num4', 'num5', 'num6', 'num7', 'num8', 'num9','numlock', 'pagedown', 'pageup', 'pause', 'pgdn', 'pgup', 'playpause', 'prevtrack', 'print','printscreen', 'prntscrn', 'prtsc', 'prtscr', 'return', 'right', 'scrolllock', 'select','separator', 'shift', 'shiftleft', 'shiftright', 'sleep', 'space', 'stop', 'subtract', 'tab','up', 'volumedown', 'volumemute', 'volumeup', 'win', 'winleft', 'winright', 'yen', 'command','option', 'optionleft', 'optionright' ]

    彈窗操作

    我們在 pyautogui 庫對于彈出窗口的使用方法大體如下:

    import pyautogui# 顯示一個簡單的帶文字和OK按鈕的消息彈窗。用戶點擊后返回button的文字。 pyautogui.alert(text='', title='', button='OK') b = pyautogui.alert(text='要開始程序么?', title='請求框', button='OK') print(b) # 輸出結果為OK# 顯示一個簡單的帶文字、OK和Cancel按鈕的消息彈窗,用戶點擊后返回被點擊button的文字,支持自定義數字、文字的列表。 pyautogui.confirm(text='', title='', buttons=['OK', 'Cancel']) # OK和Cancel按鈕的消息彈窗 pyautogui.confirm(text='', title='', buttons=range(10)) # 10個按鍵0-9的消息彈窗 a = pyautogui.confirm(text='', title='', buttons=range(10)) print(a) # 輸出結果為你選的數字# 可以輸入的消息彈窗,帶OK和Cancel按鈕。用戶點擊OK按鈕返回輸入的文字,點擊Cancel按鈕返回None。 pyautogui.prompt(text='', title='', default='')# 樣式同prompt(),用于輸入密碼,消息用*表示。帶OK和Cancel按鈕。 # 用戶點擊OK按鈕返回輸入的文字,點擊Cancel按鈕返回None。 pyautogui.password(text='', title='', default='', mask='*')

    圖像操作

    我們在pyautogui庫對于圖像的使用方法大體如下:

    import pyautogui# 截全屏并設置保存圖片的位置和名稱 pyautogui.screenshot(r'C:\Users\ZDH\Desktop\PY\my_screenshot.png') # 截全屏并設置保存圖片的位置和名稱 im = pyautogui.screenshot(r'C:\Users\ZDH\Desktop\PY\my_screenshot.png') print(im) # 打印圖片的屬性# 不截全屏,截取區域圖片。截取區域region參數為:左上角XY坐標值、寬度和高度 pyautogui.screenshot(r'C:\Users\ZDH\Desktop\PY\region_screenshot.png', region=(0, 0, 300, 400) )pix = pyautogui.screenshot().getpixel((220, 200)) # 獲取坐標(220,200)所在屏幕點的RGB顏色 positionStr = ' RGB:(' + str(pix[0]).rjust(3) + ',' + \str(pix[1]).rjust(3) + ',' + str(pix[2]).rjust(3) + ')' print(positionStr) # 打印結果為RGB:( 60, 63, 65) pix = pyautogui.pixel(220, 200) # 獲取坐標(220,200)所在屏幕點的RGB顏色與上面三行代碼作用一樣 positionStr = ' RGB:(' + str(pix[0]).rjust(3) + ',' + \str(pix[1]).rjust(3) + ',' + str(pix[2]).rjust(3) + ')' print(positionStr) # 打印結果為RGB:( 60, 63, 65)# 如果你只是要檢驗一下指定位置的像素值,可以用pixelMatchesColor(x,y,RGB)函數,把X、Y和RGB元組值穿入即可 # 如果所在屏幕中(x,y)點的實際RGB三色與函數中的RGB一樣就會返回True,否則返回False # tolerance參數可以指定紅、綠、藍3種顏色誤差范圍 pyautogui.pixelMatchesColor(100, 200, (255, 255, 255)) pyautogui.pixelMatchesColor(100, 200, (255, 255, 245), tolerance=10)# 獲得文件圖片在現在的屏幕上面的坐標,返回的是一個元組(top, left, width, height) # 如果截圖沒找到,pyautogui.locateOnScreen()函數返回None a = pyautogui.locateOnScreen(r'C:\Users\ZDH\Desktop\PY\region_screenshot.png') print(a) # 打印結果為Box(left=0, top=0, width=300, height=400) x, y = pyautogui.center(a) # 獲得文件圖片在現在的屏幕上面的中心坐標 print(x, y) # 打印結果為150 200# 這步與上面的四行代碼作用一樣 x, y = pyautogui.locateCenterOnScreen(r'C:\Users\ZDH\Desktop\PY\region_screenshot.png') print(x, y) # 打印結果為150 200# 匹配屏幕所有與目標圖片的對象,可以用for循環和list()輸出 pyautogui.locateAllOnScreen(r'C:\Users\ZDH\Desktop\PY\region_screenshot.png') for pos in pyautogui.locateAllOnScreen(r'C:\Users\ZDH\Desktop\PY\region_screenshot.png'):print(pos) # 打印結果為Box(left=0, top=0, width=300, height=400) a = list(pyautogui.locateAllOnScreen(r'C:\Users\ZDH\Desktop\PY\region_screenshot.png')) print(a) # 打印結果為[Box(left=0, top=0, width=300, height=400)]

    參考資料

    PyAutoGUI幫助文檔:
    https://blog.csdn.net/qq_34053552/article/details/79776671
    pyautogui圖形自動化,擊敗重復性辦公任務:
    https://blog.csdn.net/qq_43017750/article/details/90575240

    總結

    以上是生活随笔為你收集整理的安卓手机 Python 自动化( uiautomation、uiautomation2、weditor )的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    超碰在线人人爱 | 国产黄在线 | 最近最新mv字幕免费观看 | 亚洲成人免费在线观看 | 国产精品久久久久久吹潮天美传媒 | 伊人网av | 成人午夜av电影 | 成 人 黄 色 视频免费播放 | 日韩色综合网 | 久久丁香网 | 一区二区中文字幕在线播放 | 欧美亚洲国产精品久久高清浪潮 | 最新日韩在线 | 国产精品久久久久一区二区三区 | 久草网站在线观看 | av福利超碰网站 | 成人免费色 | 久久99精品国产麻豆宅宅 | 色资源网免费观看视频 | 日韩欧美视频免费看 | 国产精品a久久 | 精品国内自产拍在线观看视频 | 欧美91成人网 | a久久久久久 | 国产一区二区三区高清播放 | 24小时日本在线www免费的 | 欧美激情片在线观看 | 亚洲伊人色 | 成人蜜桃视频 | 色狠狠狠| 国产色一区 | 五月婷婷综合激情网 | 丁香婷婷基地 | 欧美成人久久 | 久久婷婷国产色一区二区三区 | 日韩高清黄色 | 又黄又爽的视频在线观看网站 | 国产美女视频网站 | 精品久久久免费视频 | www色av| 成人免费共享视频 | 国产精品久久久久久久久久久杏吧 | 精品国产伦一区二区三区观看说明 | 日日夜夜狠狠 | 日韩久久久久久 | 激情丁香婷婷 | 婷婷综合网 | 天天曰夜夜爽 | 97在线观看免费高清 | 久久免费的视频 | 狠狠gao| 91视频啪 | 国产欧美精品一区二区三区 | 久久久久久久久久国产精品 | 亚洲成a人片在线www | 在线成人中文字幕 | 91av观看 | 免费看片网页 | 不卡视频国产 | 久久精品91视频 | 成人av在线亚洲 | 国产区久久 | 在线观看视频三级 | 伊人av综合 | 日日干 天天干 | 欧美韩国日本在线 | 粉嫩av一区二区三区四区在线观看 | 久久国产精品第一页 | 在线看污网站 | 国产高清不卡一区二区三区 | 国产精品久久毛片 | 黄网站色视频 | 久久新视频| 国产成人精品在线播放 | 欧美日韩裸体免费视频 | 黄色软件在线看 | 就要干b | 99久久这里只有精品 | 91私密视频 | 91在线观 | 日韩深夜在线观看 | 极品中文字幕 | 国产精品免费视频久久久 | 久久久久久久99精品免费观看 | 久久久久久久国产精品视频 | 久久永久视频 | 看av免费 | 在线观看国产www | 天天操天天干天天综合网 | 天堂av网址| 狠狠干狠狠色 | av不卡免费看 | 国产不卡视频在线播放 | 国产一区在线精品 | 久久午夜色播影院免费高清 | 日韩免费av在线 | 国产伦理久久精品久久久久_ | 成人免费在线观看av | 91成人午夜| 国产精品一区一区三区 | 亚洲欧美视频 | 999成人网 | 97精品视频在线播放 | 亚洲一区 av | 久久a免费视频 | 日本aaaa级毛片在线看 | 日韩在线观看一区二区 | 中文字幕久久精品 | 成人性生活大片 | 美女网站色免费 | 日本丰满少妇免费一区 | 天天爽夜夜爽人人爽曰av | 97视频在线观看免费 | 一区二区三区四区不卡 | 日韩av片在线 | 国产特级毛片aaaaaa高清 | 91插插插网站 | 综合久久久久 | 在线色亚洲 | 国产中文字幕免费 | 美女福利视频 | 国产中文字幕在线看 | 三级毛片视频 | 国产美女网站在线观看 | 国产精品久久久久久久久岛 | 91av中文 | 日韩性色| 中文一二区 | 日本韩国在线不卡 | 日日夜夜中文字幕 | 色中射| 麻豆影视在线播放 | 午夜久久精品 | 国产高清免费视频 | 中日韩在线视频 | 日本电影久久 | 亚洲国产精久久久久久久 | 国产精品久久久久一区二区三区共 | 精品国产一区二区三区四区在线观看 | 色综合天天干 | 国产成人免费在线 | 蜜臀av在线一区二区三区 | 黄av免费| 五月丁香 | 久久视频一区 | 亚洲国产一区在线观看 | 最近中文字幕免费视频 | 成人综合日日夜夜 | 五月天堂色| 欧美一区二区在线刺激视频 | 亚洲高清精品在线 | 国产成人精品久久久 | 四虎成人精品永久免费av | 欧美孕交vivoestv另类 | 欧美十八 | 特级西西444www大精品视频免费看 | 国产超碰在线观看 | 国产精品午夜久久 | a天堂最新版中文在线地址 久久99久久精品国产 | 亚洲黄色影院 | 亚洲一级国产 | 麻豆手机在线 | 狠狠色丁香婷婷 | 免费h精品视频在线播放 | 三上悠亚一区二区在线观看 | 麻豆视传媒官网免费观看 | 久久久久国产一区二区三区 | 国产亚洲精品女人久久久久久 | 日本久久成人中文字幕电影 | 99精品视频在线观看视频 | www.久久免费 | 亚洲人人射 | 国产精品久久久久久久免费 | 91你懂的| 欧美精品免费一区二区 | 亚洲精品玖玖玖av在线看 | 在线观看视频99 | 亚洲欧美日韩一级 | 久久免费视频在线 | 国产伦理一区二区 | 激情欧美xxxx | 久久国产一区 | 日韩va欧美va亚洲va久久 | 日操干| 久久精品99国产精品酒店日本 | 亚洲一级二级三级 | 一区 二区 精品 | 天天射天天拍 | 亚洲国产日韩一区 | 成人动图| 国产精品系列在线 | 九九在线视频 | 亚洲成人国产 | 免费a级毛片在线看 | 在线观看免费国产小视频 | 成年人免费在线观看网站 | 精品播放 | 人人爽久久久噜噜噜电影 | 97色se| 亚洲一二视频 | 亚洲激情 欧美激情 | 亚洲久久视频 | 婷婷六月中文字幕 | 久久激情视频免费观看 | 国产中文字幕免费 | 亚洲精品中文字幕在线 | 一区二区三区在线视频111 | 麻豆播放| 天堂av免费在线 | 久久精品视频在线 | 日av免费| 久久九精品 | 91传媒免费在线观看 | 亚州精品天堂中文字幕 | 在线一二三区 | 天天射天天添 | 国产.精品.日韩.另类.中文.在线.播放 | 久久一线 | 国产色拍 | 国产精品免费久久久久影院仙踪林 | 久久五月婷婷丁香社区 | 国产精品亚洲片在线播放 | 久久久久国产精品www | 成人小视频在线观看免费 | 人人插人人看 | 99热最新精品 | 国内成人精品视频 | 日本黄色黄网站 | 91超在线 | 久久久久久国产精品久久 | 精品中文字幕在线播放 | 91av观看| 少妇bbbb搡bbbb桶| 中文字幕在线字幕中文 | 国产精品99蜜臀久久不卡二区 | 国产精品福利无圣光在线一区 | 丁香五月亚洲综合在线 | 免费一级片在线观看 | 欧美日韩三级在线观看 | 日韩在线观看视频一区二区三区 | 久久精品视频18 | 精品99999 | 中文有码在线 | 最新国产精品视频 | 91九色成人蝌蚪首页 | 99爱视频| 国产精品热 | 国产精品一区二区中文字幕 | 激情网在线视频 | 天天干天天爽 | 色激情五月 | 久久国产欧美日韩精品 | 国内视频一区二区 | 久久男人免费视频 | 亚洲综合激情小说 | 亚洲激情国产精品 | 久久第四色| 日本大片免费观看在线 | 91探花在线 | 亚洲高清av在线 | 99久久久久免费精品国产 | 人人爽久久涩噜噜噜网站 | 亚洲精品高清一区二区三区四区 | 久久久久成人免费 | 在线色亚洲 | 日韩电影在线一区 | 伊人狠狠色丁香婷婷综合 | 亚洲精品永久免费视频 | 超碰97在线人人 | 久久少妇 | 色资源二区在线视频 | 男女啪啪网站 | 日韩在线观看小视频 | 国产品久精国精产拍 | 亚洲影音先锋 | 免费a级黄色毛片 | 日韩综合精品 | 亚洲毛片在线观看. | 色资源网在线观看 | www国产亚洲精品久久网站 | 亚洲国产成人精品久久 | 久久精品美女视频 | 久久精品国产精品亚洲 | 在线观看日韩专区 | 18国产精品白浆在线观看免费 | 99久久久久久久久久 | 久久精品com | 久久五月精品 | 久久a热6| 久久久久免费精品视频 | 国产亚洲精品久久 | 在线看国产精品 | 成人黄在线观看 | 天天爱天天射 | 高清精品在线 | 久久短视频| 精品av在线播放 | 视频精品一区二区三区 | 亚洲三级网 | 99精品国产aⅴ | 韩日在线一区 | 99久久精品国 | 波多野结衣电影久久 | 久久999精品 | 欧美性粗大hdvideo | 国产精品免费久久久久久久久久中文 | 超碰在线成人 | 成人污视频在线观看 | 成人av电影免费在线播放 | 九九交易行官网 | 天天伊人网| 91精品色 | 亚洲 欧美变态 另类 综合 | 香蕉精品视频在线观看 | 午夜精品久久久久久久久久 | 免费日韩一级片 | 在线久久 | 国产成人精品一区在线 | 日韩高清在线一区二区三区 | 欧美午夜精品久久久久久孕妇 | 亚洲永久精品一区 | 亚洲欧美国产精品18p | 国产精品久久久久久久久久不蜜月 | 九九视频网站 | 久久久久久久久久久黄色 | 久久成人精品电影 | 中文字幕在线观看不卡 | 亚洲综合网 | 成人香蕉视频 | 国产小视频在线观看免费 | 黄视频色网站 | 精品成人在线 | 在线免费观看涩涩 | 国产一级电影免费观看 | 91成人欧美 | 最近中文字幕完整高清 | 国外调教视频网站 | 高清av在线免费观看 | 免费观看性生活大片3 | 99精品免费久久久久久久久日本 | 国产在线观看高清视频 | 国产一二三四在线观看视频 | 五月天综合色激情 | 美女免费视频观看网站 | 国产a视频免费观看 | 91成人免费视频 | 久久视频在线观看 | 99c视频在线| 欧美午夜a| 九九九九热精品免费视频点播观看 | 中文字幕在线观看视频免费 | av在线在线 | 69久久夜色精品国产69 | 91精品啪在线观看国产 | 五月天天天操 | 国产精品自拍在线 | 黄色av成人在线观看 | 中文字幕日韩一区二区三区不卡 | 999久久久久 | 色婷婷午夜 | 欧美日韩精品在线观看 | 婷婷激情欧美 | 91网址在线观看 | 日本免费一二三区 | 中文字幕在线观看三区 | 97免费在线观看视频 | 九九九九精品九九九九 | 日韩av一区二区在线 | 亚洲精品国产麻豆 | 96av视频 | 日韩欧美视频在线免费观看 | 人人草网站 | 最近乱久中文字幕 | 中文字幕在线资源 | 国产韩国日本高清视频 | 成年人在线免费看视频 | 久久99亚洲网美利坚合众国 | 国产一区二区精 | h文在线观看免费 | 黄色片视频免费 | 免费高清在线观看电视网站 | 亚洲精品理论 | 9999在线视频 | 国产精品久久久久久久久久久久久久 | 国产精品久久久久久一区二区 | 91九色视频导航 | 欧美日韩一区二区三区在线免费观看 | 国产精品 中文在线 | 亚洲闷骚少妇在线观看网站 | 狠狠躁天天躁 | 在线性视频日韩欧美 | 国产在线不卡 | 中文字幕国语官网在线视频 | 成人免费影院 | 在线播放一区二区三区 | 国产成人1区 | 欧美99热| 中文字幕免费中文 | 九草视频在线 | 91成人免费 | 日日操日日插 | 欧美中文字幕第一页 | 又色又爽又激情的59视频 | av中文天堂 | 91精品啪在线观看国产81旧版 | 91久久精品一区二区二区 | 欧洲精品视频一区二区 | 免费看搞黄视频网站 | 色综合天天色 | 国产97色| 九九av| av在线精品| 久久午夜网 | 91成人精品观看 | 日本三级吹潮在线 | 人人澡澡人人 | 国产黄色片免费 | 成人免费一区二区三区在线观看 | 伊人永久在线 | 久久久黄视频 | 少妇搡bbbb搡bbb搡aa | 91亚洲网 | 网站在线观看日韩 | a天堂最新版中文在线地址 久久99久久精品国产 | 麻豆一区在线观看 | 久久99久久99 | 国产一区高清在线观看 | 精品国产一区二区三区噜噜噜 | 在线成人免费av | 天天射天天操天天 | 亚洲午夜精品在线观看 | 日韩综合精品 | 97色在线观看 | 精品国产乱码久久 | 国内三级在线观看 | 中文乱码视频在线观看 | 91网站免费观看 | 午夜精品在线看 | 久久久麻豆 | 久久99久久99精品免视看婷婷 | 精品国产aⅴ麻豆 | www.com黄色| 日韩在线高清免费视频 | 亚洲精品乱码白浆高清久久久久久 | 91视频com | 国产精品av免费在线观看 | 久久久国产精品成人免费 | 成人97视频| 九九激情视频 | 午夜美女av | 日韩午夜小视频 | 国产高清精 | 热久久视久久精品18亚洲精品 | 看v片 | 亚洲精品ww| 亚洲欧美日韩精品一区二区 | 日韩在线看片 | 久久这里精品视频 | 9在线观看免费高清完整版在线观看明 | 久久综合久久综合这里只有精品 | 美女黄网久久 | 激情动态 | 草久在线视频 | 欧美性色19p | 国产 成人 久久 | 亚洲国产丝袜在线观看 | 国产无遮挡又黄又爽在线观看 | 国产69精品久久app免费版 | 久草视频免费在线观看 | 99久久日韩精品免费热麻豆美女 | 久久超 | 91大神dom调教在线观看 | 成人黄色免费在线观看 | 成人av在线网址 | 久久成人免费 | 中文字幕在线视频国产 | 黄污视频网站大全 | 欧美网址在线观看 | 亚洲乱码中文字幕综合 | 欧美a级成人淫片免费看 | 欧美激情综合色 | 91成人在线视频观看 | 日本黄色免费网站 | 欧美一级看片 | 久久综合影院 | 日韩免费中文字幕 | 久草视频免费 | 9ⅰ精品久久久久久久久中文字幕 | 在线小视频你懂得 | 久久你懂的 | 免费日韩 精品中文字幕视频在线 | 久草在线费播放视频 | 国产成人在线看 | 日韩美在线 | 在线观看www视频 | 亚洲综合国产精品 | 三级在线国产 | 国产高清久久 | 黄a在线观看| 欧美在线观看视频一区二区 | 久久综合久久综合这里只有精品 | 国内精品免费 | 国产在线欧美 | 国产午夜小视频 | 国产精品完整版 | 免费看片在线观看 | 夜夜躁日日躁狠狠久久av | 亚洲第一区在线播放 | 伊人国产视频 | 五月婷婷一区 | 最新av在线免费观看 | 一区二区三区精品在线视频 | 日韩视频在线观看免费 | 蜜桃视频成人在线观看 | 久久99国产视频 | 日本精品久久久久久 | 日韩综合第一页 | 国产一区二区久久久久 | 久久久久黄色 | 91在线精品一区二区 | 中文字幕在线观看亚洲 | 狠狠操影视 | 99精品国产高清在线观看 | 精品自拍sae8—视频 | 91亚洲网| 日韩在线视频观看免费 | 天天摸天天干天天操天天射 | 99久久久久久国产精品 | 91成年人视频 | 亚洲无线视频 | 国产精品热| 2023亚洲精品国偷拍自产在线 | 久久国产精品偷 | 免费男女羞羞的视频网站中文字幕 | 99精品视频在线观看免费 | 日日弄天天弄美女bbbb | 99久高清在线观看视频99精品热在线观看视频 | 欧美最新大片在线看 | av黄色一级片 | 91综合色| 亚洲成人在线免费 | 久久极品 | 久久免费高清 | 国产精品久久久久久影院 | 成人免费观看视频大全 | 高清av在线免费观看 | 国产成人黄色片 | 国产免费久久久久 | 午夜久久福利影院 | 美女久久久久久久久久久 | 亚洲高清在线观看视频 | 国产福利中文字幕 | 亚洲久草视频 | 亚洲精品视频一二三 | 久久艹99 | 粉嫩av一区二区三区入口 | 在线国产观看 | 色欧美成人精品a∨在线观看 | 69欧美视频 | 夜夜澡人模人人添人人看 | 中文字幕一区二区三区在线观看 | 96精品视频 | 亚洲精品免费看 | 在线a视频免费观看 | 久久精品视频国产 | 91视频久久 | 精品美女在线视频 | 五月婷婷视频在线观看 | 极品嫩模被强到高潮呻吟91 | 日日碰夜夜爽 | 国产精品免费av | 999电影免费在线观看2020 | 99精品国自产在线 | 91在线资源 | 黄网站污 | 久久亚洲欧美日韩精品专区 | 精品在线视频播放 | 久草免费在线观看视频 | 亚洲综合在线五月天 | 国产成人精品一区二区三区免费 | av在线小说| 日韩在线精品一区 | 99精品久久久久久久久久综合 | 欧美三级高清 | 久久五月婷婷丁香社区 | 欧美韩国日本在线观看 | 色香天天| 中文av网站 | 久久国产a | 精品91在线| 中文字幕一区二区三区乱码在线 | 久久免费精品视频 | 国产一区二区高清不卡 | 国产视频第二页 | 日韩专区av| 亚洲在线视频观看 | 黄色91在线观看 | 在线蜜桃视频 | 国产精品久久久久久久久免费看 | 国产精品久久三 | 精品国产乱子伦一区二区 | 精品久久久久久亚洲综合网站 | 97人人澡人人爽人人模亚洲 | 高清久久久 | 中文字幕高清av | 在线一区二区三区 | 久久久久99精品国产片 | 97香蕉视频 | 日日夜夜免费精品 | 中文字幕免费 | 激情黄色一级片 | 在线观看色视频 | 国产精品毛片一区二区在线看 | 日韩动漫免费观看高清完整版在线观看 | 亚洲精品高清视频在线观看 | 91视频首页 | av一级在线| 五月天丁香 | 91片黄在线观 | 免费亚洲黄色 | 亚洲电影图片小说 | 狠狠色综合欧美激情 | 午夜国产福利在线观看 | 久久久www成人免费精品张筱雨 | 天天干天天草天天爽 | 精品国产电影一区 | 黄色软件大全网站 | 欧美日韩视频在线播放 | 婷婷成人亚洲综合国产xv88 | 久久久久久欧美二区电影网 | 亚洲精品国产免费 | av中文字幕不卡 | 国产亚洲精品久久久久久无几年桃 | 91精品欧美 | 国内精品久久久久久久久久清纯 | 久久久午夜视频 | 欧美一区二区在线免费观看 | 久久与婷婷| 欧美日韩一区三区 | 婷婷久久久 | 99国产在线视频 | 国产精品丝袜在线 | 亚洲成a人片综合在线 | 亚洲午夜精品一区二区三区电影院 | 欧美精品二 | 久久久久久久久久久国产精品 | 久久久www成人免费精品 | 亚洲一区视频免费观看 | 毛片网站免费 | 这里只有精彩视频 | 国产精品麻豆99久久久久久 | 日日夜夜骑 | 91精品国产自产91精品 | 亚洲,国产成人av | 婷婷资源站 | 激情视频国产 | av专区在线| 久久国内精品99久久6app | 91麻豆精品国产91久久久更新时间 | 日韩欧美极品 | 国产精品久久久久亚洲影视 | 国产在线精品二区 | 五月综合婷 | 在线视频成人 | 欧美日韩视频在线观看一区二区 | 欧美在线观看视频一区二区三区 | 亚洲欧美国产精品18p | 友田真希av | 日日夜夜网 | 欧洲av在线 | 天天操天天操天天爽 | 波多野结衣视频一区二区三区 | av性网站| 欧美日韩高清在线观看 | 欧美性久久久久久 | 激情开心站 | 九九热免费精品视频 | 国产原厂视频在线观看 | 天天干天天拍天天操天天拍 | 嫩小bbbb摸bbb摸bbb | 国产精品久久久久久久久久三级 | 天天搞夜夜骑 | 91一区一区三区 | 99r在线 | 精品人人人 | 久久人人爽人人爽人人片av免费 | 天天插天天干天天操 | 91在线最新 | 亚洲日日射| 国产最新91 | 99国产精品视频免费观看一公开 | 欧美日韩精品久久久 | 日黄网站 | 玖玖视频在线 | 精品国产乱码久久久久久浪潮 | 午夜视频99| 天天做天天干 | 久久综合欧美 | 91九色九色| 亚洲视频免费在线观看 | 2023国产精品自产拍在线观看 | 在线免费观看黄色 | 精品日韩在线 | 国产精品久久久久久久久久三级 | 中文字幕在线观看视频一区 | 久久国产精品久久国产精品 | 亚洲观看黄色网 | 天堂视频一区 | 国产色视频123区 | 69精品在线观看 | 99色精品视频 | 天天操天天操天天操 | 日韩久久视频 | 欧美一级在线观看视频 | 九九久久久久久久久激情 | 午夜精品久久久久久久99婷婷 | 精品国产一区二区三区久久 | 国产一级黄 | 一区二区丝袜 | 天天操天天爱天天爽 | 久久亚洲综合色 | 久久综合国产伦精品免费 | av先锋中文字幕 | 亚洲观看黄色网 | www..com毛片 | 激情片av | 日韩激情视频在线 | 又爽又黄又刺激的视频 | 国产日韩精品一区二区三区在线 | 欧美一区二区三区在线看 | av电影av在线 | 一区二区三区在线观看中文字幕 | 韩国在线一区二区 | 国产91精品看黄网站 | 国产又黄又爽无遮挡 | 精品欧美一区二区在线观看 | 最新日韩在线观看视频 | 超碰97免费| 欧美久久久久久久久中文字幕 | 人人澡人人模 | 99热国产在线 | 日韩精品免费在线 | 久草在线综合网 | 国产成人三级在线 | 日韩免费观看一区二区三区 | 日韩a欧美 | 久久久久久久影视 | 亚洲视频 一区 | 欧美亚洲国产精品久久高清浪潮 | 精品国产_亚洲人成在线 | 国产精品18久久久久vr手机版特色 | 亚洲激情免费 | 中文字幕av免费观看 | 91在线色| 欧美日产在线观看 | 99精品视频免费观看 | 一区二区欧美日韩 | 天堂av免费观看 | 麻豆va一区二区三区久久浪 | sm免费xx网站 | 免费在线观看污网站 | 91在线91 | 天天干天天干天天 | 亚洲专区欧美专区 | av福利在线播放 | 国产精品久久久电影 | 免费看wwwwwwwwwww的视频 久久久久久99精品 91中文字幕视频 | 五月婷婷,六月丁香 | 91久久久国产精品 | 在线成人性视频 | 精品久久久影院 | 国产美女在线精品免费观看 | 日韩在线视频不卡 | 色综合久久中文综合久久牛 | 欧美日韩免费观看一区=区三区 | 夜夜躁日日躁狠狠久久av | 亚洲精品视频在线免费 | 国产伦理久久精品久久久久_ | 99久久综合狠狠综合久久 | 久久免费视频这里只有精品 | 六月激情婷婷 | 99久久精品电影 | 在线黄色av电影 | 中文字幕在线看视频国产中文版 | 国产精品99久久久精品 | 久久综合狠狠综合久久激情 | 日韩免费av片 | 国产精品激情 | 国产视频久久久 | 色噜噜日韩精品欧美一区二区 | 久久久久亚洲最大xxxx | 色小说av | 午夜视频在线观看一区二区三区 | 亚洲欧洲日韩在线观看 | 青春草国产视频 | 国产精品资源 | 二区三区在线观看 | www色综合| 五月婷婷国产 | 久久久久久久久久国产精品 | 日韩在线视频国产 | 亚洲国产成人精品在线观看 | 免费瑟瑟网站 | 午夜在线观看影院 | 麻豆视频一区二区 | 亚洲全部视频 | 日本中文字幕电影在线免费观看 | 天躁狠狠躁 | 亚洲精品视频播放 | 国产区精品区 | 福利视频导航网址 | 久久免费美女视频 | 精品国产一区二区三区四 | 日韩欧美在线高清 | 天天玩天天干天天操 | 色黄视频免费观看 | 在线观看一区 | 亚洲精品国产成人av在线 | 99久久er热在这里只有精品15 | 日韩色综合网 | 国产精品18久久久久久不卡孕妇 | 久草在线在线视频 | 精品人妖videos欧美人妖 | 国产乱码精品一区二区三区介绍 | 国产 在线观看 | 久久人人97超碰精品888 | 天天·日日日干 | 激情影音 | 日韩午夜网站 | 丁香婷婷在线观看 | 美女网站视频免费都是黄 | 久久免费播放视频 | 日日婷婷夜日日天干 | 日本中文字幕在线免费观看 | 天天操天天操天天操天天操 | 亚洲午夜久久久久久久久电影网 | 免费成人av网站 | 日韩在线视频观看免费 | 中文超碰字幕 | 精品久久久久久亚洲综合网站 | aaa日本高清在线播放免费观看 | 色综合久久久久综合99 | 成人av影视观看 | 91豆麻精品91久久久久久 | 日产乱码一二三区别在线 | 热re99久久精品国产66热 | 97免费在线观看视频 | 久久tv | 成年人免费在线观看 | 激情综合站 | 免费男女羞羞的视频网站中文字幕 | 国产高清视频在线播放 | 99re中文字幕 | 91热爆在线观看 | 九九精品久久 | 成年人免费看av | 最新日本中文字幕 | 91资源在线 | 亚洲精品一区二区三区新线路 | 日韩av高潮 | 国产精品久久久久久久久蜜臀 | 免费观看一区 | 日日操日日| 天天干夜夜干 | 91在线视频在线 | 亚洲综合色视频在线观看 | 人人爽人人爱 | 久久综合免费视频 | 五月婷婷香蕉 | 国产欧美精品在线观看 | 久久女同性恋中文字幕 | 91精品国产一区二区在线观看 | 日韩免费一区二区在线观看 | 久久在线一区 | 永久av免费在线观看 | 日韩精品一区二区在线观看视频 | 一区 在线 影院 | 天天干天天操天天爱 | 欧美作爱视频 | 国产午夜精品福利视频 | 97在线观视频免费观看 | 成人91在线 | 国产一级精品视频 | 四虎影视成人精品国库在线观看 | 中文字幕在线观看你懂的 | 日韩欧美一区二区三区在线观看 | 国产在线精品播放 | 免费看十八岁美女 | 操操操干干干 | 国产最新精品视频 | 国产伦精品一区二区三区… | 欧美成人一区二区 | 在线观看国产福利片 | 免费观看一区二区 | 小草av在线播放 | 国产精品久久久久久久久软件 | 99久久精品国产网站 | www.五月天 | 狠狠插狠狠操 | 亚洲视频免费在线观看 | 日韩免费观看av | 亚洲综合激情五月 | 91一区二区在线 | 99视 | 伊人久久五月天 | 欧美va日韩va | 久久精品播放 | 日韩在线视频观看免费 | 日韩精品亚洲专区在线观看 | 国产日韩精品一区二区在线观看播放 | 日女人电影| 成人aaa毛片| 91精品黄色 | 国产午夜精品一区二区三区欧美 | 日韩高清不卡一区二区三区 | 久久国产精品99久久人人澡 | 全黄网站 | 91爱爱中文字幕 | 五月天丁香综合 | 国产小视频在线免费观看 | 99亚洲国产 | 最近最新mv字幕免费观看 | 国产精品麻豆果冻传媒在线播放 | 91天堂素人约啪 | 人人看人人爱 | 在线免费观看黄色大片 | www.国产在线观看 | 制服丝袜在线91 | av一级片在线观看 | 国产精品com| 亚洲人成在线电影 | 国产手机视频在线播放 | 黄色aaa毛片| 91九色porny蝌蚪主页 | 久久av电影| 久久伊99综合婷婷久久伊 | 亚洲久在线 | 婷婷丁香在线 | 日韩视频免费观看高清完整版在线 | 久日精品 | 亚洲精品国产欧美在线观看 | 久久9精品 | www夜夜操 | 国产精品va在线观看入 | 国产精品久久久久久99 | 亚洲精品中文字幕在线 | 麻豆一精品传二传媒短视频 | 欧美在线一级片 | 欧美日韩在线观看一区二区三区 | 国产福利在线免费 | 久久综合天天 | 天天躁日日躁狠狠躁av中文 | 久草在线久草在线2 | 天天操天天操天天操天天 | 亚洲精品视频在线播放 | 青青河边草观看完整版高清 | 国产三级香港三韩国三级 | 久久精品欧美一区二区三区麻豆 | 国内精品视频免费 | 欧美另类v | 国产日韩中文字幕在线 | 国内外成人在线视频 | 日韩成人中文字幕 | 伊人婷婷综合 | 免费婷婷 | 最近日本中文字幕 | 欧美日韩久久久 | 免费看的av片 | 欧美日韩三级在线观看 | 欧美91精品久久久久国产性生爱 | 中文字幕乱在线伦视频中文字幕乱码在线 | 成人动漫精品一区二区 | 成人免费观看在线视频 | www.在线看片.com | 99久久成人 | 麻豆传媒在线视频 | 国产 日韩 中文字幕 | 制服丝袜一区二区 | 久草资源免费 | 中文字幕在线视频免费播放 | 麻豆精品视频在线 | 韩国视频一区二区三区 | 天天色成人 | 一级做a爱片性色毛片www | 欧美综合国产 | 亚洲精品免费看 | 黄色一级大片在线免费看产 | 日韩字幕 | 久久久久国产a免费观看rela | 久青草视频 | 亚洲艳情| 丁香九月婷婷综合 | 九九免费在线看完整版 | 黄色免费网站 | 国产在线久草 | 国产在线观看xxx | 久草在线高清 | 97在线免费|