#!/usr/bin/python # -*- coding: utf-8 -*- import time from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import totp # 浏览器不自动退出。 options = webdriver.ChromeOptions() options.add_experimental_option("detach", True) options.add_experimental_option('excludeSwitches', ['enable-automation']) options.add_argument('--disable-blink-features=AutomationControlled') driver = webdriver.Chrome(options=options) driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", { "source": """ Object.defineProperty(navigator, 'webdriver', { get: () => undefined }) """ }) driver.get('https://signin.aliyun.com/login.htm#/main') # 将窗口最大化 driver.maximize_window() driver.implicitly_wait(5) print(driver.title) # 帐号输入框 driver.find_element(by=By.XPATH, value='//*[@id="loginName"]').send_keys('ig-yaohong.lin@1697615187600978.onaliyun.com') # 帐号输入界面下一步按钮,和登录按钮一样。 driver.find_element(by=By.XPATH, value='//*[@id="--aliyun-xconsole-app"]/div[1]/div[2]/div/div/div[1]/div[2]/div/div/div/div/div/form/div[5]/button').click() # # 密码输入框 # //*[@id="loginPassword"] driver.find_element(by=By.XPATH, value='//*[@id="loginPassword"]').send_keys('XvXA1rcU!st0}Zg%YA9heGSmPaNl#Cn8') driver.find_element(by=By.XPATH, value='//*[@id="--aliyun-xconsole-app"]/div[1]/div[2]/div/div/div[1]/div[2]/div/div/div/div/div/form/div[5]/button').click() # 6位数验证码 # //*[@id="--aliyun-xconsole-app"]/div[1]/div[2]/div/div/form/div/div/div[3]/div[2]/span/input driver.find_element(by=By.XPATH, value='//*[@id="--aliyun-xconsole-app"]/div[1]/div[2]/div/div/form/div/div/div[3]/div[2]/span/input').send_keys(totp.get_totp('DON4KJEWULALH4KUCMKNYAGLKW3ZU4JBCN5Q7URN2MMPRQTUZ4OQGSOK6R6YXESG')) # 点击登录 driver.find_element(by=By.XPATH, value='//*[@id="--aliyun-xconsole-app"]/div[1]/div[2]/div/div/form/div/div/button').click() # 等待页面跳转完成。 wait = WebDriverWait(driver, 10) old_url = driver.current_url new_url = wait.until(EC.url_changes(old_url)) # print(driver.title) # if driver.title == '阿里云控制台首页': # driver.get('https://cloudmonitornext.console.aliyun.com/hostMonitoring/details/i-2zegcnnwaisp1iz7ybe3?product=acs_ecs_dashboard') # 退出浏览器 # driver.quit() ecs_list=['i-2zebbynhut4jtuqezno8', 'i-2ze4ttq0poslfyd9ln4m', 'i-2zed7qqtzw893216uitj', 'i-2zegcnnwaisp1iz7ybe2', 'i-2zegcnnwaisp1iz7ybe3'] for i in ecs_list: ecs_monitor_url = 'https://cloudmonitornext.console.aliyun.com/hostMonitoring/details/' + i + '?product=acs_ecs_dashboard' print(ecs_monitor_url) driver.get(ecs_monitor_url) # 点击自定义 driver.find_element(by=By.XPATH, value='//*[@id="icestarkNode"]/div[1]/div/main/section[2]/section[2]/section[2]/section/section/div/div/div[2]/div/div/div[1]/div[1]/div/div/label[8]/span[2]').click() # 点击开始时间 driver.find_element(by=By.XPATH, value='//*[@id="icestarkNode"]/div[1]/div/main/section[2]/section[2]/section[2]/section/section/div/div/div[2]/div/div/div[1]/div[1]/div/div[2]/div/div/span[1]/input').click() Time_Input_Xpath = '/html/body/div[6]/div/div[1]/div/span[1]/input' # 定义JS去除日期控件的只读属性,让其可输入 select_js = """ function getElementByXpath(path) { return document.evaluate(path, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; } ele = getElementByXpath(arguments[0]); ele.readOnly = false; ele.value = ; """ driver.execute_script(select_js, Time_Input_Xpath) # 使用webdriver,驱动JS,对html页面属性进行更改。 driver.find_element(By.CSS_SELECTOR, 'body > div.next-overlay-wrapper.opened > div > div.next-range-picker-panel-header > div > span.next-input.next-medium.next-range-picker-panel-input-start-date.next-focus > input').send_keys('2024年2月1日') time.sleep(4) # 点击确定 driver.find_element(by=By.XPATH, value='/html/body/div[6]/div/div[3]/span[4]/button').click() locator = (By.CSS_SELECTOR, '#react-g2-6 > div > canvas') WebDriverWait(driver, 20, 0.5).until(EC.presence_of_element_located(locator=locator)) driver.get_screenshot_as_file(i + ".png")