python脚本实现自动化操作

简介

通过编写自动化脚本,实现登录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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容