SignIn.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  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 sign_in(driver):
  7. url = 'https://www.mcbbs.net/plugin.php?id=dc_signin'
  8. driver.get(url)
  9. if get_to_sign_in(driver):
  10. sign_in_vc(driver)
  11. def sign_in_vc(driver):
  12. image = get_image(driver)
  13. image = image.convert('RGB')
  14. image.save('D:\同步文件\课程文件\文档\mcbbs搞事\AutoTool\VerificationCode\image.jpg')
  15. img_path = 'D:\同步文件\课程文件\文档\mcbbs搞事\AutoTool\VerificationCode\image.jpg'
  16. result, rid = base64_api(uname='Shellmiao', pwd='sBif.9MMF8Pa', img=img_path)
  17. print(result)
  18. if click_vc_words(driver, get_points(result)):
  19. print("打码成功")
  20. else:
  21. print("打码失败")
  22. def get_points(result):
  23. groups = result.split('|')
  24. locations = [[int(number) for number in group.split(',')] for group in groups]
  25. return locations
  26. # 验证码的点击和确认
  27. def click_vc_words(driver, locations, rid):
  28. element = driver.find_element_by_class_name('geetest_widget')
  29. for location in locations:
  30. # 因为笔记本缩放是250%,所以坐标要除以2.5
  31. location[0] = location[0] * 0.5
  32. location[1] = location[1] * 0.5
  33. print(location)
  34. ActionChains(driver).move_to_element_with_offset(element, location[0], location[1]).click().perform()
  35. time.sleep(1)
  36. time.sleep(2)
  37. button = driver.find_element_by_class_name('geetest_commit_tip')
  38. time.sleep(2)
  39. ActionChains(driver).move_to_element(button).click().perform()
  40. time.sleep(2)
  41. try:
  42. button = driver.find_element_by_class_name('geetest_commit_tip')
  43. except NoSuchElementException:
  44. return True
  45. else:
  46. error_report(rid)
  47. sign_in_vc(driver)
  48. return False
  49. def get_to_sign_in(driver):
  50. if sign_in_button(driver):
  51. sign_in(driver)
  52. return True
  53. else:
  54. return False
  55. def sign_in_button(driver):
  56. try:
  57. button = driver.find_element_by_link_text('签到')
  58. except NoSuchElementException:
  59. return False
  60. else:
  61. ActionChains(driver).move_to_element(button).click().perform()
  62. return True
  63. def sign_in(driver):
  64. time.sleep(2)
  65. button = driver.find_element_by_id('emot_1')
  66. ActionChains(driver).move_to_element(button).click().perform()
  67. time.sleep(2)
  68. submit = driver.find_element_by_name('signpn')
  69. ActionChains(driver).move_to_element(submit).click().perform()
  70. def get_image(driver):
  71. time.sleep(2)
  72. element = driver.find_element_by_class_name('geetest_widget')
  73. vc_image = get_vc_image(element)
  74. return vc_image