抓取生产工单,抓取发料异常
This commit is contained in:
@@ -83,20 +83,39 @@ def fetch_report_data(page):
|
||||
var doc = iframes[j].contentDocument || iframes[j].contentWindow.document;
|
||||
var win = iframes[j].contentWindow;
|
||||
|
||||
// 1. 设置开始日期
|
||||
var startInputs = doc.querySelectorAll('.input_StartValue.datebox-f');
|
||||
if (startInputs.length > 0) {{
|
||||
win.$(startInputs[0]).datebox('setValue', '{first_day}');
|
||||
// 1. 自动设置下单日期为当月
|
||||
// (暴力匹配所有的 datebox,前两个一般就是开始和结束)
|
||||
var dates = doc.querySelectorAll('.datebox-f, .datetimebox-f');
|
||||
if (dates.length >= 2) {{
|
||||
try {{ win.$(dates[0]).datetimebox('setValue', '{first_day} 00:00:00'); }} catch(e) {{}}
|
||||
try {{ win.$(dates[0]).datebox('setValue', '{first_day} 00:00:00'); }} catch(e) {{}}
|
||||
|
||||
try {{ win.$(dates[1]).datetimebox('setValue', '{last_day} 23:59:59'); }} catch(e) {{}}
|
||||
try {{ win.$(dates[1]).datebox('setValue', '{last_day} 23:59:59'); }} catch(e) {{}}
|
||||
}} else {{
|
||||
// 备用方案:寻找附近元素
|
||||
var allSpans = doc.querySelectorAll('span, td, th');
|
||||
for(var k=0; k<allSpans.length; k++) {{
|
||||
var txt = allSpans[k].innerText || '';
|
||||
if (txt.indexOf('下单日期(开始)') !== -1) {{
|
||||
var input = allSpans[k].parentNode.parentNode.querySelector('.textbox-f');
|
||||
if(input) {{
|
||||
try {{ win.$(input).datetimebox('setValue', '{first_day} 00:00:00'); }} catch(e) {{}}
|
||||
try {{ win.$(input).datebox('setValue', '{first_day} 00:00:00'); }} catch(e) {{}}
|
||||
}}
|
||||
}}
|
||||
if (txt.indexOf('下单日期(结束)') !== -1) {{
|
||||
var input = allSpans[k].parentNode.parentNode.querySelector('.textbox-f');
|
||||
if(input) {{
|
||||
try {{ win.$(input).datetimebox('setValue', '{last_day} 23:59:59'); }} catch(e) {{}}
|
||||
try {{ win.$(input).datebox('setValue', '{last_day} 23:59:59'); }} catch(e) {{}}
|
||||
}}
|
||||
}}
|
||||
}}
|
||||
}}
|
||||
|
||||
// 2. 设置结束日期
|
||||
var endInputs = doc.querySelectorAll('.input_EndValue.datebox-f');
|
||||
if (endInputs.length > 0) {{
|
||||
win.$(endInputs[0]).datebox('setValue', '{last_day}');
|
||||
}}
|
||||
|
||||
// 3. 清理所有下拉框(包括发料情况)
|
||||
var combos = doc.querySelectorAll('.combobox-f, .textbox-f');
|
||||
// 3. 清理发料情况下拉框 (千万不能选 textbox-f,否则会把刚才填的日期清空!)
|
||||
var combos = doc.querySelectorAll('.combobox-f');
|
||||
for(var i=0; i<combos.length; i++) {{
|
||||
try {{ win.$(combos[i]).combobox('clear'); }} catch(e) {{}}
|
||||
}}
|
||||
@@ -152,8 +171,8 @@ def fetch_report_data(page):
|
||||
|
||||
print("开始监听网络请求,寻找 API 数据包...")
|
||||
while True:
|
||||
packets = target_tab.listen.steps()
|
||||
print(f"[{datetime.datetime.now().strftime('%H:%M:%S')}] 收集到 {len(packets)} 个网络数据包,正在解析...")
|
||||
print(f"[{datetime.datetime.now().strftime('%H:%M:%S')}] 正在收集并解析网络数据包...")
|
||||
packets = target_tab.listen.steps(timeout=5)
|
||||
|
||||
found_data = False
|
||||
total_pages = 1
|
||||
@@ -172,13 +191,15 @@ def fetch_report_data(page):
|
||||
total_count = res.get('totalCount', 0)
|
||||
items = res.get('items', [])
|
||||
|
||||
# 动态计算真实的总页数 (防止前端强改500条失败)
|
||||
actual_page_size = len(items) if len(items) > 0 else 50
|
||||
total_pages = (total_count + actual_page_size - 1) // actual_page_size if total_count > 0 else 1
|
||||
|
||||
print("===================================")
|
||||
print(f"✅ 成功拦截到报表数据API (第 {current_page} 页)")
|
||||
print(f"✅ 成功拦截到报表数据API (第 {current_page}/{total_pages} 页)")
|
||||
print(f"✅ 数据总条数: {total_count}, 当前页条数: {len(items)}")
|
||||
print("===================================")
|
||||
|
||||
total_pages = (total_count + 499) // 500 if total_count > 0 else 1
|
||||
|
||||
# Import and save to database
|
||||
try:
|
||||
import import_to_sqlite
|
||||
@@ -197,20 +218,13 @@ def fetch_report_data(page):
|
||||
pass
|
||||
|
||||
if not found_data:
|
||||
print(f"[{datetime.datetime.now().strftime('%H:%M:%S')}] 第 {current_page} 页等待了3秒,没有拦截到匹配的报表数据...")
|
||||
print(f"[{datetime.datetime.now().strftime('%H:%M:%S')}] 第 {current_page} 页等待了超时,没有拦截到匹配的报表数据...")
|
||||
|
||||
# 再给一次机会等3秒
|
||||
print("再等待3秒重试...")
|
||||
time.sleep(3)
|
||||
retry_packets = target_tab.listen.steps()
|
||||
print(f"重试收集到 {len(retry_packets)} 个数据包。")
|
||||
if not retry_packets:
|
||||
print(f"彻底没有数据,停止抓取。")
|
||||
break
|
||||
else:
|
||||
packets.extend(retry_packets)
|
||||
# 重新让上面解析
|
||||
continue
|
||||
# 重新让上面解析
|
||||
continue
|
||||
|
||||
if current_page >= total_pages:
|
||||
print(f"已到达最后一页 (共 {total_pages} 页),抓取完成!")
|
||||
|
||||
Reference in New Issue
Block a user