python + seleuim 实现点击阿里云带宽续费脚本

# -*- coding: utf-8 -*-
from selenium import webdriver
import time

browser=""

aliyunRAM_url=""

user=""

password=""

ecsid=''

regionId=''


#login function
def login(driver):
  driver.get(aliyunRAM_url)
   #input user
  driver.find_element_by_xpath("//*[@id=\"user_principal_name\"]").clear()
  driver.find_element_by_xpath("//*[@id=\"user_principal_name\"]").send_keys(user)
  time.sleep(1)

  #click next
  driver.find_element_by_xpath("/html/body/div[2]/div[1]/form/div[3]/div[2]/span").click()
  time.sleep(1)

  #input password
  driver.find_element_by_xpath("//*[@id=\"password_ims\"]").send_keys(password)

  #click login
  driver.find_element_by_xpath("/html/body/div[2]/div[1]/form/div[4]/div[2]/div/input").click()
  time.sleep(1)

  #click Tips
  try:
    driver.find_element_by_xpath("/html/body/div[1]/div[2]/div[2]/div[1]/button/i").click()
  except Exception as a:
    print("click:error is not page")
#get_pay_page_url return url
def init_pay(driver,ecsid,regionId):
  driver.find_element_by_xpath("/html/body/div[2]/div/div[3]/main/div[1]/div/div/div/div[2]/div/ul/li[1]/a/span").click()
  driver.switch_to.window(driver.window_handles[1])
  time.sleep(2)
  url = driver.current_url.split("#")
  print(url[0])
  ecs= str(url[0]) +'#/upgrade/bandwidth/'+ str(ecsid) + '?regionId=' + str(regionId)
  print(ecs)
  return ecs
#set_pay_date_time_and_net_size
def set_data(driver,date_day,net_size):   #date 格式  "x月 xxxx"
  #set_month_dict
  month={1:"January",2:"February",3:"March",4:"April",5:"May",6:"June",7:"July",8:"August",9:"September",10:"October",11:"November",12:"December"}
  #input str(date_day)_to_list(datelist)
  datelist = date_day.split('-')
  day = datelist[2]
  #from_datelist_get_date
  date = month[int(datelist[1])]+" "+datelist[0]

  #from_datelist_get_times
  times = datelist[3]

  #set_net_max
  driver.find_element_by_xpath("/html/body/div[2]/div/div/div[2]/div[2]/div[4]/div/div/div[2]/div[1]/div[1]/div[2]/div[2]/div[1]/div/div[1]/span/input").clear()
  driver.find_element_by_xpath("/html/body/div[2]/div/div/div[2]/div[2]/div[4]/div/div/div[2]/div[1]/div[1]/div[2]/div[2]/div[1]/div/div[1]/span/input").send_keys(net_size)

  #open_calender
  driver.find_element_by_xpath("/html/body/div[2]/div/div/div[2]/div[2]/div[4]/div/div/div[2]/div[1]/div[1]/div[2]/div[2]/div[3]/div/div[1]/span[5]/input").click()

  #set_yeam_and_month
  for i in [1,2,3,4,5,6,7,8,9,10,11,12]:
    #get_year
    driver.find_element_by_xpath("/html/body/div[2]/div/div/div[2]/div[2]/div[4]/div/div/div[2]/div[1]/div[1]/div[2]/div[2]/div[3]/div/div[1]/span[5]/div/ul/li[1]/div/table/thead/tr[1]/th[1]/button/i").click()


    #month year  == month year
    if driver.find_element_by_xpath("/html/body/div[2]/div/div/div[2]/div[2]/div[4]/div/div/div[2]/div[1]/div[1]/div[2]/div[2]/div[3]/div/div[1]/span[5]/div/ul/li[1]/div/table/thead/tr[1]/th[2]/button/strong").text == str(date):
      break
    else:
      continue

  #set_day
  for x in [1,2,3,4,5]:
    for y in [2,3,4,5,6,7,8]:
      #get_day_xpath
      xpath_url="/html/body/div[2]/div/div/div[2]/div[2]/div[4]/div/div/div[2]/div[1]/div[1]/div[2]/div[2]/div[3]/div/div[1]/span[5]/div/ul/li[1]/div/table/tbody/tr["+str(x)+"]/td["+str(y)+"]/button/span"

      # set_day = xpath_day  click to set_day
      if day == driver.find_element_by_xpath(xpath_url).text:
        #set_day
        driver.find_element_by_xpath(xpath_url).click()
        #set_end_times
        driver.find_element_by_xpath("/html/body/div[2]/div/div/div[2]/div[2]/div[4]/div/div/div[2]/div[1]/div[1]/div[2]/div[2]/div[3]/div/div[1]/span[6]/input").clear()
        time.sleep(1)
        driver.find_element_by_xpath("/html/body/div[2]/div/div/div[2]/div[2]/div[4]/div/div/div[2]/div[1]/div[1]/div[2]/div[2]/div[3]/div/div[1]/span[6]/input").send_keys(times)
        return(0)
