Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Appium+python×Ô¶¯»¯²âÊÔ·ÖÀû±¦app
 
×÷ÕßêdzƣºÑ§º£ÎÞÑÄÀÖ×öÖÛ
  2999  次浏览      29
 2020-11-4
 
±à¼­ÍƼö:
±¾ÎÄÕ½éÉÜͨ¹ýʵÏÖ·ÖÀû±¦app²¿·Ö¹¦ÄÜ×Ô¶¯»¯²âÊÔ£¬À´½éÉÜAppium+python×Ô¶¯»¯²âÊÔappµÄ»ù±¾Ô­ÀíºÍ²Ù×÷¼¼ÇÉ£¬¼°¿ÓµãºÍ¸öÈ˾­Ñ飬À´°ïÖúÏëѧϰ×Ô¶¯»¯²âÊÔµÄͬѧ¸üÈÝÒ×µØÕÆÎÕÏà¹Ø¼¼Êõ¡£
±¾ÎÄÀ´×ÔÓÚ¼òÊ飬ÓÉ»ðÁú¹ûÈí¼þAlice±à¼­¡¢ÍƼö¡£

Ê×ÏÈÈÃÎÒÃǰѻ·¾³´î½¨ÆðÀ´ÏÈ£º

£¨Ò»£©»·¾³´î½¨

1ÐèÒªjdk1.8°æ±¾»òÒÔÉÏ£º

È¥¹ÙÍøÏÂÔØ¶ÔÓ¦°æ±¾£¬°²×°ºóÅäÖû·¾³±äÁ¿¡£¡£¡£¡£¡£¡£´Ë²¿·Ö¹ýÓÚ»ù´¡£¬²»¶à½²¡£¼ÇסҪ1.8°æ±¾»òÒÔÉϾÍÐУ¡

2°²×°sdk£º

¹ÙÍø£¨¿É·­Ç½Ñ¡Ôñ£©£ºhttp://developer.android.com/sdk/index.html

²»¿É·­Ç½Ñ¡Ôñ£ºhttp://www.androiddevtools.cn/

ÏÂÔØÕâ¸ö¼´¿É£º

ÏÂÔØºó´ò¿ªF:\android SDK\SDK Manager£¬°´Ä¬ÈÏÍÆ¼ö°²×°SDK¼´¿É

ÅäÖû·¾³±äÁ¿£º

Ôö¼ÓANDROID_HOMEϵͳ±äÁ¿ÎªÄãµÄandroid SDK·¾¶£¬²¢°ÑtoolsºÍplatform-toolsÁ½¸öĿ¼¼ÓÈ뵽ϵͳµÄPath·¾¶Àï¡£

Àý£ºANDROID_HOME ±äÁ¿Öµ: F:\android SDK

ÅäÖÃÍê»·¾³ºó£¬¿ÉÒÔÔÚÔËÐÐcmdºóÊäÈë adb(ÄÜ¿´µ½µ±Ç°°æ±¾ºÅ)£¬ÔÙÊäÈëandroid(¿Õ¸ñ)-h

ÒÔÏÂÊÇÅäÖóɹ¦µÄ½ØÍ¼£º

3°²×°python£º

¹ÙÍø»ò°Ù¶ÈÏÂÔØpythonÏÂÔØºÃºó°²×°µ½ËùÐ谲װ·¾¶¡£

»·¾³±äÁ¿¿ÉÒÔÔÚ°²×°¹ý³ÌÖÐÑ¡ÔñAdd python to environment variables£¬°²×°ºó»á×Ô¶¯ÅäÖû·¾³±äÁ¿

cmdÊäÈëpython£¬³öÏÖ°æ±¾ºÅ£¬ÅäÖóɹ¦£º

4°²×°nodejs

½øÈëµØÖ·²¢ÏÂÔØnodejs6.9.4µÄ°²×°³ÌÐò»ò°ü£ºhttp://ju.outofmemory.cn/entry/296682

´Ë´¦×¢Ò⣬nodejs¹ÙÍø×îаæÊÇ10.16.0£¬ºÍ±¾ÈËÏÂÔØµÄappium1_4_16_1°æ±¾²»¼æÈÝ£¨²»¼æÈÝʹÓÃappium½«»á³öÏÖÎÊÌ⣩¡£ËùÒÔÔÚÉÏÃæµÄÍøÖ·ÏÂÔØ6.9.4µÄ¾É°æ±¾

ÏÂÔØ°²×°Íê³Éºó£¬ÔËÐÐcmd£¬ÊäÈënode(¿Õ¸ñ)-v²é¿´°æ±¾ºÅ:

5°²×°appium

½øÈë¹ÙÍøµØÖ·£ºhttps://bitbucket.org/appium/ appium.app / downloads /£¬²¢ÏÂÔØ1_4_16_1°æ±¾¼´¿É£º

appium°²×°ºÃºó£º

ÕÒµ½Õâ¸öÎļþ°²×°Ä¿Â¼F:\Appium\node_modules.bin£¬½«ÉÏÃæµÄµØÖ·Ìí¼Óµ½»·¾³±äÁ¿pathÏ£»

´ò¿ªcmd£¬ÊäÈëappium(ûÓпոñ)-doctor£¬¼ì²é»·¾³ÊÇ·ñOK£¬³öÏÖAll Checks were successful£¬ËµÃ÷»·¾³OK

6°²×°Appium-Python-Client

´Ë´¦Appium-Python-ClientµÄ°²×°ÍøÉÏ´ó¶àÊý½Ì³Ì¶¼ÊÇÍÆ¼öÓÃcmd ÊäÈ룺pip install Appium-Python-Client£¬Í¨¹ýPython°²×°»òÖ±½ÓÈ¥ÏÂÔØ°ü¡£

ÕâÀïÒòΪÎÒÊÇʹÓÃpycharmÀ´±à³Ì£¬ËùÒÔÖ±½ÓÓÃpycharmÈ¥ÏÂÔØ°²×°¡£·½·¨ºÜ¼òµ¥£¬°Ù¶ÈÏÂÔØ°²×°pycharm£¬¼¤»îpycharm£¨°Ù¶ÈÓн̳̣©¡£

ÔÚFile-SettingÀïÕÒµ½Project Interpreter£ºÈ»ºóµã»÷+ºÅ£¬ËÑË÷Appium-£¬¼´¿ÉÕÒµ½Appium-Python-Client£¬Ñ¡Öеã»÷install packageÏÂÔØ°²×°

£¨¶þ£©Ê¹Óù¤¾ß»ù±¾ËµÃ÷

1ʹÓÃAppium£º

ÈçÏÂͼ£¬×óÉÏ·½°²×¿°´Å¥ÊÇÅäÖÃÊÖ»úÐÅÏ¢£¬ÓÒÉÏ·½Èý½Ç°´Å¥ÊÇÆô¶¯Appium£¬ÓÒÏ·½À¬»øÏäÊÇÇå¿ÕAppiumÈÕÖ¾¡£

