reply.py 2.0 KB

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