#pay
def pay_order(driver,auth_pay):
  driver.find_element_by_xpath("/html/body/div[2]/div/div/div[2]/div[2]/div[4]/div/div/div[2]/div[1]/div[2]/div[3]/div/div").click()
  time.sleep(1)
  driver.find_element_by_xpath("/html/body/div[2]/div/div/div[2]/div[2]/div[4]/div/div/div[2]/div[1]/div[4]/span/div/span").click()
  print("支付金额:" + str(driver.find_element_by_xpath("/html/body/div[2]/div/div/div[2]/div[2]/div[4]/div/div/div[2]/div[1]/div[2]/div[3]/div/div/span[4]").text))
  if float(driver.find_element_by_xpath("/html/body/div[2]/div/div/div[2]/div[2]/div[4]/div/div/div[2]/div[1]/div[2]/div[3]/div/div/span[4]").text) > 10:
     print("金额异常,请查看程序结束")
     exit()

  print(driver.find_element_by_xpath("/html/body/div[2]/div/div/div[2]/div[2]/div[4]/div/div/div[2]/div[1]/div[4]/span/div/span").text)
  time.sleep(1)

 # driver.find_element_by_xpath("/html/body/div[2]/div/div/div[2]/div[2]/div[4]/div/div/div[2]/div[1]/div[4]/span/div/span").click()

  driver.find_element_by_xpath("/html/body/span[2]/div/div/div/div/div[3]/span/div/span").click()
  #选择支付方式
  time.sleep(6)
  driver.switch_to.window(driver.window_handles[2])   #to_pay_window
  driver.find_element_by_xpath("/html/body/div[4]/div/div[3]/div[1]/div[2]/div/div[1]/span[1]/span/span/label/input").click()
  #pay_auth
  if auth_pay == True:
    driver.find_element_by_xpath("/html/body/div[4]/div/div[3]/div[2]/form/div/div/button").click()
  else:
    print("auth_pay_set pay_order(drivice,True)")
#pay
def main(date_time,set_size,pay_type):

    try:
      start = time.time()
      # init browser obect
      dc = {'browserName':'firefox','version':'','platfrom':'ANY','javascriptEnabled':True}
      driver = webdriver.Remote(command_executor="http://browser:4444/wd/hub",desired_capabilities=dc)


      #login aliyun
      login(driver)

      #to_pay_page
      driver.get(init_pay(driver,ecsid,regionId))
      time.sleep(2)

      #set pay args
      set_data(driver,date_time,set_size)

      #pay
      pay_order(driver,pay_type)
      
      #quit browser
      driver.quit()

    except Exception as err_msg:
      print("error:" + str(err_msg))
    finally:
      stop=time.time()
      print(stop - start)
      with open("./seleium.log",'a') as f:
        f.write("耗时:"+str(stop - start)+"\n")
        f.close()
      try :

        driver.quit()
        print("无异常")
      except Exception as err_def:
        print("not_open_browser or quited_browser")

#结束时间 带宽最大值  自动续费(True,False)

main('2019-7-26-14',3,False)

#需要最新或基于阿里云api 实现的请联系 gtinlian@sina.com
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值