ÅäÖÃÊÖ»úÐÅÏ¢£ºÑ¡ÖÐApplication Path£¬µã»÷Choose£¬Ñ¡ÔñÒª²âÊÔµÄapk°²×°°ü£¨ÐèÒªÏÂÔØ±£´æÔÚµçÄÔÉÏ£©¡£Ñ¡Ôñºó»á×Ô¶¯ÌîдPackage£¬Wait for Package£¬Launch Activity£¬Wait for Activity£¨PackageºÍActivityÓÃÓÚÆô¶¯app£©¡£Platform NameÑ¡ÔñAndroid£¬Automation NameÑ¡ÔñAppium£¬PlatformVersionÑ¡Ôñ²»¸ßÓÚÒѰ²×°µÄSDK£¬ÕâÀïÑ¡Ôñ×îеÄAPI Level 23¼´¿É¡£Device NameÊäÈëÒÑÁ¬½ÓµçÄÔµÄÊÖ»úµÄID£º²é¿´ÊÖ»úIDµÄ»°Ê¹ÓÃcmdÊäÈëadb devices¼´¿É

×¢£º£¨Èç¹ûÒòΪûÓа²×°Çý¶¯±¨´í£¬ÔòÏÂÔØÒ»¸ö91ÊÖ»úÖúÊÖÁ¬½ÓÊÖ»ú¾Í»á×Ô¶¯°²×°Çý¶¯£©

×¢£º¹ØÓÚAppium»ñÈ¡´ò¿ªÊÖ»úappĿǰÇײⷢÏÖÖ»ÓÐͨ¹ýApplication PathÈ¥ChooseÒ»¸öapk²ÅÓÐЧ¡£ÍøÉϽéÉܵÄʹÓÃcmdÃüÁîÈ¥»ñÈ¡PackageºÍActivity²¢Ð´ÈëpythonµÄ±à³Ì´úÂëÖÐÈ¥Æô¶¯app²¢Ã»ÓÐЧ¹û£¬»áÒ»Ö±ÉÁÍËÎÞ·¨½øÈëapp¡££¨¸öÈË·¢ÏÖÖ»ÒªAppium ChooseÁËapk£¬python´úÂë²»ÓÃдÈëPackageºÍActivityÒ²ÄÜ´ò¿ªappÕý³£Ö´ÐдúÂ룩

2ʹÓÃuiautomatorviewer£º

android SDK/tools/Ŀ¼ÏÂÓÐÒ»¸öuiautomatorviewer¹¤¾ß£¬ÓÃÓÚÊÖ»úapp½çÃæµÄÔªËØ¶¨Î»¡£ÊÖ»úÕý³£Á¬½ÓµçÄԺ󣬴ò¿ªuiautomatorviewerµã»÷×óÉϽǵݲ׿°´Å¥£¬»ñÈ¡ÊÖ»úµ±Ç°ÏÔʾµÄ¾²Ì¬ÆÁÄ»½çÃæ¡£Êó±êÐüÍ£ÔÚÈÎÒâ¿Éµã»÷µÄÓ¦Óã¬ÓÒ·½»á×Ô¶¯Õ¹Ê¾¶ÔÓ¦µÄ¶¨Î»ÔªËØÐÅÏ¢£»Í¨³£¶¨Î»ÔªËصÄclass»òresource-id£¬È»¶øÓÐЩ½çÃæÊÇÎÞ·¨¶¨Î»µ½ÔªËصģ¬Õâʱºò¾ÍÐèÒªÓõ½TouchAction×ø±ê¶¨Î»£¨ºóÃæ½øÐÐÏê½â£©

3ʹÓÃÕæ»úµ÷ÊÔ£º

±¾ÎÄÕ½éÉܵÄÊÇʹÓÃandroidÊÖ»ú½øÐÐ×Ô¶¯»¯²âÊÔ£¬ÓÉÓÚuiautomatorviewer¼æÈÝÐÔÎÊÌ⣬android°æ±¾ÒªµÍÓÚ8.0£¬·ñÔò»ñÈ¡ÊÖ»úÆÁÄ»»á±¨´í¡£ÎÒÓõÄÊÖ»úandroid°æ±¾ÊÇ5.0.2£»Í¬Ê±Õæ»ú²âÊÔÐèÒª´ò¿ª¿ª·¢ÕßģʽºÍusbµ÷ÊÔ£¨²Ù×÷ºÜ¼òµ¥£¬²»¶®°Ù¶È£©

£¨Èý£©AppiumÓŵã

1¿ªÔ´

2¿ç¼Ü¹¹:NativeApp¡¢Hybird App¡¢Web App

3¿çÉ豸:Android¡¢iOS¡¢Firefox OS

4²»ÒÀÀµÔ´Âë

5ʹÓÃÈκÎWebDriver ¼æÈݵÄÓïÑÔÀ´±àд²âÊÔÓÃÀý¡£±ÈÈç Java£¬ Objective-C£¬ JavaScript with Node .js £¬ PHP£¬ Python£¬ Ruby£¬ C#£¬ Clojure£¬ »òÕß Perl.

6²»ÐèÒªÖØÐ±àÒëAPP

£¨ËÄ£©×Ô¶¯»¯²âÊÔʵÏÖ

1Æô¶¯²âÊÔ»·¾³·ÖÀû±¦app£º

from appium import webdriver
from time import sleep
def equipmentMsg(self):
msg = {'platformName': 'Android', # ÊÖ»úϵͳ
'deviceName': '4S8DQS4T99999999', # ÊÖ»úID
'platformVersion': '5.0.2', # android°æ±¾
'noReset': 'true'}

Dr = webdriver.Remote("http://localhost:4723/wd/hub", msg)
# ´ò¿ªÊÖ»ú·ÖÀû±¦
Dr.implicitly_wait(10) # ÉèÖÃÒþÐԵȴýʱ¼ä10Ãë
sleep(10)
return Dr

ÆäÖÐplatformName£¬devicesName£¬platformVersionÓëÉÏÃæµÄAppiumÅäÖÃÒ»Ö£¬²»½âÊÍ¡£

×¢£ºnoResetµÄÓÃÒâÊÇÈ¡ÏûAppiumÿ´ÎÔËÐÐapp¶¼ÒªÖØÐ°²×°Ò»´ÎµÄ»úÖÆ£¬¸Ã²ÎÊýÒ²¿ÉÒÔÔÚAppium°²×¿ÅäÖÃÖÖÖ±½Ó¹´Ñ¡£»È»ºóÎÒÔÚÔËÐдúÂëÆô¶¯appʱȥµônoReset²¢Î´³öÏÖapp֨װÏÖÏ󣬵¹ÊÇ»áÖØ¸´³öÏÖÐÂÊÖ½éÉܵĽçÃæ¡£Òò´ËÎÒ¼ÓÉÏnoResetÀ´È¥µôÐÂÊÖ½éÉÜ£¬Ö±½Ó½øÈëapp¡£

