kuaishou_comments.py 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. import time
  2. from appium import webdriver
  3. from appium.webdriver.common.touch_action import TouchAction
  4. from selenium.webdriver.common.by import By
  5. class KuaiShouComments:
  6. # 初始化appium
  7. def __init__(self):
  8. self.desired_caps = {
  9. "platformName": "Android",
  10. "deviceName": "AQQB9X3211W00486",
  11. "appPackage": "com.smile.gifmaker",
  12. "appActivity": "com.yxcorp.gifshow.HomeActivity",
  13. "noReset": True,
  14. "automationName": "UiAutomator2"
  15. }
  16. self.driver = webdriver.Remote('http://localhost:4723/wd/hub', self.desired_caps)
  17. self.driver.implicitly_wait(10) # 设置隐式等待
  18. # 基本操作,关闭广告,关闭青少年模式,直播类型等等
  19. # 通过关键词去搜索,获取视频列表
  20. def search_by_keywords(self, keyword):
  21. # 搜索 找到搜索按钮并且点击
  22. search_button = self.driver.find_element(By.XPATH, r'//android.widget.ImageView[@content-desc="查找"]')
  23. if search_button:
  24. search_button.click()
  25. time.sleep(2)
  26. else:
  27. print("can not find search button")
  28. return
  29. # 找到搜索栏,并且输入keywords
  30. search_bar = self.driver.find_element(By.ID, r'com.smile.gifmaker:id/editor')
  31. if search_bar:
  32. search_bar.send_keys(keyword)
  33. self.driver.find_element(By.ID, r'com.smile.gifmaker:id/right_tv').click()
  34. time.sleep(10)
  35. else:
  36. print("fails in input keywords")
  37. return
  38. # 找到搜索结果的视频区
  39. sp_bar = self.driver.find_element(By.XPATH,
  40. r'//android.widget.HorizontalScrollView[@resource-id="com.smile.gifmaker:id/tabs"]/android.widget.LinearLayout/android.view.View[1]')
  41. if sp_bar:
  42. sp_bar.click()
  43. time.sleep(2)
  44. else:
  45. return
  46. # 点击第一个视频
  47. first_video = self.driver.find_element(By.XPATH,
  48. r'//android.widget.RelativeLayout[@resource-id="com.smile.gifmaker:id/container"][1]')
  49. if first_video:
  50. first_video.click()
  51. else:
  52. return
  53. # 打开视频的评论区
  54. def open_comments_area(self):
  55. comment_button = self.driver.find_element(By.ID, r'com.smile.gifmaker:id/comment_button')
  56. if comment_button:
  57. comment_button.click()
  58. # 把评论区最大化
  59. self.driver.find_element(By.ID, r'com.smile.gifmaker:id/tabs_panel_full').click()
  60. else:
  61. return
  62. # 点开评论区的人的头像, 暂时未配置翻页(之后需要配置翻页)
  63. people_list = self.driver.find_elements(By.ID, r'com.smile.gifmaker:id/avatar')
  64. print(len(people_list))
  65. for person_ele in people_list:
  66. self.process_comment_person(person_ele)
  67. # 关掉评论区
  68. self.driver.find_element(By.ID, r'com.smile.gifmaker:id/tabs_panel_close').click()
  69. # 点开头像
  70. def process_comment_person(self, element):
  71. element.click()
  72. time.sleep(1)
  73. person_bar_list = self.driver.find_elements(By.ID, r'com.smile.gifmaker:id/tab_text')
  74. if person_bar_list:
  75. for tab in person_bar_list:
  76. print(tab.text)
  77. if "收藏" in tab.text:
  78. tab.click()
  79. # 获取video_list
  80. self.driver.find_element(By.ID, r'com.smile.gifmaker:id/player_cover_container').click()
  81. video_count = int(tab.text.split(" ")[1])
  82. self.find_video_basic_info()
  83. for i in range(10):
  84. time.sleep(4)
  85. self.scroll_down()
  86. try:
  87. self.find_video_basic_info()
  88. except:
  89. pass
  90. self.driver.find_element(By.ID, r'com.smile.gifmaker:id/left_btn').click()
  91. else:
  92. return
  93. # 退出个人详情页面
  94. self.driver.find_element(By.ID, r'com.smile.gifmaker:id/left_btn').click()
  95. time.sleep(10)
  96. # 向下滑动
  97. def scroll_down(self):
  98. width = self.driver.get_window_size()['width']
  99. height = self.driver.get_window_size()['height']
  100. action = TouchAction(self.driver)
  101. action.press(x=int(0.5 * width), y=int(0.75 * height))
  102. action.wait(ms=300)
  103. action.move_to(x=int(0.5 * width), y=int(0.25 * height))
  104. action.release()
  105. action.perform()
  106. def find_video_basic_info(self):
  107. author_name = self.driver.find_element(By.ID, r'com.smile.gifmaker:id/user_name_text_view').text
  108. title = self.driver.find_element(By.ID, r'com.smile.gifmaker:id/element_caption_label').text
  109. print(author_name)
  110. print(title)
  111. if __name__ == "__main__":
  112. ksc = KuaiShouComments()
  113. ksc.search_by_keywords("黄瓜不能和什么一起吃?")
  114. ksc.open_comments_area()
  115. for i in range(10):
  116. time.sleep(3)
  117. ksc.scroll_down()
  118. ksc.open_comments_area()