-
导入必要的模块:
import time import subprocess from appium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from appium.webdriver.common.touch_action import TouchAction
- 这些模块用于执行自动化操作、发送ADB命令、启动Appium WebDriver等。
-
定义获取Android版本的函数:
def get_android_version(): # 获取设备的 Android 版本
-
定义复制粘贴函数:
def copy_paste(): # 执行复制粘贴操作
-
定义长按释放函数:
def long_press_release(driver, x, y, duration=2000): # adb长按2s后松开
-
定义向上滑屏函数:
def slide_screen(driver, start_x, start_y, end_x, end_y): # 向上滑屏
-
定义等待元素可点击并点击函数:
def wait_and_click(driver, locator, timeout=10): # 等待元素可点击并点击
-
定义输入文本函数:
def input_text(driver, locator, text): # 输入文本
-
定义启动Appium WebDriver函数:
def start_driver(): # 启动 Appium WebDriver
-
定义发布闲置商品函数:
def post_item(driver): # 发布闲置商品
-
定义点击坐标函数:
def click_xy(driver, x, y): # 点击坐标
完整代码如下:
import time
import subprocess
from appium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from appium.webdriver.common.touch_action import TouchAction
# 获取设备的 Android 版本
def get_android_version():
adb_command = "adb shell getprop ro.build.version.release"
result = subprocess.check_output(adb_command, shell=True)
return result.decode('utf-8').strip()
def copy_paste():
# 执行复制粘贴操作
adb_copy_command = "adb shell input keyevent 279" # 模拟按下复制键
adb_paste_command = "adb shell input keyevent 278" # 模拟按下粘贴键
subprocess.run(adb_copy_command, shell=True)
subprocess.run(adb_paste_command, shell=True)
# adb长按2s后松开
def long_press_release(driver, x, y, duration=2000):
action = TouchAction(driver)
action.long_press(x=x, y=y, duration=duration).release().perform()
# 向上滑屏
def slide_screen(driver, start_x, start_y, end_x, end_y):
action = TouchAction(driver)
action.press(x=start_x, y=start_y).wait(500).move_to(x=end_x, y=end_y).release().perform()
# 等待元素可点击并点击
def wait_and_click(driver, locator, timeout=10):
element = WebDriverWait(driver, timeout).until(EC.element_to_be_clickable(locator))
element.click()
time.sleep(1)
# 输入文本
def input_text(driver, locator, text):
element = WebDriverWait(driver, 10).until(EC.presence_of_element_located(locator))
element.clear()
element.send_keys(text)
# 启动 Appium WebDriver
def start_driver():
desired_caps = {
"platformName": "Android",
"platformVersion": get_android_version(),
"deviceName": "Xiaomi",
'appPackage': "com.taobao.idlefish",
'appActivity': 'com.taobao.fleamarket.home.activity.InitActivity',
'autoGrantPermissions': True,
'noReset': True,
}
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
driver.implicitly_wait(10)
return driver
# 发布闲置商品
def post_item(driver):
wait_and_click(driver, (By.XPATH, '//*[@resource-id="com.taobao.idlefish:id/post_container"]/android.widget.FrameLayout[1]'))
click_xy(driver, 973, 1238) # wait_and_click(driver, (By.XPATH, '//*[@content-desc="发闲置 30s发布宝贝"]'))
time.sleep(1)
while True:
click_xy(driver, 117, 302) # # input_text(driver, (By.XPATH, '//*[@content-desc="描述, 描述一下宝贝的品牌型号、货品来源…"]/android.view.View[1]'), "1171637509@qq.com")
# copy_paste()
# time.sleep(1)
long_press_release(driver, 117, 302)
wait_and_click(driver, (By.XPATH, '//*[@content-desc="粘贴"]'))
slide_screen(driver, 460, 900, 460, 800)
wait_and_click(driver, (By.XPATH, '//*[@content-desc="添加图片"]'))
click_xy(driver, 330, 2280)
click_xy(driver, 502, 278) #点视频
click_xy(driver, 941, 2272) #点完成
# wait_and_click(driver, (By.XPATH,'//*[@resource-id="android:id/content"]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.view.View[1]/android.view.View[1]/android.view.View[1]/android.view.View[1]/android.view.View[1]/android.view.View[1]/android.view.View[1]/android.view.View[1]/android.view.View[1]/android.view.View[2]/android.view.View[1]/android.widget.ImageView[2]/android.view.View[1]'))
# click_xy(driver, 752, 278)
# click_xy(driver, 1020, 278)
# wait_and_click(driver, (By.XPATH,
# '//*[@resource-id="android:id/content"]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.view.View[1]/android.view.View[1]/android.view.View[1]/android.view.View[1]/android.view.View[1]/android.view.View[1]/android.view.View[1]/android.view.View[1]/android.view.View[1]/android.view.View[2]/android.view.View[1]/android.widget.ImageView[3]/android.view.View[1]'))
# wait_and_click(driver, (By.XPATH,
# '//*[@resource-id="android:id/content"]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.view.View[1]/android.view.View[1]/android.view.View[1]/android.view.View[1]/android.view.View[1]/android.view.View[1]/android.view.View[1]/android.view.View[1]/android.view.View[1]/android.view.View[2]/android.view.View[1]/android.widget.ImageView[4]/android.view.View[1]'))
# wait_and_click(driver, (By.XPATH, '//*[@content-desc="下一步 (3)"]'))
# wait_and_click(driver, (By.XPATH, '//*[@content-desc="完成"]'))
# time.sleep(2)
# wait_and_click(driver, (By.XPATH, '//*[@content-desc="软件产品设计"]'))
# wait_and_click(driver, (By.XPATH, '//*[@content-desc="元/次"]'))
set_price(driver)
publish_item(driver)
# 点击坐标
def click_xy(driver, x, y):
driver.tap([(x, y)])
time.sleep(1)
# 设置价格
def set_price(driver):
wait_and_click(driver, (By.XPATH, '//*[@content-desc="价格设置"]'))
wait_and_click(driver, (By.XPATH, '//*[@content-desc="9"]'))
wait_and_click(driver, (By.XPATH, '//*[@content-desc="原价设置"]'))
wait_and_click(driver, (By.XPATH, '//*[@content-desc="9"]'))
wait_and_click(driver, (By.XPATH, '//*[@content-desc="9"]'))
wait_and_click(driver, (By.XPATH, '//*[@content-desc="确定"]'))
# 发布商品
def publish_item(driver):
wait_and_click(driver, (By.XPATH, '//*[@content-desc="发布"]'))
wait_and_click(driver, (By.XPATH, '//*[@content-desc="再发一件"]'))
def liulanliang(driver):
click_xy(driver, 956, 2292)#我的
click_xy(driver, 149, 861)#我发布的
time.sleep(1)
num=0
while num<1000:
click_xy(driver, 129, 1250)#发布首列商品
time.sleep(0.6)
click_xy(driver, 58, 151)#返回
time.sleep(0.6)
num=num+1
print(num)
# wait_and_click(driver, (By.XPATH, '//*[@content-desc="我发布的 卖家宝典 今日曝光 指今天宝贝被看到多少次 越多人看到,越容易卖出哦~ 我知道啦"]/android.widget.ImageView[1]'))
driver = start_driver()
liulanliang(driver)
# 主程序
if __name__ == "__main__":
driver = start_driver()
# post_item(driver)
liulanliang(driver)