123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- import time
- from appium import webdriver
- from appium.webdriver.common.touch_action import TouchAction
- from selenium.webdriver.common.by import By
- class KuaiShouComments:
- # 初始化appium
- def __init__(self):
- self.desired_caps = {
- "platformName": "Android",
- "deviceName": "AQQB9X3211W00486",
- "appPackage": "com.smile.gifmaker",
- "appActivity": "com.yxcorp.gifshow.HomeActivity",
- "noReset": True,
- "automationName": "UiAutomator2"
- }
- self.driver = webdriver.Remote('http://localhost:4723/wd/hub', self.desired_caps)
- self.driver.implicitly_wait(10) # 设置隐式等待
- # 基本操作,关闭广告,关闭青少年模式,直播类型等等
- # 通过关键词去搜索,获取视频列表
- def search_by_keywords(self, keyword):
- # 搜索 找到搜索按钮并且点击
- search_button = self.driver.find_element(By.XPATH, r'//android.widget.ImageView[@content-desc="查找"]')
- if search_button:
- search_button.click()
- time.sleep(2)
- else:
- print("can not find search button")
- return
- # 找到搜索栏,并且输入keywords
- search_bar = self.driver.find_element(By.ID, r'com.smile.gifmaker:id/editor')
- if search_bar:
- search_bar.send_keys(keyword)
- self.driver.find_element(By.ID, r'com.smile.gifmaker:id/right_tv').click()
- time.sleep(10)
- else:
- print("fails in input keywords")
- return
- # 找到搜索结果的视频区
- sp_bar = self.driver.find_element(By.XPATH,
- r'//android.widget.HorizontalScrollView[@resource-id="com.smile.gifmaker:id/tabs"]/android.widget.LinearLayout/android.view.View[1]')
- if sp_bar:
- sp_bar.click()
- time.sleep(2)
- else:
- return
- # 点击第一个视频
- first_video = self.driver.find_element(By.XPATH,
- r'//android.widget.RelativeLayout[@resource-id="com.smile.gifmaker:id/container"][1]')
- if first_video:
- first_video.click()
- else:
- return
- # 打开视频的评论区
- def open_comments_area(self):
- comment_button = self.driver.find_element(By.ID, r'com.smile.gifmaker:id/comment_button')
- if comment_button:
- comment_button.click()
- # 把评论区最大化
- self.driver.find_element(By.ID, r'com.smile.gifmaker:id/tabs_panel_full').click()
- else:
- return
- # 点开评论区的人的头像, 暂时未配置翻页(之后需要配置翻页)
- people_list = self.driver.find_elements(By.ID, r'com.smile.gifmaker:id/avatar')
- print(len(people_list))
- for person_ele in people_list:
- self.process_comment_person(person_ele)
- # 关掉评论区
- self.driver.find_element(By.ID, r'com.smile.gifmaker:id/tabs_panel_close').click()
- # 点开头像
- def process_comment_person(self, element):
- element.click()
- time.sleep(1)
- person_bar_list = self.driver.find_elements(By.ID, r'com.smile.gifmaker:id/tab_text')
- if person_bar_list:
- for tab in person_bar_list:
- print(tab.text)
- if "收藏" in tab.text:
- tab.click()
- # 获取video_list
- self.driver.find_element(By.ID, r'com.smile.gifmaker:id/player_cover_container').click()
- video_count = int(tab.text.split(" ")[1])
- self.find_video_basic_info()
- for i in range(10):
- time.sleep(4)
- self.scroll_down()
- try:
- self.find_video_basic_info()
- except:
- pass
- self.driver.find_element(By.ID, r'com.smile.gifmaker:id/left_btn').click()
- else:
- return
- # 退出个人详情页面
- self.driver.find_element(By.ID, r'com.smile.gifmaker:id/left_btn').click()
- time.sleep(10)
- # 向下滑动
- def scroll_down(self):
- width = self.driver.get_window_size()['width']
- height = self.driver.get_window_size()['height']
- action = TouchAction(self.driver)
- action.press(x=int(0.5 * width), y=int(0.75 * height))
- action.wait(ms=300)
- action.move_to(x=int(0.5 * width), y=int(0.25 * height))
- action.release()
- action.perform()
- def find_video_basic_info(self):
- author_name = self.driver.find_element(By.ID, r'com.smile.gifmaker:id/user_name_text_view').text
- title = self.driver.find_element(By.ID, r'com.smile.gifmaker:id/element_caption_label').text
- print(author_name)
- print(title)
- if __name__ == "__main__":
- ksc = KuaiShouComments()
- ksc.search_by_keywords("黄瓜不能和什么一起吃?")
- ksc.open_comments_area()
- for i in range(10):
- time.sleep(3)
- ksc.scroll_down()
- ksc.open_comments_area()
|