抓取生产工单,赚取发料异常
This commit is contained in:
91
browser_login/test_fill_date.py
Normal file
91
browser_login/test_fill_date.py
Normal file
@@ -0,0 +1,91 @@
|
||||
"""
|
||||
测试脚本:尝试在 ERP 质量报表页面填写“下单日期(开始)”
|
||||
目标: 验证 DrissionPage 是否能成功清除并输入 ElementUI 的日期选择器。
|
||||
"""
|
||||
import sys
|
||||
import time
|
||||
from pathlib import Path
|
||||
|
||||
sys.path.insert(0, str(Path(__file__).parent))
|
||||
from login import get_page, log
|
||||
|
||||
HOME_URL = "https://yunmes.tftykj.cn/"
|
||||
|
||||
def test_fill_date():
|
||||
log("INFO", "=== 🧪 启动日期输入框填写测试 ===")
|
||||
page = get_page(port=9222)
|
||||
|
||||
try:
|
||||
log("INFO", f"正在回到主页起点: {HOME_URL}")
|
||||
page.get(HOME_URL)
|
||||
page.wait.load_start()
|
||||
time.sleep(2)
|
||||
|
||||
menus = [
|
||||
("进入质量报表", 'xpath://*[@id="el-collapse-content-21"]/div/div/div/div[1]/div/div/div[6]/div')
|
||||
]
|
||||
|
||||
log("INFO", "开始模拟人工点击左侧导航菜单...")
|
||||
for name, xpath in menus:
|
||||
ele = page.ele(xpath, timeout=5)
|
||||
if ele:
|
||||
try: ele.click()
|
||||
except: page.run_js("arguments[0].click();", ele)
|
||||
else:
|
||||
log("ERR", f"找不到菜单元素: {name}")
|
||||
return
|
||||
|
||||
log("OK", "✅ 成功点开质量报表界面!")
|
||||
|
||||
# 等待页面稍微加载一下
|
||||
time.sleep(2)
|
||||
|
||||
# 尝试寻找并填写下单日期(开始)
|
||||
date_xpath = 'xpath://*[@id="customTable-search-area"]/div[1]/div/div[2]/div[11]/div[2]/span/input[1]'
|
||||
log("INFO", f"正在寻找日期输入框: {date_xpath}")
|
||||
|
||||
date_input = page.ele(date_xpath, timeout=5)
|
||||
|
||||
if date_input:
|
||||
log("INFO", "✅ 找到输入框!尝试清除并输入 '2026-05-01'...")
|
||||
|
||||
# ElementUI 的日期输入框比较难搞,通常需要组合拳
|
||||
# 放弃在 UI 层面折腾这个顽固的日期选择器
|
||||
# 我们采用“黑客”做法:直接在浏览器底层拦截并篡改即将发出的网络请求数据包!
|
||||
API_TARGET = "SearchCustomReportBySQL_Proxy"
|
||||
|
||||
# 1. 设置请求拦截器
|
||||
log("INFO", f"正在开启全局请求拦截器,目标: {API_TARGET}")
|
||||
page.listen.start(API_TARGET)
|
||||
|
||||
# 2. 我们不需要在输入框里填东西了,直接去点击查询按钮
|
||||
query_btn_xpath = 'xpath://*[@id="customTable-search-area"]/div[1]/div/div[1]/a[2]/span/span'
|
||||
query_btn = page.ele(query_btn_xpath, timeout=3)
|
||||
|
||||
if query_btn:
|
||||
log("INFO", "准备点击【查询】按钮触发网络请求...")
|
||||
try:
|
||||
query_btn.click()
|
||||
except:
|
||||
page.run_js("arguments[0].click();", query_btn)
|
||||
|
||||
# 3. 拦截请求
|
||||
packet = page.listen.wait(timeout=10)
|
||||
if packet:
|
||||
log("OK", "✅ 成功拦截到了查询请求!")
|
||||
|
||||
# 打印一下它原来发送的数据体,看看结构
|
||||
raw_post_data = packet.request.postData
|
||||
log("INFO", "原始发送的数据截断前100字符: " + str(raw_post_data)[:100])
|
||||
|
||||
log("OK", "如果这种拦截思路可行,我们下一步就可以在发送前篡改它里面的日期参数!")
|
||||
else:
|
||||
log("ERR", "未能拦截到查询请求,可能超时。")
|
||||
else:
|
||||
log("ERR", "未找到【查询】按钮。")
|
||||
|
||||
except Exception as e:
|
||||
log("ERR", f"发生异常: {e}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
test_fill_date()
|
||||
Reference in New Issue
Block a user