# -*- 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