abuyun_renew.py 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. # -*- coding:utf-8 -*-
  2. # @Time : 2018/5/14 3:58 PM
  3. # @Author : Swing
  4. from selenium import webdriver
  5. from selenium.common.exceptions import TimeoutException
  6. from selenium.webdriver.support.ui import WebDriverWait
  7. from selenium.webdriver.support.ui import Select
  8. from selenium.webdriver.support import expected_conditions as EC
  9. from selenium.webdriver.common.by import By
  10. import launch_spider
  11. import email_util
  12. import traceback
  13. browser = webdriver.Chrome()
  14. # browser.maximize_window()
  15. timeout = 180
  16. time_interval = 0.1
  17. def open_chrome():
  18. browser.get('https://center.abuyun.com/#/cloud/http-proxy/tunnel/lists')
  19. def recharge(is_launch_spider=False):
  20. # 等待网页加载完成
  21. browser.get('https://center.abuyun.com/#/cloud/http-proxy/tunnel/lists')
  22. wait_preloader()
  23. if browser.title == '阿布云 - 服务管理控制台':
  24. element_xpath = r'//a[text()="动态版"]'
  25. element = WebDriverWait(browser, timeout, time_interval).until(EC.element_to_be_clickable((By.XPATH, element_xpath)))
  26. element.click()
  27. # 选中要续费的代理渠道
  28. # checkbox_xpath = r'//tbody/tr/td/div[1]/label/span'
  29. checkbox_xpath = r'/html/body/div[3]/section/div/div/div[2]/div/div/div[2]/div/div[1]/div[2]/table/tbody/tr/td[1]/div/label/span'
  30. # WebDriverWait(browser, timeout, 1).until(EC.presence_of_element_located((By.XPATH, checkbox_xpath)))
  31. checkbox = WebDriverWait(browser, timeout, time_interval).until(EC.element_to_be_clickable((By.XPATH, checkbox_xpath)))
  32. checkbox.click()
  33. # 点击续费按钮
  34. try:
  35. WebDriverWait(browser, timeout, time_interval).until(
  36. # lambda x: x.find_element_by_xpath(r'//tbody/tr/td/div[1]/label/input[@type="checkbox"]').is_selected())
  37. lambda x: x.find_element_by_xpath(r'/html/body/div[3]/section/div/div/div[2]/div/div/div[2]/div/div[1]/div[2]/table/tbody/tr/td[1]/div/label/input[@type="checkbox"]').is_selected())
  38. except TimeoutException:
  39. email_util.send_email('Abuyun renew timeout', traceback.format_exc())
  40. except:
  41. email_util.send_email('Abuyun renew error', traceback.format_exc())
  42. renew_xpath = r'//div[@class="panel-footer"]/div[@class="row"]/div/button[text()=" 续费"][not(@disabled)]'
  43. # WebDriverWait(browser, timeout, 1).until(EC.presence_of_element_located((By.XPATH, renew_xpath)))
  44. renew = WebDriverWait(browser, timeout, time_interval).until(EC.element_to_be_clickable((By.XPATH, renew_xpath)))
  45. renew.click()
  46. WebDriverWait(browser, timeout, time_interval).until(EC.visibility_of_element_located((By.XPATH, r'//div[@class="modal-dialog modal-mlg"]')))
  47. # 选择续费周期
  48. unit_select_xpath = r'//div[@class="input-group unit-input-group"]/select'
  49. # WebDriverWait(browser, timeout, 1).until(EC.presence_of_element_located((By.XPATH, unit_select_xpath)))
  50. unit_select = WebDriverWait(browser, timeout, time_interval).until(EC.element_to_be_clickable((By.XPATH, unit_select_xpath)))
  51. select = Select(unit_select)
  52. select.select_by_visible_text('时')
  53. number = WebDriverWait(browser, timeout, time_interval).until(lambda x: x.find_element_by_xpath(r'//input[@type="number"]'))
  54. number.clear()
  55. number.send_keys('1')
  56. charge_button = browser.find_element_by_xpath(r'//div[@class="modal-footer"]/button[text()=" 续费"]')
  57. charge_button.click()
  58. # 等待充值页面加载成功
  59. WebDriverWait(browser, timeout, time_interval).until(EC.url_contains('https://center.abuyun.com/#/trade/order/confirm?'))
  60. WebDriverWait(browser, timeout, time_interval).until(EC.invisibility_of_element_located((By.XPATH, r'//div[contains(@class, "modal")]')))
  61. wait_preloader()
  62. balance_xpath = r'//td[span/span="可用余额"]/strong'
  63. WebDriverWait(browser, timeout, time_interval).until(EC.visibility_of_element_located((By.XPATH, balance_xpath)))
  64. WebDriverWait(browser, timeout, time_interval).until(EC.invisibility_of_element_located((By.XPATH, r'//div[contains(@class, "modal-backdrop")]')))
  65. WebDriverWait(browser, timeout, time_interval).until_not(EC.presence_of_element_located((By.XPATH, r'//div[contains(@class, "modal-backdrop")]')))
  66. if '钱包余额不足, 请先充值或直接使用支付宝支付' in browser.page_source:
  67. email_util.send_email('Abuyun renew error', 'Lack of balance')
  68. print('Lack of balance')
  69. return None
  70. use_wallet_xpath = r'//table[@class="table table-bordered ng-scope"]/tbody/tr/td[3]/label/span'
  71. use_wallet = WebDriverWait(browser, timeout, time_interval).until(EC.element_to_be_clickable((By.XPATH, use_wallet_xpath)))
  72. use_wallet.click()
  73. try:
  74. balance_string = browser.find_element_by_xpath(balance_xpath).text
  75. balance = float(balance_string)
  76. if balance < 40:
  77. email_util.send_email('Abuyun balance alert', 'Balance: ' + balance_string + ' Please recharge timely!')
  78. except:
  79. email_util.send_email('Abuyun balance check error', traceback.format_exc())
  80. money = WebDriverWait(browser, timeout, time_interval).until(EC.visibility_of_element_located((By.XPATH, r'//span[@class="text-money"]')))
  81. if money.text == '0.00':
  82. print('price 0')
  83. pay = WebDriverWait(browser, timeout, time_interval).until(EC.element_to_be_clickable((By.XPATH, r'//button[text()="马上支付"]')))
  84. pay.click()
  85. else:
  86. email_util.send_email('Abuyun renew error', 'Price not 0')
  87. return None
  88. # 等待订单列表加载成功
  89. WebDriverWait(browser, timeout, time_interval).until(EC.url_contains(r'https://center.abuyun.com/#/trade/order/lists?'))
  90. wait_preloader()
  91. WebDriverWait(browser, timeout, time_interval).until(
  92. EC.invisibility_of_element_located((By.XPATH, r'//div[contains(@class, "modal")]')))
  93. WebDriverWait(browser, timeout, time_interval).until(EC.visibility_of_element_located((By.XPATH, r'//div[contains(@class, "sweet-alert")]')))
  94. confirm_button = WebDriverWait(browser, timeout, time_interval).until(
  95. EC.element_to_be_clickable((By.XPATH, r'//button[@class="confirm"]')))
  96. if '已从钱包扣款,订单支付完成' in browser.page_source:
  97. print('Renew completed')
  98. if is_launch_spider:
  99. launch_spider.start_spider()
  100. confirm_button.click()
  101. else:
  102. email_util.send_email('Abuyun renew error', 'Abuyun renew error')
  103. print('Renew failed')
  104. else:
  105. email_util.send_email('Abuyun Login failed', 'Abuyun Login failed')
  106. print('Login failed')
  107. def wait_preloader():
  108. WebDriverWait(browser, timeout, time_interval).until(
  109. EC.invisibility_of_element_located((By.XPATH, r'//div[contains(@class, "preloader")]')))