SignIn.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. from ..GetImage import get_vc_image
  2. from ..ttshitu import base64_api, error_report
  3. from selenium.webdriver.common.action_chains import ActionChains
  4. from selenium.common.exceptions import NoSuchElementException
  5. import time
  6. def main_sign_in(driver):
  7. print('签到中')
  8. url = 'https://www.mcbbs.net/plugin.php?id=dc_signin'
  9. driver.get(url)
  10. print('正在前往签到界面')
  11. if get_to_sign_in(driver):
  12. sign_in_vc(driver)
  13. def sign_in_vc(driver):
  14. while True:
  15. image = get_image(driver)
  16. image = image.convert('RGB')
  17. image.save('D:\\同步文件\\课程文件\文档\\mcbbs搞事\\AutoTool\\VerificationCode\\image.jpg')
  18. img_path = 'D:\同步文件\课程文件\文档\mcbbs搞事\AutoTool\VerificationCode\image.jpg'
  19. result, rid = base64_api(uname='Shellmiao', pwd='sBif.9MMF8Pa', img=img_path)
  20. if not rid:
  21. continue
  22. else:
  23. print(result)
  24. if click_vc_words(driver, get_points(result), rid):
  25. print("打码成功")
  26. else:
  27. print("打码失败")
  28. break
  29. def get_points(result):
  30. groups = result.split('|')
  31. locations = [[int(number) for number in group.split(',')] for group in groups]
  32. return locations
  33. # 验证码的点击和确认
  34. def click_vc_words(driver, locations, rid):
  35. element = driver.find_element_by_class_name('geetest_widget')
  36. for location in locations:
  37. # 因为笔记本缩放是250%,所以坐标要除以2.5
  38. location[0] = location[0] * 0.5
  39. location[1] = location[1] * 0.5
  40. print(location)
  41. temp = ActionChains(driver).move_to_element_with_offset(element, location[0], location[1])
  42. time.sleep(2)
  43. temp.click().perform()
  44. time.sleep(1)
  45. time.sleep(1)
  46. button = driver.find_element_by_class_name('geetest_commit_tip')
  47. time.sleep(1)
  48. ActionChains(driver).move_to_element(button).click().perform()
  49. time.sleep(6)
  50. try:
  51. button = driver.find_element_by_class_name('geetest_commit_tip')
  52. except NoSuchElementException:
  53. return True
  54. else:
  55. error_report(rid)
  56. sign_in_vc(driver)
  57. return False
  58. def get_to_sign_in(driver):
  59. if sign_in_button(driver):
  60. sign_in(driver)
  61. return True
  62. else:
  63. return False
  64. def sign_in_button(driver):
  65. try:
  66. button = driver.find_element_by_link_text('签到')
  67. except NoSuchElementException:
  68. return False
  69. else:
  70. ActionChains(driver).move_to_element(button).click().perform()
  71. return True
  72. def sign_in(driver):
  73. while True:
  74. try:
  75. time.sleep(2)
  76. button = driver.find_element_by_id('emot_1')
  77. except NoSuchElementException:
  78. continue
  79. else:
  80. ActionChains(driver).move_to_element(button).click().perform()
  81. try:
  82. time.sleep(2)
  83. submit = driver.find_element_by_name('signpn')
  84. except NoSuchElementException:
  85. continue
  86. else:
  87. ActionChains(driver).move_to_element(submit).click().perform()
  88. break
  89. def get_image(driver):
  90. time.sleep(8)
  91. element = driver.find_element_by_class_name('geetest_widget')
  92. vc_image = get_vc_image(element)
  93. return vc_image