50 lines
1.7 KiB
Python
50 lines
1.7 KiB
Python
import json
|
|
import os
|
|
|
|
from selenium import webdriver
|
|
from selenium.webdriver.chrome.options import Options
|
|
|
|
|
|
options = Options()
|
|
options.add_experimental_option("debuggerAddress", os.environ.get("WEHAGO_CHROME_DEBUGGER_ADDRESS", "127.0.0.1:9225"))
|
|
driver = webdriver.Chrome(options=options)
|
|
driver.set_script_timeout(10)
|
|
|
|
script = r"""
|
|
const g = window.Grids && window.Grids.realgrid;
|
|
const safe = (fn) => {
|
|
try { return fn(); } catch (e) { return {error: String(e)}; }
|
|
};
|
|
const out = {};
|
|
out.current = safe(() => g && g.getCurrent && g.getCurrent());
|
|
out.fullItemCount = safe(() => g && g.fullItemCount && g.fullItemCount());
|
|
out.columns = safe(() => g && g.getColumns && g.getColumns().map(c => ({
|
|
name: c.name || c.fieldName || c.field,
|
|
fieldName: c.fieldName,
|
|
header: c.header && (c.header.text || c.header)
|
|
})).slice(0, 80));
|
|
out.rows = [];
|
|
if (g) {
|
|
const n = Math.min(30, Number(out.fullItemCount) || 30);
|
|
for (let i = 0; i < n; i += 1) {
|
|
out.rows.push({
|
|
item: i,
|
|
dataRow: safe(() => g.getDataRow(i)),
|
|
values: safe(() => g.getValues(i)),
|
|
display: safe(() => g.getDisplayValuesOfRow ? g.getDisplayValuesOfRow(i) : g.getDisplayValues(i))
|
|
});
|
|
}
|
|
}
|
|
out.visibleText = Array.from(document.querySelectorAll('.rg-data-cell, td[class*=rg-data-cell], [class*=rg-data-cell], td'))
|
|
.map(el => {
|
|
const r = el.getBoundingClientRect();
|
|
return {text: (el.textContent || '').trim(), left: Math.round(r.left), top: Math.round(r.top), width: Math.round(r.width), height: Math.round(r.height)};
|
|
})
|
|
.filter(x => x.text && x.width > 0 && x.height > 0 && x.top > 120)
|
|
.slice(0, 120);
|
|
return out;
|
|
"""
|
|
|
|
print(json.dumps(driver.execute_script(script), ensure_ascii=False, indent=2)[:60000])
|
|
driver.quit()
|