简介
通过编写自动化脚本,实现登录WEB系统,自动操作某个功能,代码写的很粗糙,健壮性可以忽略,仅记录学习。
代码实现
# 导入必要的库
import time # 用于添加等待时间
from datetime import datetime
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException, TimeoutException # 用于异常处理
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By # 用于定位元素
from selenium.webdriver.support import expected_conditions as EC # 用于等待特定条件
from selenium.webdriver.support.ui import WebDriverWait # 用于等待页面加载
# def click_new_button():
# # 连接现有浏览器
# chrome_options = Options()
# chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
# chrome_driver_path = "C:\Program Files\Google\Chrome\Application\chromedriver-win64\chromedriver.exe" # 修改为你的chromedriver路径
# 创建WebDriver实例
#driver = webdriver.Chrome(options=chrome_options)
# 1. 初始化浏览器
#创建一个Chrome浏览器实例(如果你用其他浏览器,可以改为Firefox等)
driver = webdriver.Chrome()
#
# # 假设你已经登录并停留在草稿箱界面
# # 这里需要替换成你实际平台的URL
driver.get("http://127.0.0.1:22310/user/login?platformType=enterpriseMana")
try:
# button = driver.find_element(By.XPATH, '//button[text()="登录"]')
# button.click()
#方式3:通过XPath定位(更灵活但复杂)
input_field = driver.find_element(By.XPATH, "//input[@placeholder='请输入手机号']")
# 输入你想要的信息
input_field.send_keys("17601090255")
input_field = driver.find_element(By.XPATH, "//input[@placeholder='请输入验证码']")
input_field.send_keys("123456")
input_field = driver.find_element(By.XPATH, "//input[@placeholder='请输入密码']")
input_field.send_keys("Hollyrise!321")
element = driver.find_element(By.XPATH, "//button[@type='submit']")
element.click()
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located(
(By.XPATH, "//div[contains(@class, 'other-item') and contains(text(), '供应过程管理')]"))
)
element.click()
main_menu = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, "//*[contains(text(),'供应商监控')]"))
)
main_menu.click()
location = main_menu.location
size = main_menu.size
# 计算元素中心点下方40px的坐标
x = location['x'] + size['width'] / 2
y = location['y'] + size['height'] + 40 # 正下方120px
# 使用ActionChains移动鼠标并点击
actions = ActionChains(driver)
actions.move_by_offset(x, y).pause(0.5).click().perform()
# element=driver.find_element(By.XPATH, '//div[contains(text(), "草稿箱")]')
# element.click()
button = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH,
'//div[contains(text(), "草稿箱")]'))
)
button.click()
button = driver.find_element(By.XPATH,
'//button[contains(concat(" ", normalize-space(@class), " "), " ant-btn ") '
'and contains(concat(" ", normalize-space(@class), " "), " ant-btn-primary ") '
'and normalize-space()="添加"]')
button.click()
# time.sleep(2)
####################项目名称####################
project_name = WebDriverWait(driver, 10).until(
EC.presence_of_element_located(
(By.XPATH, "//input[@placeholder='请输入项目名称']")
)
)
time.sleep(1)
input_field = driver.find_element(By.XPATH, "//input[@placeholder='请输入项目名称']")
# 获取本地时间的结构化对象
current_time = time.localtime()
input_field.send_keys(datetime.now().strftime("%Y%m%d%H%M%S"))
####################项目供应商选择####################
dropdown = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable(
(By.XPATH, "//label[@title='项目供应商']/following::div[contains(@class,'ant-select')]")
)
)
# 点击展开下拉
dropdown.click()
element = WebDriverWait(driver, 10).until(
EC.visibility_of_element_located((By.XPATH, '//*[contains(text(), "高供应科技股份有限公司")]'))
)
element.click()
####################项目开始时间####################
time.sleep(1)
input_field_start_time = driver.find_element(By.XPATH, "//input[@placeholder='请选择项目开始时间']")
input_field_start_time.click()
start_time_element = WebDriverWait(driver, 10).until(
EC.visibility_of_element_located((By.XPATH, '//*[contains(text(), "今天")]'))
)
start_time_element.click()
####################运营状态####################
time.sleep(1)
dropdown = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable(
(By.XPATH, '//label[@title="项目运营状态"]/following::div[contains(@class, "ant-select")][1]')
)
)
# 点击展开下拉
dropdown.click()
# 精准匹配选项文本
yunying_status = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable(
(By.XPATH, '//li[@role="option"]//span[contains(text(), "批产")]')
)
)
yunying_status.click()
#################################客户方项目人员#####################################
time.sleep(1)
khfxmry_field = driver.find_element(By.XPATH, "//input[@placeholder='请选择客户方项目人员']")
khfxmry_field.click()
khfxmry_element = WebDriverWait(driver, 10).until(
EC.visibility_of_all_elements_located((By.XPATH, '//td[@data-colid="col_62"]/div[normalize-space()="高客户"]'))
)
if len(khfxmry_element) > 0:
khfxmry_element = khfxmry_element[0]
khfxmry_element.click()
khfxmry_buttons = driver.find_elements(By.CSS_SELECTOR, 'button.ant-btn.ant-btn-primary')
time.sleep(1)
# 然后筛选出包含"确定"文本的按钮
for btn in khfxmry_buttons:
if "确 定" in btn.text:
btn.click()
break
time.sleep(1)
##################################新增按钮##########################################
add_button = driver.find_element(By.XPATH,
'//button[contains(concat(" ", normalize-space(@class), " "), " ant-btn ") '
'and contains(concat(" ", normalize-space(@class), " "), " ant-btn-primary ") '
'and normalize-space()="新增"]')
# === 滚动到可视区域 ===
driver.execute_script("arguments[0].scrollIntoView({behavior: 'smooth', block: 'center'})", add_button)
add_button.click()
add_element = WebDriverWait(driver, 10).until(
EC.visibility_of_element_located((By.XPATH, '//*[contains(text(), "2025_04_29_001")]'))
)
add_element.click()
add_buttons = driver.find_elements(By.CSS_SELECTOR, 'button.ant-btn.ant-btn-primary')
# 然后筛选出包含"确定"文本的按钮
for btn in add_buttons:
if "确 定" in btn.text:
btn.click()
break
time.sleep(2)
###############################零件信息填充工艺路线编号#############################################
gylxbh = driver.find_element(By.XPATH, "//input[@placeholder='请选择']")
gylxbh.click()
gylxbh_element = WebDriverWait(driver, 10).until(
EC.visibility_of_element_located(
(By.XPATH, '//td[@data-colid="col_76"]/div[normalize-space()="2025042900000004"]')
)
)
gylxbh_element.click()
gylxbh_buttons = driver.find_elements(By.CSS_SELECTOR, 'button.ant-btn.ant-btn-primary')
time.sleep(1)
# 然后筛选出包含"确定"文本的按钮
for btn in gylxbh_buttons:
if "确 定" in btn.text:
btn.click()
break
time.sleep(1)
###################################保存#######################################
buttons = driver.find_elements(By.CSS_SELECTOR, 'button.ant-btn.ant-btn-primary')
# 然后筛选出包含"确定"文本的按钮
for btn in buttons:
if "保 存" in btn.text:
btn.click()
break
time.sleep(1)
except NoSuchElementException:
print("错误:找不到页面元素,请检查定位方式是否正确")
except TimeoutException:
print("错误:页面加载超时,请检查网络或增加等待时间")
except Exception as e:
print(f"发生未知错误: {str(e)}")
finally:
# 5. 关闭浏览器
input("按回车键关闭浏览器...") # 这是为了让你有时间查看结果,实际使用时可以去掉
driver.quit()
效果查看

screenshot_2025-05-21_09-33-33.gif