reply.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. from selenium.webdriver.common.action_chains import ActionChains
  2. from selenium.common.exceptions import NoSuchElementException
  3. import random
  4. import time
  5. def reply(driver, url):
  6. while True:
  7. reply_page_url = get_reply_page_url(driver, url)
  8. driver.get(reply_page_url)
  9. content = get_reply_content(driver)
  10. if not content == '#':
  11. if start_reply(driver, content):
  12. break
  13. time.sleep(2)
  14. # 进行回复动作
  15. def start_reply(driver, content):
  16. try:
  17. message = driver.find_element_by_id('vmessage')
  18. except NoSuchElementException:
  19. return False
  20. else:
  21. ActionChains(driver).move_to_element(message).perform()
  22. time.sleep(3)
  23. ActionChains(driver).double_click(message).perform()
  24. time.sleep(3)
  25. message.send_keys(content)
  26. print(content)
  27. time.sleep(1)
  28. element = driver.find_element_by_id('vreplysubmit')
  29. ActionChains(driver).move_to_element(element).click().perform()
  30. return True
  31. # 读取从上往下第二条评论的内容,并返回
  32. def get_reply_content(driver):
  33. i = 4
  34. while i >= 0:
  35. r = random.randint(3, 12)
  36. r = str(r)
  37. try:
  38. element = driver.find_element_by_xpath(
  39. "//div[@id='postlist']/div[" + r + "]/table/tbody/tr/td[2]/div[2]/div/div/table/tbody/tr/td")
  40. except NoSuchElementException:
  41. i = i - 1
  42. else:
  43. content = element.text
  44. if '发表于' not in content:
  45. return content
  46. else:
  47. i = i - 1
  48. return '#'
  49. # 取得mod发布页面的最后一个页面的url
  50. def get_reply_page_url(driver, url):
  51. driver.get(url)
  52. r = random.randint(0, 24)
  53. r = str(r)
  54. element = driver.find_element_by_xpath("//form[@id='moderate']/table/tbody[last()-" + r + "]/tr/th/a[3]")
  55. return element.get_attribute('href')