Ï·½µÄwebdriver.Remote("http://localhost:4723/wd/hub" ,msg ) ¿ÉÒÔ˵Êǹ̶¨¸ñʽÀ´Æô¶¯app²¢·µ»ØÒ»¸ö driver = Dr£¨DrÔÚËùÓз½·¨¶¼ÓÐÓõ½£©£¬ÓÃdriverÉèÖÃÒþÐԵȴýʱ¼ä10Ã룬implicitly_wait(10)

×¢£ºÓÉÓÚÊÖ»úandroid¼æÈÝÐÔÎÊÌ⣬ʹÓÃAppium²Ù×÷Õæ»ú»áÖØ¸´µØÒªÇó°²×°Appium SettingºÍUnlock£¬½â¾öÕâ¸öÎÊÌâÖ»Òªµ½Appium°²×°Ä¿Â¼F:\Appium\node_modules\appium \ lib \ devices \ androidÏ£¬±à¼­android.js£¬×¢ÊÍÒÔÏÂËÄÐдúÂë¼´¿É

2×¢²á²âÊÔ»·¾³·ÖÀû±¦Õ˺ţº

from Database import DBconnect

def signMsg(self, Dr, phone, ID): # ×¢²áÄ£¿é
Dr.find_element_by_id("com.fenlibao.fenlibao:
id/et_phoneNum").
send_keys(phone) # ÊäÈëÊÖ»úºÅ
sleep(2)
Dr.find_element_by_id("com.fenlibao.fenlibao:id
/tv_getVerifyCode").>click() # µã»÷»ñÈ¡ÑéÖ¤Âë
sleep(2)
msg = str(DBconnect.DBconncet().searchYzm(phone))
# ²éѯÊÖ»úºÅ»ñÈ¡µÄÑéÖ¤Âë
yzm = "".join(msg.split(',')[2].split(':')[1].
split("'")[1])
#·ÖÁѳösqlÖеÄÑéÖ¤Âë
print(yzm)
sleep(1)
Dr.find_element_by_id("com.fenlibao.fenlibao:id/
et_verifyCode").send_keys(int(yzm)) # ÊäÈëÑéÖ¤Âë
sleep(2)
Dr.find_element_by_id("com.fenlibao.fenlibao:id/
et_password").send_keys("123456") # ÊäÈëµÇ½ÃÜÂë
sleep(1)
Dr.find_element_by_id("com.fenlibao.fenlibao:id/
btn_submit") .click() # Ìá½»
sleep(2)
Dr.find_element_by_id("com.fenlibao.fenlibao:id/
tv_right_label") .click() # Ìø¹ýÉèÖÃÊÖÊÆÃÜÂë
sleep(6)

¼òµ¥µÄµã»÷ºÍÊäÈ루À¨ºÅÀïµÄid¾ÍÊÇuiautomatorviewer»ñÈ¡µÄ resource-id£©

ÆäÖвéѯÑéÖ¤Â룺msg = str(DBconnect . DBconncet(). searchYzm(phone)) £¬ÊÇÁ¬½Ó²âÊÔ»·¾³Êý¾Ý¿â»ñÈ¡ÐÂ×¢²áÊÖ»úºÅ·¢Ë͵ÄËæ»úÑéÖ¤Âë²¢½«Êý¾Ý¿âlistÊý¾ÝÁѽâΪ´¿Êý×Ö×Ö·û´® yzm = "" . join(msg.split(',')[2]. split(':')[1]. split("'")[1])

²éѯÊý¾Ý¿â´úÂëÈçÏ£º

import pymysql
import os

def searchYzm(self, phone):
# Á¬½ÓÊý¾Ý¿â
connection = pymysql.connect(host='xxx.xxx.xx.xxx',
user='root', password='xxxxxx', db='xxx',
port=3306, charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor)
# ͨ¹ýcursor´´½¨Óαê
cursor = connection.cursor()
# ´´½¨sql Óï¾ä£¬²¢Ö´ÐÐ
sql = "SELECT * FROM xxxxxxxxxx where phone_num = "
+ str(phone)
cursor.execute(sql)
# ²éѯÊý¾Ý¿âµ¥ÌõÊý¾Ý
# result = cursor.fetchone()
# print(result)
# connection.commit()
# ²éѯÊý¾Ý¿â¶àÌõÊý¾Ý
result = cursor.fetchall()
for i, j in enumerate(result):
if i >= len(result) - 10:
print(j) # ±éÀúÊä³ö²éѯÊý¾Ý
return j
connection.commit()
connection.close()

ÕâÀïlen(result) - 10ÊDzéѯºóֻչʾ×îºó10ÌõÊý¾Ý£¬¿ÉÓÃÓÚ²éѯÊý¾ÝÁ¿´óµÄÇé¿ö£¬ÓÉÓÚsqlÀïÃæÓõIJéѯÌõ¼þÊǾßÓÐΨһÐÔµÄÊÖ»úºÅÂ룬ËùÓÐչʾ10ÌõÊý¾ÝÔÚÕâÀïûÓÐÌåÏÖ³öÀ´¡£Èôֻչʾµ¥ÐÐÊý¾Ý£¬Ò²¿ÉÒÔʹÓÃÉÏ·½±»×¢Ê͵IJéѯÊý¾Ý¿âµ¥ÌõÊý¾ÝµÄ´úÂë

ÔÙ²¹³äÒ»¸ö×Ô¶¯Éú³ÉËæ»úÊÖ»úºÅ·½·¨£º

def creatPhone(self):
head = "13,14,15,16,17,18,19"
body = str(random.randint(100000000, 999999999))
team = head.split(",")
phone = team[random.randint(0, len(team) - 1)]
num = int(phone + body)
print(num)
return num

3²âÊÔ»·¾³·ÖÀû±¦Õ˺ſª»§£º

from appium.webdriver.common.touch_action
import TouchAction def openAct(self, Dr, phone, ID,
cardNO): # ¿ª»§Ä£¿é
commandP = 'adb shell ime set com.baidu.input_bbk.service
/.PinyinIME' # Çл»Æ´ÒôÊäÈ뷨Ϊµ±Ç°ÊäÈë·¨
commandA = 'adb shell ime set io.appium.android.ime
/.UnicodeIME' # Çл»appiumÊäÈ뷨Ϊµ±Ç°ÊäÈë·¨
rows = Dr.find_elements_by_id("com.fenlibao.fenlibao:
id/et_content") # ±éÀú»ñÈ¡¿ª»§½çÃæÊäÈë¿òÔªËØ
for i, j in enumerate(rows):
if i == 0:
j.send_keys("testman") # ÊäÈëÐÕÃû
sleep(1)
if i == 1:
j.send_keys(ID) # ÊäÈëÉí·ÝÖ¤
sleep(1)
if i == 2:
Dr.find_element_by_id("com.fenlibao.fenlibao:id/tv_bankName")
.click() # Ñ¡ÔñÒøÐп¨ sleep(1)
Dr.find_element_by_id("com.fenlibao.fenlibao:id/tv_bankCard")
.click() # Ñ¡ÖÐÒøÐп¨
sleep(1)
os.system(commandP) # Çл»ÊäÈ뷨Ϊ±¾»úÊäÈë·¨
sleep(1)
j.send_keys(cardNO) # ÊäÈëÒøÐп¨¿¨ºÅ
sleep(1)
os.system(commandA) # Çл»ÊäÈ뷨ΪAppiumÊäÈë·¨
if i == 3:
j.send_keys(phone) # ÊäÈëÊÖ»úºÅ
sleep(1)
Dr.find_element_by_id("com.fenlibao.fenlibao:id/
bt_bind").click() # È·ÈÏ sleep(4)
TouchAction(Dr).tap(x=583, y=908, count=1).wait(2000)
.perform() # µã»÷»ñÈ¡ÑéÖ¤Âë
sleep(2) TouchAction(Dr).tap(x=360, y=808, count=1).wait(1000).perform()
# ÖªµÀÁË os.system(commandP)
TouchAction(Dr).tap(x=300, y=908, count=1).wait(1000)
.perform()
# µã»÷Ò»ÏÂÑéÖ¤ÂëÊäÈë¿ò
sleep(1)
ChonZhi.ChonZhi().tapYzm(Dr) # ÊäÈëÑéÖ¤Âë
sleep(1)
size = LoginApp.LoginApp().getSize(Dr)
LoginApp.LoginApp().swip(1000, Dr, size, 365,
1255, 365, 45)
# ÉÏ»¬ÆÁÄ»
sleep(1)
TouchAction(Dr).tap(x=360, y=384, count=1).wait(1000)
.perform() # µã»÷һϽ»Ò×ÃÜÂë
sleep(1)
ChonZhi.ChonZhi().tapPasswd(Dr) # ÊäÈëÃÜÂë
sleep(1)
TouchAction(Dr).tap(x=360, y=498, count=1).wait(1000)
.perform() # µãÒ»ÏÂÈ·ÈϽ»Ò×ÃÜÂë
sleep(1)
ChonZhi.ChonZhi().tapPasswd(Dr) # ÊäÈëÃÜÂë
sleep(1)
TouchAction(Dr).tap(x=345, y=738, count=1).wait(1000)
.perform() # ͬÒâ²¢×¢²á
sleep(2)

×¢£º¿ª»§¹ý³ÌÖгöÏÖÁËÊäÈëÒøÐп¨ºÅ×ÜÊÇȱÉÙһλÊýµÄÇé¿ö£¬ºóÃæÁ˽⵽ÊÇAppiumÊäÈë·¨µÄbug£¬ËùÒÔ´Ë´¦ÊäÈëÒøÐп¨ºÅÐèÒªÇл»ÊäÈ뷨Ϊ±¾»úÆ´ÒôÊäÈë·¨commandP = 'adb shell ime set com.baidu.input_bbk.service/.PinyinIME'£»ÓÃos.system(commandP)Ö´ÐÐÇл»(commandPµÄ´úÂëÒ²¿ÉÒÔÔÚcmdʹÓÃ)£¬Çл»ºóµã»÷ÊäÈë¿ò»á³öÏÖÈí¼üÅÌ£¬ËùÒÔÊäÈëÒøÐп¨ºÅºóÒªÖØÐÂÇл»»áAppiumÊäÈë·¨os.system(commandA)£¬±ÜÃâÈí¼üÅÌÕÚµ²µ½½çÃæÔªËØ

¿ª»§ÐÅÏ¢ÌîдºóÒª½øÈëµ½ÐÂÍø½çÃæ½øÐÐÑéÖ¤ºÍÉèÖý»Ò×ÃÜÂ룬Õⲿ·Ö½çÃæ²»ÊôÓÚ·ÖÀû±¦app£¬ÒªÃ´ÎÞ·¨»ñÈ¡ÔªËØID£¬ÒªÃ´»ñÈ¡ÔªËØÎÞ·¨ÊµÏÖµã»÷£¬ÊäÈëµÈ²Ù×÷¡£Õⲿ·ÖÒªÓõ½Ç°Ã棨¶þ£©-2ʹÓÃuiautomatorviewerÓÐÌáµ½µÄTouchAction×ø±ê¶¨Î»

Êó±êÐüÍ£ÔÚ½çÃæÈÎÒâλÖã¬ÓÒÉÏ·½»áÓÐÒ»¸ö¶ÔÊó±êÖ¸Õë½øÐж¨Î»µÄ×ø±ê¡£¼Ç¼Õâ¸ö×ø±êʹÓÃTouchActionÀà·½·¨ÊµÏÖ¶Ô×ø±êλÖýøÐеã»÷£¬»¬¶¯µÈ²Ù×÷¡£È磺TouchAction(Dr).tap(x=583, y=908, count=1).wait(2000).perform()£»£¨583£¬908£©ÊÇ»ñÈ¡ÑéÖ¤Âë°´Å¥µÄÖÐÐÄ×ø±ê£¬tapÊÇ´¥»÷£¬waitÊÇÖ¸´¥»÷µÄʱ³¤£¨µ¥Î»ºÁÃ룩£¬performÊÇÖ´ÐС£ÆäÖл¹ÓÐÒ»¸ögetSize£¬swip»ñÈ¡ÆÁÄ»´óС£¬»¬¶¯ÆÁÄ»µÄ·½·¨£¬Ò²Êǵ÷ÓÃTouchActionµÄ·½·¨ÎÒ¸ø·â×°ÆðÀ´£¬¾ßÌå´úÂëÈçÏ£º

def getSize(self, Dr):
x = Dr.get_window_size()['width'] # »ñÈ¡ÆÁÄ»¿í¶È
y = Dr.get_window_size()['height'] # »ñÈ¡ÆÁÄ»¸ß¶È
return (x,y)
def swip(self, t, Dr, Size, x1, y1, x2, y2):
# tÊÇ»¬¶¯µÄʱ¼ä£¬ºÁÃë
l = Size
X1 = int(x1)
Y1 = int(y1)
X2 = int(x2)
Y2 = int(y2)
Dr.swipe(X1, Y1, X2, Y2, t)

ͬÀí£¬ÑéÖ¤ÂëºÍ½»Ò×ÃÜÂëÎÞ·¨Í¨¹ý¶¨Î»ÔªËØÈ¥send_keys£¨£©£¬ËùÒÔÒªÇл»»ØÊÖ»úÊäÈë·¨´ò¿ªÈí¼üÅÌÈ»ºó¶ÔÈí¼üÅÌÖеÄÊý×Ö½øÐÐ×ø±ê¶¨Î»£¬ÊµÏÖµã»÷À´ÊäÈëÑéÖ¤ÂëºÍ½»Ò×ÃÜÂ룬·â×°´úÂëÈçÏ£º

def tapYzm(self, Dr):
TouchAction(Dr).tap(x=125, y=848, count=1).wait(1000)
.perform() # ¼üλÊý×Ö1
TouchAction(Dr).tap(x=359, y=848, count=1).wait(1000)
.perform() # ¼üλÊý×Ö2
TouchAction(Dr).tap(x=595, y=848, count=1).wait(1000)
.perform() # ¼üλÊý×Ö3
TouchAction(Dr).tap(x=126, y=971, count=1).wait(1000)
.perform() # ¼üλÊý×Ö4
TouchAction(Dr).tap(x=685, y=748, count=1).wait(1000)
.perform() # ¹Ø±ÕÈí¼üÅÌ
sleep(1) def tapPasswd(self, Dr):
TouchAction(Dr).tap(x=35, y=835, count=1).wait(1000)
.perform() # 1
TouchAction(Dr).tap(x=107, y=835, count=1).wait(1000)
.perform() # 2
TouchAction(Dr).tap(x=181, y=835, count=1).wait(1000)
.perform() # 3
TouchAction(Dr).tap(x=253, y=835, count=1).wait(1000)
.perform() # 4
TouchAction(Dr).tap(x=324, y=835, count=1).wait(1000)
.perform() # 5
TouchAction(Dr).tap(x=396, y=835, count=1).wait(1000)
.perform() # 6
TouchAction(Dr).tap(x=685, y=748, count=1).wait(1000)
.perform() # ¹Ø±ÕÈí¼üÅÌ

²¹³äÒ»¸öÉú³ÉËæ»úÉí·ÝÖ¤ºÅµÄ·½·¨£¨Õâ¸öдµÄ±È½ÏÒ»°ã£¬²»Ï²»¶µÄ¿É×ÔÐаٶȣ©£º

def createID(self):
province = "43,44" # ¹ã¶«£¬ºþÄÏ
cityH = "01,02,03,04,05,06,07,08,09,10,11,12,13,31"
cityG = "01,02,03,04,05,06,07,08,09,12,13,14,15,16,17,18,
19,20,51,52,53"
area = "00"
year = []
for i in range(1949, 2001):
year.append(i)
year = str(year[random.randint(0, len(year) - 1)])
month = "01,02,03,04,05,06,07,08,09,10,11,12"
day = "01,02,03,04,05,06,07,08,09,10,11,12,13,14,
15,16,17,18,19,
20,21,22,23,24,25,26,27,28,29,30,31"
police = "83"
sexM = "1,3,5,7,9"
sexF = "0,2,4,6,8"
num = "0,1,2,3,4,5,6,7,8,9"
team = province.split(",")
p = team[random.randint(0, len(team) - 1)]
print("province = " + p)
if int(p) == 43:
team = cityH.split(",")
cH = team[random.randint(0, len(team) - 1)]
team = month.split(",")
m = team[random.randint(0, len(team) - 1)]
d = "0"
if m == "02":
team = day.split(",")
d = team[random.randint(0, len(team) - 4)]
if m in ("01", "03", "05", "07", "08", "10", "12"):
team = day.split(",")
d = team[random.randint(0, len(team) - 1)]
if m in ("02", "04", "06", "09", "11"):
team = day.split(",")
d = team[random.randint(0, len(team) - 2)]
team = sexM.split(",")
sM = team[random.randint(0, len(team) - 1)]
team = num.split(",")
n = team[random.randint(0, len(team) - 1)]
ID = p + cH + area + year + m + d + police + sM + n
print(ID)
return ID
else:
team = cityG.split(",")
cG = team[random.randint(0, len(team) - 1)]
team = month.split(",")
m = team[random.randint(0, len(team) - 1)]
print(m)
d = "0"
if m == "02":
team = day.split(",")
d = team[random.randint(0, len(team) - 4)]
if m in ("01", "03", "05", "07", "08", "10", "12"):
team = day.split(",")
d = team[random.randint(0, len(team) - 1)]
if m in ("02", "04", "06", "09", "11"):
team = day.split(",")
d = team[random.randint(0, len(team) - 2)]
team = sexF.split(",")
sF = team[random.randint(0, len(team) - 1)]
team = num.split(",")
n = team[random.randint(0, len(team) - 1)]
ID = p + cG + area + year + m + d + police + sF + n
print(ID)
return ID

4µÇ½²âÊÔ»·¾³·ÖÀû±¦app

def loginMsg(self, Dr):
commandP = 'adb shell ime set com.baidu.input
_bbk.service/.PinyinIME' # Çл»Æ´ÒôÊäÈ뷨Ϊµ±Ç°ÊäÈë·¨
commandA = 'adb shell ime set io.appium.android.ime/.
UnicodeIME' # Çл»appiumÊäÈ뷨Ϊµ±Ç°ÊäÈë·¨
os.system(commandA)
Dr.find_element_by_id("com.fenlibao.fenlibao:id/et_username")
.clear() # Çå¿ÕÕ˺Å
Dr.find_element_by_id("com.fenlibao.fenlibao:id/et_username")
.send_keys("18148755362") # ÊäÈëÕ˺Å
sleep(1)
Dr.find_element_by_id("com.fenlibao.fenlibao:id/et_password").
send_keys("123456") # ÊäÈëÃÜÂë
sleep(1)
Dr.find_element_by_id("com.fenlibao.fenlibao:id/btn_submit").
click() # 怬
sleep(2)
def judge(self, element, Dr):


flag = True
try:
Dr.find_element_by_id(element)
return flag
except:
flag = False
return flag


def swipView(self, Dr, Size):
l = Size
TouchAction(Dr).press(x=360, y=480).wait(1000).
move_to(x=0, y=405).wait(1000).move_to(x=200, y=0).wait(1000).release().wait(1000).perform()

 

ÕâÀï½éÉÜÒ»¸ö×ÔдµÄÅжϵ¯´°µÄ·½·¨£¬Õâ¸ö·½·¨ÔÚ×¢²á£¬³äÖµ£¬µÇ½£¬Í¶±ê£¬ÌáÏÖ¶¼Óо­³£Óõ½¡£·½±ãÓÃÓÚ²Ù×÷Á÷³ÌÖзÖÁ÷²Ù×÷µÄ¼ìÑéºÍÅжϣ¬·½·¨´úÂëÈçÏ£ºÈç¹û¼ìÑéµ½µ¯´°½çÃæÔªËØ·µ»ØTrue£¬·ñÔò·µ»ØFalse

def judge(self, element, Dr):
flag = True
try:
Dr.find_element_by_id(element)
return flag
except:
flag = False
return flag

def swipView(self, Dr, Size)ÊǹØÓÚÊÖ»ú»¬¶¯¾Å¹¬¸ñµÇ½appµÄ²Ù×÷£¬ÓÉÓÚ×Ô¶¯»¯²âÊÔ¹ý³Ì»¬¶¯¾Å¹¬¸ñµÄ²Ù×÷±È½Ï·±Ëö£¬ÎÒÔÝʱûÓе÷Óõ½²Ù×÷Âß¼­ÖУ¬¶øÊÇÑ¡ÔñÌø¹ý¡£µ±È»ÕâÀﻹÊǸ½ÉÏ»¬¶¯¾Å¹¬¸ñµÄ´úÂ루ҲÊÇÓÃTouchAction×ø±ê¶¨Î»£©£º

def swip9(self, t, Dr, Size):
l = Size
TouchAction(driver).press(x=360, y=480).wait
(1000).move_to(x=0, y=405).wait(1000).
move_to(x=200,y=0).wait(1000)
.release().wait(1000).perform()

ÆäÖÐpress¾ÍÊÇÊÖÖ¸°´Ñ¹ÆÁÄ»µÄÒâ˼£¬waitÊÇÿ¸ö²Ù×÷µÄµÈ´ýʱ¼ä¼ä¸ô£¬move_to¾ÍÊÇÒÆ¶¯ÊÖÖ¸£¬release¾ÍÊÇ·Å¿ªÊÖÖ¸£¬performÊÇÖ´ÐÐËùÓвÙ×÷

×¢£ºÕâÀï×¢ÒâÈý¸ö¿Ó£º

£¨1£©ÕâÀïÊÇÒÔµÚÒ»ÐÐÖм乬¸ñΪÆðµã£¬ÏòÏ»¬µ½µÚÈýÐÐÖм乬¸ñ£¬ÔÙÏòÓÒ»¬¶¯Ò»¸ö¹¬¸ñ¡£Éæ¼°×ø±êÈý¸ö(x=360, y=480)£¬(x=0, y=405)£¬(x=200,y=0)ÕâÀï²»ÄÑ¿´³öºóÃæÁ½¸ö×ø±ê²»Ì«Ò»Ñù¡£ÕâÊÇÒòΪµÚÒ»¸ö×ø±êÊǾø¶Ô×ø±ê£¬¼´ÊÇuiautomatorviewer¶¨Î»ºóÖ±½ÓÄõ½µÄ×ø±ê¡£µ«Êǵ½µÚ¶þ¸ö×ø±êÔòÊǵÚÒ»¸ö×ø±êµÄÏà¶Ô×ø±ê£¬ËùÒÔxºá×ø±êûÓб仯£¬µÚÈý¸ö×ø±êÊǵڶþ¸ö×ø±êµÄÏà¶Ô×ø±ê¡£ÄÇôµÚ¶þºÍµÚÈý¸ö×ø±êµÄ¾ø¶Ô×ø±êÊÇ£¨360£¬885£©ºÍ£¨560£¬885£©ËùÒÔÏà¶Ô×ø±ê¾ÍÊÇ£¨360-360£¬885-480£©ºÍ£¨560-360£¬885-885£©

£¨2£©release£¨£©Ò²Òª¼ÓÉÏwait£¨£©£¬Òâ˼ÊÇÊÖÖ¸·Å¿ªÆÁĻҲҪÓÐÒ»¶¨µÄµÈ´ýʱ¼ä£¬²»È»Òª±¨´í

£¨3£©Æô¶¯app»òÕß˵½«ÒªÕ¹Ê¾ÃÜÂë½âËø½çÃæÇ°×îºÃÉèÖÃ×ã¹»³¤µÄµÈ´ýʱ¼ä£¬·ñÔòÈÝÒ×»ñÈ¡²»µ½½çÃæ¶ø±¨´í¡£

5²âÊÔ»·¾³·ÖÀû±¦ÕË»§³äÖµ

from time import sleep
from appium.webdriver.common.touch_action import
TouchAction import os

def chonZhi(self, Dr):
Dr.find_element_by_id("com.fenlibao.fenlibao:
id/iv_wealth_cg") .click()
# ½øÈëÎÒµÄ sleep(2)
Dr.find_element_by_id("com.fenlibao.fenlibao
:id/tv_recharge") .click() # µã»÷³äÖµ
sleep(2)
Dr.find_element_by_id("com.fenlibao.fenlibao:id/et_money").
send_keys("100000") # ³äÖµ½ð¶î
sleep(2)
Dr.find_element_by_id("com.fenlibao.fenlibao:id/bt_ok")
.click() # È·ÈϳäÖµ
# TouchAction(Dr).tap(x=355, y=510, count=1).wait(1000)
.perform() sleep(6)
TouchAction(Dr).tap(x=355, y=808, count=1).wait(1000)
.perform() # ÖªµÀÁË
sleep(2)
commandP = 'adb shell ime set com.baidu.input_bbk.service/.PinyinIME'
# Çл»Æ´ÒôÊäÈ뷨Ϊµ±Ç°ÊäÈë·¨
commandA = 'adb shell ime set io.appium.android.ime
/.UnicodeIME' # Çл»appiumÊäÈ뷨Ϊµ±Ç°ÊäÈë·¨
TouchAction(Dr).tap(x=305, y=500, count=1).wait(1000)
.perform() # µãÒ»ÏÂÑéÖ¤ÂëÊäÈë¿ò
os.system(commandP) # Ö´ÐÐÇл»ÊäÈë·¨
sleep(2)
ChonZhi().tapYzm(Dr)
TouchAction(Dr).tap(x=350, y=588, count=1).wait(1000).
perform() # µãһϽ»Ò×ÃÜÂëÊäÈë¿ò
sleep(2)
ChonZhi().tapPasswd(Dr)
TouchAction(Dr).tap(x=360, y=785, count=1).wait(1000).
perform() # ͬÒâЭÒé²¢Ö§¸¶ sleep(8)
Dr.find_element_by_id("com.fenlibao.fenlibao:
id/tv_my_account").click() # »Øµ½ÎÒµÄÕË»§
os.system(commandA) # Ö´ÐÐÇл»ÊäÈë·¨ sleep(2)

Óë×¢²áûÓÐÊ²Ã´Çø±ð£¬¿ÉÒÔ¶¨Î»ÔªËصÄÖ±½ÓÓÃÔªËØID²Ù×÷£¬ÄÑÒÔ¶¨Î»ÔªËصÄÔòÓÃ×ø±ê¶¨Î»È¥²Ù×÷


6²âÊÔ»·¾³·ÖÀû±¦ÕË»§Í¶±ê

def touBid(self, Dr, name):
Dr.find_element_by_id("com.fenlibao.fenlibao:
id/iv_financing_cg") . click() # ½øÈë³ö½è
sleep(2)
msg = ""
rows = Dr.find_element_by_id("android:id/list")
.find_elements_by_id("com.fenlibao.fenlibao:
id/rl_itemView")
for i, j in enumerate(rows): # ±éÀú»ñÈ¡ÁбíËùÓбê
if i == 0:
txt = j.find_element_by_id("com.fenlibao.fenlibao:id/
tv_bid_title").text
print(txt)
if txt == name:
msg = txt # ±éÀú»ñÈ¡±êÃûÕýÈ·µÄ±ê£¬»ñÈ¡½ð¶î
money = msg.split("¶î")[1].split("Ôª")[0].split(",")[0]
bidMoney = float(money + "000") # »ñÈ¡±êµÄ½ð¶î
Dr.find_element_by_id("com.fenlibao.fenlibao:id
/iv_wealth_cg") .click()
# ½øÈëÎÒµÄ sleep(2)
realmoney = Dr.find_element_by_id("com.fenlibao.fenlibao:
id/tv_balance").
text myMoney = realmoney
if "," in realmoney:
myMoney = float(realmoney.split(",")[0] + realmoney.split(",")
[1]) # »ñÈ¡ÕË»§¿ÉÓýð¶î

if myMoney < bidMoney: # Èç¹ûÓà¶î²»×ã
ChonZhi.ChonZhi().chonZhi(Dr) # ³äÖµ
print("ÒѳäÖµ1ÍòÔª")
Dr.find_element_by_id("com.fenlibao.fenlibao:
id/iv_financing_cg").click() # ½øÈë³ö½è sleep(2)
Dr.find_element_by_id("com.fenlibao.fenlibao:
id/iv_financing_cg").click() # ½øÈë³ö½è sleep(2)
rows = Dr.find_element_by_id("android:id/list").
find_elements_by_id
("com.
fenlibao.fenlibao:id/rl_itemView")
for i, j in enumerate(rows):
if i == 0:
txt = j.find_element_by_id("com.fenlibao.fenlibao:
id/tv_bid_title") .text print(txt)
if txt == name:
j.click() # ±éÀú»ñÈ¡±êÃûÕýÈ·µÄ±ê£¬½øÈë±ê
sleep(2)
break
TouchAction(Dr).tap(x=358, y=1234, count=1).wait(1000).
perform() # ½øÈëÇÀ¹º sleep(6)
Dr.find_element_by_id("com.fenlibao.fenlibao:
id/tv_know").click() # ÖªµÀÁË sleep(2)
emon = Dr.find_element_by_id("com.fenlibao.fenlibao:id/
tv_residual_amount").text
enough = emon.split(",")[0] + "000"
print(enough)
Dr.find_element_by_id("com.fenlibao.fenlibao:
id/et_investMoney").
send_keys(enough) # ÌîÈë½ð¶î sleep(2)
Dr.find_element_by_id("com.fenlibao.fenlibao:
id/bt_buy").click() # ÇÀ¹º sleep(2)
Dr.find_element_by_id("com.fenlibao.fenlibao:
id/tv_my_invest")
.click() # Ͷ±ê³É¹¦£¬½øÈëÎÒµÄÏîÄ¿ sleep(2)
Dr.find_element_by_id("com.fenlibao.fenlibao:
id/iv_left").click() # ·µ»Ø sleep(2)

Ͷ±ê֮ǰÏȼÓÈë±éÀú£¬¼ì²é³ö½è½çÃæÊÇ·ñÓÐ×Ô¼ºÒªÍ¶µÄÄǸö±ê£»¹ý³ÌÖмÓÈëÁËÒ»¸öÓà¶îÂß¼­£¬¼´»ñÈ¡±êµÄ½ð¶îÈ¥±È¶ÔÕË»§¿ÉÓÃÓà¶î£¬µ±Óà¶î×㹻ʱֱ½ÓͶ±ê£¬²»×ãÔòÏÖÈ¥³äÖµ

if "," in realmoney:
realhead = realmoney.split(",")[0]
myMoney = float(realhead + realmoney.split(",")[1])
print(myMoney) # »ñÈ¡ÕË»§¿ÉÓýð¶î
if myMoney < bidMoney:
ChonZhi.ChonZhi().chonZhi(Dr) # ±È½Ï¿ÉÓÃÓà¶îºÍ±êµÄ½ð¶î
print("ÒѳäÖµ1ÍòÔª")
Dr.find_element_by_id("com.fenlibao.fenlibao:id/
iv_financing_cg")
.click() # ½øÈë³ö½è
sleep(2)
Dr.find_element_by_id("com.fenlibao.fenlibao:id/
iv_financing_cg")
.click() # ½øÈë³ö½è
sleep(2)

×ܽá

1Appium+python×Ô¶¯»¯²âÊÔЧÂÊÐÔ£º

²»µÃ²»Ëµ£¬ÊµÏÖÕæ»ú×Ô¶¯»¯²Ù×÷²âÊÔ¼«´óµØÌá¸ßÁ˲âÊÔ¹¤×÷µÄЧÂÊ¡£¾ÍÈç×¢²á£º×ÜÊÇÐèÒªÊäÈë11λÕýÈ·¸ñʽÊÖ»úºÅ²¢ÇÒÒªµ½Êý¾Ý¿â²éѯ»ñÈ¡ÑéÖ¤Â룻¿ª»§£ºÉí·ÝÖ¤ÊÇ×î´óµÄÓ²ÉË£¬¸ñʽҪÇó·±ËöÊÇÆäÒ»£¬Æä¶þÐÂÍøÏÞÖÆ¿ª»§Éí·ÝÖ¤²»¿ÉÖØ¸´Ê¹Óã¬Ôì³Éÿ´ÎÊÖ¶¯¿ª»§¶¼ÒªÈ¥ÍøÉϲéÕÒÉí·ÝÖ¤ºÅ¡£¶ø×Ô¶¯»¯²âÊÔ¿ÉÒÔÒ»¼üÍê³É£¡

2Appium+python×Ô¶¯»¯²âÊÔʵÓÃÐÔ£º

ÓйØÕæ»ú×Ô¶¯»¯²âÊÔÊÇ·ñ·½±ãµÄÎÊÌ⣬¸öÈ˾õµÃÔËÐгÌÐòºÜ¼òµ¥£¬±àд³ÌÐòºÜµ°ÌÛ¡£ºÜ¶àʱºòÒ»¸ö¿ÉÒÔ¸ÐÖªµÄ£¬¿ÉÒÔÈ·ÈÏΪ¼òµ¥µÄÎÊÌâÒ²»áÓл¨·Ñ´ó°ëÌìµÄʱ¼ä²ÅÄܽâ¾öµÄÇé¿ö¡£±Ï¾¹³ÌÐòʵÏÖ²»Í¬ÓÚÊÖ¶¯²Ù×÷£¬ÊÖ¶¯²Ù×÷Ðí¶àÖ±½ÓºöÂԵĹý³ÌÔÚ³ÌÐòÖлá±ä³É¡°±ØÌîÏ£¬µ±È»ÕâҲͬʱÀ©´óÁ˲âÊÔ³¡¾°µÄ·¶Î§£¬µÖÏûÁËÊÖ¶¯²Ù×÷µÄ¿ÝÔïÓë·±Ëö£¬¼õÇáÁ˲âÊÔ¹ý³ÌµÄÐÄÀíѹÁ¦£¬Ê¹²âÊÔ¹¤×÷¸ü¼Ó¾ßÓÐÖÊÁ¿ºÍ¼¼ÊõÐÔ¡£×ÜÌåÀ´Ëµ£¬Õæ»ú×Ô¶¯»¯¿Ï¶¨ÊDZÈÊÖ¶¯²âÊÔÒª·½±ãºÜ¶àµÄ£¬ÒòΪ²âÊÔ¹ý³Ì±»Å¨ËõÔÚÁË¡°´úÂ롱£¬¶ø²»ÊÇÊó±êºÍ¼üÅÌÉϵĵãµãˢˢ£¡

3Appium+python×Ô¶¯»¯²âÊÔÍêÕûÐÔ£º

Õæ»ú×Ô¶¯»¯²âÊÔÊÇ·ñÄܺ­¸ÇËùÓвâÊԵij¡¾°£¿ÕâÊÇÐí¶àÈË»ØÈ¥Ë¼¿¼µÄÎÊÌ⣬µ«ÊÂʵÉϲ¢²»´æÔÚÊÖ¶¯²âÊÔÎÞ·¨×öµ½¶ø×Ô¶¯»¯²âÊÔ¿ÉÒÔʵÏÖµÄÇé¿ö¡£ÊÖ¶¯²âÊÔ²¢²»ÊÇËùÓпÉÄܳ¡¾°ÂÞÁгöÀ´È»ºó¡°µÑ¿¨¶û»ý¡±»òÕß˵ÅÅÁÐ×éºÏ£¬ÊƱØÒªÈ¥ÖØ£¬È¥´í£»¼õÉÙ²»±ØÒªµÄ²âÊÔÏ²ÅÄÜÈ·±£²âÊÔЧÂʺÍÖÊÁ¿¡£×Ô¶¯»¯²âÊÔÒ²ÊÇÒ»Ñù£¬Ö»ÊÇÏà±ÈÖ®ÏÂЧÂʸ߳öÐí¶à£¬¶ÔÓÚÒÑͨ¹ý²âÊԵŦÄܳ¡¾°¿ÉÒÔÒ»¼üÑéÖ¤£¬´Ó¶ø¶à³ö¸ü¶àµÄʱ¼äºÍ»ú»áÈ¥²âÊÔеÄÐèÇó¡£¾ø¶ÔµÄÍêÕû²¢Ã»ÓбØÒª£¬Ò²²»Ì«¿ÉÄÜ£¡

 

 
   
2999 ´Îä¯ÀÀ       29
Ïà¹ØÎÄÕÂ

΢·þÎñ²âÊÔÖ®µ¥Ôª²âÊÔ
һƪͼÎÄ´øÄãÁ˽â°×ºÐ²âÊÔÓÃÀýÉè¼Æ·½·¨
È«ÃæµÄÖÊÁ¿±£ÕÏÌåϵ֮»Ø¹é²âÊÔ²ßÂÔ
È˹¤ÖÇÄÜ×Ô¶¯»¯²âÊÔ̽Ë÷
Ïà¹ØÎĵµ

×Ô¶¯»¯½Ó¿Ú²âÊÔʵ¼ù֮·
jenkins³ÖÐø¼¯³É²âÊÔ
ÐÔÄܲâÊÔÕï¶Ï·ÖÎöÓëÓÅ»¯
ÐÔÄܲâÊÔʵÀý
Ïà¹Ø¿Î³Ì

³ÖÐø¼¯³É²âÊÔ×î¼Ñʵ¼ù
×Ô¶¯»¯²âÊÔÌåϵ½¨ÉèÓë×î¼Ñʵ¼ù
²âÊԼܹ¹µÄ¹¹½¨ÓëÓ¦ÓÃʵ¼ù
DevOpsʱ´úµÄ²âÊÔ¼¼ÊõÓë×î¼Ñʵ¼ù
×îл¼Æ»®
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢ 6-12[ÏÃÃÅ]
È˹¤ÖÇÄÜ.»úÆ÷ѧϰTensorFlow 6-22[Ö±²¥]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 6-30[±±¾©]
ǶÈëʽÈí¼þ¼Ü¹¹-¸ß¼¶Êµ¼ù 7-9[±±¾©]
Óû§ÌåÑé¡¢Ò×ÓÃÐÔ²âÊÔÓëÆÀ¹À 7-25[Î÷°²]
ͼÊý¾Ý¿âÓë֪ʶͼÆ× 8-23[±±¾©]
 
×îÐÂÎÄÕÂ
´óÊý¾Ýƽ̨²âÊÔ
΢·þÎñ¼Ü¹¹ÏµIJâÊÔÖ®µÀ
´ÓÁã¿ªÊ¼ÕÆÎÕ΢·þÎñÈí¼þ²âÊÔ
ÈçºÎ½øÐвâÊÔÐèÇó·ÖÎö£º´Ó½ÓÊÕÐèÇóµ½ÓÃÀýÉè¼Æ
python_selenium×Ô¶¯»¯²âÊÔ¿ò¼Ü
×îпγÌ
²âÊÔÐèÇó·ÖÎöÓë²âÊÔÓÃÀýÉè¼Æ
ÐÔÄܲâÊÔ·½·¨Óë¼¼Êõ
×Ô¶¯»¯²âÊÔ¿ò¼ÜÉè¼Æ¸ß¼¶Êµ¼ù
½Ó¿Ú×Ô¶¯»¯²âÊÔ·½·¨Ó빤¾ß
Èí¼þ²âÊÔ·½·¨Óëʵ¼ù(¹á´©°¸Àý)
³É¹¦°¸Àý
ij֧¸¶ÆóÒµ µ¥Ôª²âÊÔÓëÖØ¹¹Åàѵ
±±¾© Óû§ÌåÑé¡¢¿ÉÓÃÐÔ²âÊÔÓëÆÀ¹À
ij¾ü¹¤Ñо¿µ¥Î» ×Ô¶¯»¯²âÊÔ·½·¨¡¢°¸ÀýÓ빤¾ß
ÖªÃûÏû·Ñ½ðÈÚ¹«Ë¾ ̽Ë÷ÐÔ²âÊÔÓë²âÊÔ·ÖÎö
±±¾© º½Ìì¿Æ¹¤Ä³×Ó¹«Ë¾ Èí¼þ²âÊԼܹ¹Ê¦