#判断元素是否存在 (1)def is_element_exist(element,timeout=1):
count = 0 while count < timeout: souce = driver.page_source if element in souce: return True else: count += 1 time.sleep(1) return False
(2)def isElement(identifyBy,c):
'''
Determine whether elements exist
Usage:
isElement(By.XPATH,"//a")
'''
time.sleep(1)
flag=None
try:
if identifyBy == "id":
WebDriverWait(driver, timeout=10, poll_frequency=0.5).until(
lambda x: x.find_element_by_id(c),
message='id定位超时')
elif identifyBy == "xpath":
WebDriverWait(driver, timeout=10, poll_frequency=0.5).until(
lambda x: x.find_element_by_xpath(c),
message='xpath定位超时')
elif identifyBy == "class":
driver.find_element_by_class_name(c)
elif identifyBy == "link text":
driver.find_element_by_link_text(c)
elif identifyBy == "partial link text":
driver.find_element_by_partial_link_text(c)
elif identifyBy == "name":
driver.find_element_by_name(c)
elif identifyBy == "tag name":
driver.find_element_by_tag_name(c)
elif identifyBy == "css selector":
driver.find_element_by_css_selector(c)
flag = True
except NoSuchElementException as e:
flag = False
finally:
return flag
实战例子:
import time from appium import webdriver from selenium.common.exceptions import NoSuchElementException ''' mumu模拟器:抖音综合操作 ''' # 设备信息 desired_caps = { "platformName": "Android", "platformVersion": "6.0.1", "deviceName": "127.0.0.1:7555", "appPackage": "com.ss.android.ugc.aweme", "appActivity": "com.ss.android.ugc.aweme.splash.SplashActivity", "noReset": True, "unicodeKeyboard": True, "resetKeyboard": True } driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps) # driver.implicitly_wait(10) time.sleep(6) #判断元素是否存在 def is_element_exist(element,timeout=1): count = 0 while count < timeout: souce = driver.page_source if element in souce: return True else: count += 1 time.sleep(1) return False # 搜索操作 def douyin_search(): driver.tap([(752, 68)], 500) # 点击搜索按钮 time.sleep(1) driver.find_element_by_id('com.ss.android.ugc.aweme:id/ai4').send_keys('东山桃花山农产品') time.sleep(4) driver.tap([(100, 162), (736, 198)], 500) # 点击第一个搜索结果 time.sleep(1) driver.swipe(100, 266, 100, 198, 1000) # 去除综合排序干扰 time.sleep(1) element = driver.find_elements_by_id('com.ss.android.ugc.aweme:id/efw')[0] user_name = element.__getattribute__("text") # 用户名 print(user_name) if user_name == '邳州亚森苗木': # 如果用户与搜索结果匹配 driver.find_element_by_id('com.ss.android.ugc.aweme:id/h_y').click() # 取消搜索内容 time.sleep(1) print("111111") else: # 用户与搜索不匹配的话 driver.swipe(100,300,100,200,1000) time.sleep(1) print("8888") elements = is_element_exist('com.ss.android.ugc.aweme:id/hkt') print(elements) if elements == True: #西瓜视频标签元素存在 xigua_horizontal_screen_swipe() print("22222222") is_user_element_exist() else:#西瓜标签不存在 is_user_element_exist() #判断用户元素是否存在 def is_user_element_exist(): user_status = is_element_exist('com.ss.android.ugc.aweme:id/efw') print(user_status) while True: elements = is_element_exist('com.ss.android.ugc.aweme:id/hkt') print(elements) if elements == True: # 西瓜视频标签元素存在 xigua_horizontal_screen_swipe() else: if user_status == True: # 判断用户id元素是否存在 enter_user_homepage() break else: driver.swipe(100, 500, 100, 400, 1000) enter_user_homepage() break #判断标签元素是否存在 def is_tag_element_exist(): pass #进入用户主页操作 def enter_user_homepage(): for i in range(0,20): user_status = is_element_exist('com.ss.android.ugc.aweme:id/efw') if user_status == True: element = driver.find_elements_by_id('com.ss.android.ugc.aweme:id/efw')[0] user_name = element.__getattribute__("text") print(user_name) if user_name: # 如果有用户 element.click() # 进入主页 time.sleep(1) driver.find_element_by_id('com.ss.android.ugc.aweme:id/btt').click() # 进入头像页 time.sleep(1) print("33333") driver.tap([(100, 100)], 500) # 退出头像页 time.sleep(1) print("44444") driver.tap([(50, 82)], 500) # 退出用户主页 time.sleep(3) print("55555") driver.swipe(100, 1198, 100, 198, 1000) # 滑动下一个用户 time.sleep(1) else: driver.swipe(100,500,100,300,1000) time.sleep(1) #去除与搜索结果相同的用户 def user_repeat(): driver.find_element_by_id('com.ss.android.ugc.aweme:id/qi').click() # 取消搜索内容 time.sleep(1) douyin_search() #西瓜视频滑动操作 def xigua_horizontal_screen_swipe(): driver.swipe(100,700,100,198,1000) #滑动跳过横屏西瓜视频 time.sleep(2) print("66666") if __name__ == '__main__': douyin_search()