diff --git a/qcc.html b/qcc.html new file mode 100644 index 0000000..1b33f01 --- /dev/null +++ b/qcc.html @@ -0,0 +1,473 @@ + + 杭州中正软通系统集成有限公司 - 企查查 + + + + + + + + + + + + + + +
企业套餐

杭州中正软通系统集成有限公司

存续
复制
小微企业
68
3天前更新
统一社会信用代码:91330105MADFDTUR62
复制
法定代表人 周观武
复制
注册资本:100万元
复制
成立日期: 2024-03-22
复制
企查查行业:信息系统集成服务
所属行业
企查查行业
信息技术
计算机
IT服务
信息系统集成服务(26030301)
国标行业
信息传输、软件和信息技术服务业
软件和信息技术服务业(I65)
企业规模qcc微型
员工人数22024年
简介:杭州中正软通系统集成有限公司成立于2024-03-22,法定代表人为周观武,注册资本为100万元,统一社会信用代码为91330105MADFDTUR62,企业注册地址位于浙江省…展开
复制
qcc
2025-06-30 发布中标公告:杭州中正软通系统集成有限公司云资源租赁服务项目的成交结果公告全部动态
自身风险0关联风险0历史信息0提示信息0
基于企查查收录的公开数据,暂未发现该企业有风险信息
深度风险分析 0债务/债权 0风险关系 0合同违约 竞争风险 0合作风险 0空壳扫描 0

工商信息

发生变更时通知我 
统一社会信用代码 91330105MADFDTUR62
复制
企业名称 杭州中正软通系统集成有限公司
复制
法定代表人 + 登记状态 存续 成立日期 2024-03-22
复制
注册资本 100万元 实缴资本 + - +
组织机构代码 MADFDTUR-6
复制
工商注册号 330105001174959
复制
纳税人识别号 91330105MADFDTUR62
复制
企业类型 + 有限责任公司(自然人投资或控股) 营业期限 + 2024-03-22 + 至 + + 9999-09-09 + 纳税人资质 一般纳税人
人员规模 + 少于50人 参保人数 2(2024年报) 核准日期
所属地区 浙江省杭州市拱墅区
复制
登记机关 杭州市拱墅区市场监督管理局
复制
国标行业
软件和信息技术服务业(I65)
英文名 + Hangzhou Zhongzheng Softcom System Integration Co., Ltd. (自动翻译更新) +
复制
注册地址 浙江省杭州市拱墅区青坤青亭商业中心4幢939室(自主申报)(邮编311000附近企业
经营范围 一般项目:信息系统集成服务;智能控制系统集成;技术服务、技术开发、技术咨询、技术交流、技术转让、技术推广;物联网技术服务;软件销售;信息系统运行维护服务;软件开发;计算机软硬件及辅助设备零售;专业设计服务;电子产品销售;大数据服务;云计算装备技术服务;5G通信技术服务;网络与信息安全软件开发;计算器设备销售;计算器设备制造;通信设备制造(除依法须经批准的项目外,凭营业执照依法自主开展经营活动)。
复制

股东信息2

发生变更时通知我  股权结构 +
+ 导出
序号 + 股东名称 + 持股比例 + 认缴出资额(万元) + 认缴出资日期 + 首次持股日期 +
+ 1 +
周观武
大股东实际控制人受益所有人
90.00%
2034-05-17
+ 2024-03-22 +
+ 2 + 10.00%
2025-03-20
+ 2024-03-22 +

主要人员

发生变更时通知我 
主要人员2历史主要人员
+ 导出
序号 姓名 职务 持股比例
+ 1 +
周观武
法定代表人大股东实际控制人受益所有人
执行董事兼总经理90.00%
+ 2 + 监事10.00%

企业年报1

+ 导出

企业更多维度信息

最终受益人实际控制人疑似关系同业分析
开通SVIP,解锁更多17项专属特权 全部特权
3年SVIP
3600
+ 每天仅需 + 3.28 元 +
2年SVIP
3600
+ 每天仅需 + 4.93 元 +
1年SVIP
1800
+ 每天仅需 + 4.93 元 +
样例
+ VIP会员 +
+ 疑似关系 295 + 同业分析
+ SVIP会员 +
+ 最终受益人 + 实际控制人

数据来源:国家企业信用信息公示系统、全国建筑市场监管公共服务平台等。

+   +
+ + + + + +
+
+
\ No newline at end of file diff --git a/script2-1.js b/script2-1.js index f91df8e..5d4f4f2 100644 --- a/script2-1.js +++ b/script2-1.js @@ -1,5 +1,5 @@ // ==UserScript== -// @name 页面工具按钮 +// @name 爱企查&企查查等 // @namespace http://tampermonkey.net/ // @version 0.2 // @description 在页面右下角添加工具按钮,支持复制源码和解析公司信息 @@ -376,19 +376,116 @@ } } - // QCC解析类 - 预留扩展 - class QCCParser { - constructor() { - // 预留QCC网站解析逻辑 - } - - parseCompanyInfo() { - alert("QCC解析功能即将上线"); - } + // QCC解析类 +class QCCParser { + constructor() { + this.table = null; } + // 初始化表格 + initTable() { + const cominfoNormal = document.querySelector('div.cominfo-normal'); + if (!cominfoNormal) { + alert("未找到企业信息容器"); + return false; + } + + this.table = cominfoNormal.querySelector('table.ntable'); + if (!this.table) { + alert("未找到企业信息表格"); + return false; + } + return true; + } + + // 获取优化后的值 + getOptimizedValue(title) { + const rows = Array.from(this.table.querySelectorAll('tr')); + let value = null; + + rows.forEach(row => { + const th = row.querySelector('th'); + if (th && ToolUtils.cleanText(th.textContent) === title) { + const td = row.querySelector('td'); + if (td) { + value = ToolUtils.cleanText(td.textContent); + } + } + }); + + return value; + } + + // 获取法定代表人 + getLegalRepresentative() { + return this.getOptimizedValue('法定代表人') || this.getOptimizedValue('法人'); + } + + // 获取统一社会信用代码 + getUnifiedSocialCreditCode() { + return this.getOptimizedValue('统一社会信用代码') || this.getOptimizedValue('信用代码'); + } + + // 获取工商注册号 + getBusinessRegistrationNo() { + return this.getOptimizedValue('工商注册号') || this.getOptimizedValue('注册号'); + } + + // 获取组织机构代码 + getOrganizationCode() { + return this.getOptimizedValue('组织机构代码'); + } + + // 获取纳税人识别号 + getTaxpayerId() { + return this.getOptimizedValue('纳税人识别号') || this.getUnifiedSocialCreditCode(); + } + + // 获取参保人数 + getInsuranceNumber() { + const value = this.getOptimizedValue('参保人数'); + return value ? value.replace(/[^0-9]/g, '') + '人' : null; + } + + // 获取核准日期 + getApprovalDate() { + return this.getOptimizedValue('核准日期') || this.getOptimizedValue('成立日期'); + } + + // 解析公司信息主方法 + parseCompanyInfo() { + if (!this.initTable()) return; + + const companyData = { + 企业名称: this.getOptimizedValue('企业名称') || this.getOptimizedValue('公司名称'), + 统一社会信用代码: this.getUnifiedSocialCreditCode(), + 法定代表人: this.getLegalRepresentative(), + 经营状态: this.getOptimizedValue('经营状态'), + 成立日期: this.getOptimizedValue('成立日期'), + 行政区划: this.getOptimizedValue('行政区划'), + 注册资本: this.getOptimizedValue('注册资本'), + 实缴资本: this.getOptimizedValue('实缴资本'), + 企业类型: this.getOptimizedValue('企业类型'), + 所属行业: this.getOptimizedValue('所属行业'), + 工商注册号: this.getBusinessRegistrationNo(), + 组织机构代码: this.getOrganizationCode(), + 纳税人识别号: this.getTaxpayerId(), + 纳税人资质: this.getOptimizedValue('纳税人资质'), + 营业期限: this.getOptimizedValue('营业期限'), + 核准日期: this.getApprovalDate(), + 参保人数: this.getInsuranceNumber(), + 登记机关: this.getOptimizedValue('登记机关'), + 曾用名: this.getOptimizedValue('曾用名'), + 注册地址: this.getOptimizedValue('注册地址'), + 经营范围: this.getOptimizedValue('经营范围'), + }; + + ToolUtils.showResult(companyData); + } +} + // 创建按钮容器 - function createButtonContainer() {{ + function createButtonContainer() { const container = document.createElement("div"); container.id = "tool-container"; Object.assign(container.style, { @@ -526,414 +623,7 @@ parser.parseCompanyInfo(); }); - // 法定代表人提取方法(优化版) - function getLegalRepresentative(table) { - // 方法1:通过特定class组合定位 - const legalElements = Array.from(table.querySelectorAll("td")).filter( - (td) => cleanText(td.textContent) === "法定代表人" - ); - if (legalElements.length > 0) { - const valueCell = legalElements[0].nextElementSibling; - if (valueCell && valueCell.classList.contains("image-text-content")) { - // 从包含头像的复杂结构中提取姓名 - const nameElement = valueCell.querySelector(".person-name-warp a"); - if (nameElement) { - return cleanText(nameElement.textContent); - } - // 备用方案:直接提取单元格文本 - return cleanText(valueCell.textContent); - } - } - - // 方法2:通过标题文本定位(备用方案) - const titleElements = Array.from(table.querySelectorAll("td")).filter( - (td) => td.textContent.includes("法定代表人") - ); - - if (titleElements.length > 0 && titleElements[0].nextElementSibling) { - const valueCell = titleElements[0].nextElementSibling; - return cleanText(valueCell.textContent); - } - - return null; - } - - // 核准日期提取方法(优化版) - function getApprovalDate(table) { - // 方法1:通过特定class组合定位 - const approvalElements = Array.from( - table.querySelectorAll(".poptip-wrap-annual-date") - ).filter((el) => el.textContent.includes("核准日期")); - - if (approvalElements.length > 0) { - const valueCell = approvalElements[0].closest("td").nextElementSibling; - if (valueCell) { - const rawValue = valueCell.textContent - .replace(/[\r\n\t]/g, "") - .trim(); - // 验证日期格式 - if (/^\d{4}-\d{2}-\d{2}$/.test(rawValue)) { - return rawValue; - } - } - } - - // 方法2:通过标题文本定位 - const titleElements = Array.from(table.querySelectorAll("td")).filter( - (td) => cleanText(td.textContent) === "核准日期" - ); - - if (titleElements.length > 0 && titleElements[0].nextElementSibling) { - const valueCell = titleElements[0].nextElementSibling; - const rawValue = cleanText(valueCell.textContent); - if (/^\d{4}-\d{2}-\d{2}$/.test(rawValue)) { - return rawValue; - } - } - - return null; - } - - // 组织机构代码提取方法 - function getOrganizationCode(table) { - // 方法1:通过特定class组合定位 - const orgCodeElements = Array.from( - table.querySelectorAll(".poptip-wrap-org-no") - ).filter((el) => el.textContent.includes("组织机构代码")); - - if (orgCodeElements.length > 0) { - const valueCell = orgCodeElements[0].closest("td").nextElementSibling; - if (valueCell && valueCell.classList.contains("enter-bg")) { - const rawValue = - valueCell.querySelector(".enter-bg-ele")?.textContent || - valueCell.textContent; - return cleanText(rawValue); - } - } - - // 方法2:通过标题文本定位 - const titleElements = Array.from(table.querySelectorAll("td")).filter( - (td) => cleanText(td.textContent) === "组织机构代码" - ); - - if (titleElements.length > 0 && titleElements[0].nextElementSibling) { - const valueCell = titleElements[0].nextElementSibling; - const rawValue = - valueCell.querySelector(".enter-bg-ele")?.textContent || - valueCell.textContent; - return cleanText(rawValue); - } - - return null; - } - - // 纳税人识别号提取方法 - function getTaxpayerId(table) { - // 方法1:尝试直接获取纳税人识别号 - const taxElements = Array.from(table.querySelectorAll("td")).filter( - (td) => cleanText(td.textContent).includes("纳税人识别号") - ); - - if (taxElements.length > 0 && taxElements[0].nextElementSibling) { - const valueCell = taxElements[0].nextElementSibling; - const rawValue = - valueCell.querySelector(".enter-bg-ele")?.textContent || - valueCell.textContent; - return cleanText(rawValue); - } - - // 方法2:使用统一社会信用代码(通常与纳税人识别号相同) - const creditElements = Array.from(table.querySelectorAll("td")).filter( - (td) => cleanText(td.textContent).includes("统一社会信用代码") - ); - - if (creditElements.length > 0 && creditElements[0].nextElementSibling) { - const valueCell = creditElements[0].nextElementSibling; - const rawValue = - valueCell.querySelector(".enter-bg-ele")?.textContent || - valueCell.textContent; - return cleanText(rawValue); - } - - return null; - } - - // 工商注册号提取方法 - function getBusinessRegistrationNo(table) { - const regElements = Array.from(table.querySelectorAll("td")).filter( - (td) => cleanText(td.textContent).includes("工商注册号") - ); - - if (regElements.length > 0 && regElements[0].nextElementSibling) { - const valueCell = regElements[0].nextElementSibling; - const rawValue = - valueCell.querySelector(".enter-bg-ele")?.textContent || - valueCell.textContent; - return cleanText(rawValue); - } - - return null; - } - - // 专用参保人数提取方法 - function getInsuranceNumber(table) { - // 方法1:通过标题和特定class组合定位 - const insuranceElements = Array.from(table.querySelectorAll("td")).filter( - (td) => { - return ( - td.textContent.includes("参保人数") && - td.querySelector(".insurance-info") - ); - } - ); - - if (insuranceElements.length > 0) { - const valueCell = insuranceElements[0].nextElementSibling; - if (!valueCell) return null; - - // 提取纯文本内容,过滤掉img标签 - const rawText = valueCell.textContent.replace(/[\r\n\t]/g, "").trim(); - // 匹配"数字+人"格式 - const match = rawText.match(/(\d+人)/); - return match ? match[0] : null; - } - - // 方法2:备用方案,通过相邻单元格内容定位 - const registrationElements = Array.from( - table.querySelectorAll("td") - ).filter((td) => td.textContent.includes("登记机关")); - - if ( - registrationElements.length > 0 && - registrationElements[0].previousElementSibling - ) { - const valueCell = registrationElements[0].previousElementSibling; - const rawText = valueCell.textContent.replace(/[\r\n\t]/g, "").trim(); - const match = rawText.match(/(\d+人)/); - return match ? match[0] : null; - } - - return null; - } - - // 优化后的统一社会信用代码提取方法 - function getUnifiedSocialCreditCode(table) { - // 方法1:直接通过标题定位 - const codeElements = Array.from(table.querySelectorAll("td")).filter( - (td) => { - return ( - td.textContent.includes("统一社会信用代码") && - td.nextElementSibling && - td.nextElementSibling.classList.contains("table-regCapital-lable") - ); - } - ); - - if (codeElements.length > 0) { - const valueCell = codeElements[0].nextElementSibling; - const rawValue = - valueCell.querySelector(".enter-bg-ele")?.textContent || - valueCell.textContent; - return cleanText(rawValue); - } - - // 方法2:备用方案,通过纳税人识别号获取(通常与统一社会信用代码相同) - const taxElements = Array.from(table.querySelectorAll("td")).filter( - (td) => td.textContent.includes("纳税人识别号") - ); - - if (taxElements.length > 0 && taxElements[0].nextElementSibling) { - const valueCell = taxElements[0].nextElementSibling; - const rawValue = - valueCell.querySelector(".enter-bg-ele")?.textContent || - valueCell.textContent; - return cleanText(rawValue); - } - - return null; - } - - // 通用优化字段提取方法 - function getOptimizedValue(table, title) { - const cells = Array.from(table.querySelectorAll("td")); - const titleCell = cells.find( - (cell) => cleanText(cell.textContent) === title - ); - - if (!titleCell) return null; - - // 查找值单元格(考虑多种DOM结构情况) - let valueCell = titleCell.nextElementSibling; - if (!valueCell) return null; - - // 优先提取.enter-bg-ele内的值,若无则直接取单元格文本 - const valueElement = - valueCell.querySelector(".enter-bg-ele") || - valueCell.querySelector(".addr-enter-bg-ele") || - valueCell; - - return cleanText(valueElement.textContent); - } - - // 文本清理函数 - function cleanText(text) { - return text - .replace(/\s+/g, " ") - .replace(/[\r\n\t]/g, "") - .trim(); - } - - // 辅助函数:显示解析结果 - function showResult(data) { - // 创建弹窗 - const modal = document.createElement("div"); - modal.style.position = "fixed"; - modal.style.top = "50%"; - modal.style.left = "50%"; - modal.style.transform = "translate(-50%, -50%)"; - modal.style.width = "600px"; - modal.style.maxHeight = "80vh"; - modal.style.overflowY = "auto"; - modal.style.backgroundColor = "white"; - modal.style.padding = "20px"; - modal.style.boxShadow = "0 0 10px rgba(0,0,0,0.3)"; - modal.style.zIndex = "10000"; - - // 创建JSON显示区域 - const pre = document.createElement("pre"); - pre.textContent = JSON.stringify(data, null, 2); - pre.style.whiteSpace = "pre-wrap"; - pre.style.wordWrap = "break-word"; - - // 创建复制按钮 - const copyBtn = document.createElement("button"); - copyBtn.textContent = "复制JSON"; - copyBtn.style.marginTop = "10px"; - copyBtn.style.padding = "8px 16px"; - copyBtn.style.backgroundColor = "#52c41a"; - copyBtn.style.color = "white"; - copyBtn.style.border = "none"; - copyBtn.style.borderRadius = "4px"; - copyBtn.style.cursor = "pointer"; - - copyBtn.addEventListener("click", function () { - navigator.clipboard - .writeText(JSON.stringify(data, null, 2)) - .then(() => alert("已复制到剪贴板")) - .catch((err) => alert("复制失败: " + err)); - }); - - // 创建关闭按钮 - const closeBtn = document.createElement("button"); - closeBtn.textContent = "关闭"; - closeBtn.style.marginLeft = "10px"; - closeBtn.style.marginTop = "10px"; - closeBtn.style.padding = "8px 16px"; - closeBtn.style.backgroundColor = "#f5222d"; - closeBtn.style.color = "white"; - closeBtn.style.border = "none"; - closeBtn.style.borderRadius = "4px"; - closeBtn.style.cursor = "pointer"; - - closeBtn.addEventListener("click", function () { - document.body.removeChild(modal); - }); - - // 组装弹窗内容 - modal.innerHTML = '

企业信息解析结果

'; - modal.appendChild(pre); - modal.appendChild(document.createElement("br")); - modal.appendChild(copyBtn); - modal.appendChild(closeBtn); - - document.body.appendChild(modal); - } - - // 解析公司信息函数 - function parseCompanyInfo(html) { - // 创建临时DOM解析器 - const parser = new DOMParser(); - const doc = parser.parseFromString(html, "text/html"); - - // 常见公司信息字段解析 - const companyInfo = { - name: extractText(doc, [ - ".company-name", - ".company-title", - "h1", - "title", - ]), - socialCreditCodeText: extractText(doc, [".social-credit-code-text"]), - - legalRepresentative: extractText(doc, [ - ".legal-representative span.a", - ".legal-person", - '[itemprop="founder"]', - ]), - registeredCapital: extractText(doc, [ - ".registered-capital", - ".capital", - '[itemprop="foundingFund"]', - ]), - registrationDate: extractText(doc, [ - ".registration-date", - ".establish-date", - '[itemprop="foundingDate"]', - ]), - businessScope: extractText(doc, [ - ".business-scope", - ".scope", - '[itemprop="knowsAbout"]', - ]), - address: extractText(doc, [ - ".addr-enter-bg-ele", - ".company-address", - ".address", - '[itemprop="address"]', - ]), - phone: extractText(doc, [ - '[data-log-title="detail-head-phone"] span', - ".company-phone", - ".contact-phone", - '[itemprop="telephone"]', - ]), - }; - - return companyInfo; - } - - // 辅助函数:从多个可能的选择器中提取文本 - function extractText(doc, selectors) { - for (const selector of selectors) { - const element = doc.querySelector(selector); - if (element && element.textContent.trim()) { - return element.textContent.trim(); - } - } - return ""; - } - - // 辅助函数:复制到剪贴板 - function copyToClipboard(content, successMessage) { - const textarea = document.createElement("textarea"); - textarea.value = content; - textarea.style.position = "fixed"; - textarea.style.top = "0"; - textarea.style.left = "0"; - textarea.style.width = "1px"; - textarea.style.height = "1px"; - textarea.style.opacity = "0"; - - document.body.appendChild(textarea); - textarea.select(); - document.execCommand("copy"); - document.body.removeChild(textarea); - - if (successMessage) { - alert(successMessage); - } - } // 添加按钮到容器 container.appendChild(copySourceButton); diff --git a/script2.js b/script2.js index e69de29..b8981b7 100644 --- a/script2.js +++ b/script2.js @@ -0,0 +1,596 @@ +// ==UserScript== +// @name 页面工具按钮 +// @namespace http://tampermonkey.net/ +// @version 0.2 +// @description 在页面右下角添加工具按钮,支持复制源码和解析公司信息 +// @author You +// @match https://www.qcc.com/firm/* +// @match https://aiqicha.baidu.com/company_detail_* +// @grant none +// ==/UserScript== + +(function () { + "use strict"; + + // 创建按钮容器 + function createButtonContainer() { + const container = document.createElement("div"); + container.id = "tool-container"; + Object.assign(container.style, { + position: "fixed", + right: "20px", + bottom: "20px", + zIndex: "9999", + display: "flex", + flexDirection: "column", + gap: "10px", + width: "40px", + height: "40px", + backgroundColor: "#4CAF50", + borderRadius: "50%", + transition: "all 0.3s ease", + overflow: "hidden", + cursor: "move", + }); + + // +号指示器 + const plusSign = document.createElement("div"); + plusSign.textContent = "+"; + Object.assign(plusSign.style, { + color: "white", + fontSize: "24px", + textAlign: "center", + lineHeight: "40px", + width: "100%", + }); + container.appendChild(plusSign); + + // 悬停展开效果 + container.addEventListener("mouseenter", () => { + container.style.width = "150px"; + container.style.height = "auto"; + container.style.borderRadius = "8px"; + }); + + container.addEventListener("mouseleave", () => { + container.style.width = "40px"; + container.style.height = "40px"; + container.style.borderRadius = "50%"; + }); + + // 添加拖动功能 + let isDragging = false; + let offsetX, offsetY; + + // 鼠标按下开始拖动 + container.addEventListener("mousedown", (e) => { + // 只有点击+号区域才允许拖动 + if (e.target === plusSign || e.target === container) { + isDragging = true; + const rect = container.getBoundingClientRect(); + offsetX = e.clientX - rect.left; + offsetY = e.clientY - rect.top; + container.style.cursor = "grabbing"; + // 阻止事件冒泡和默认行为 + e.stopPropagation(); + e.preventDefault(); + } + }); + + // 鼠标移动时更新位置 + document.addEventListener("mousemove", (e) => { + if (!isDragging) return; + container.style.left = e.clientX - offsetX + "px"; + container.style.top = e.clientY - offsetY + "px"; + container.style.right = "auto"; + container.style.bottom = "auto"; + }); + + // 鼠标释放结束拖动 + document.addEventListener("mouseup", () => { + if (isDragging) { + isDragging = false; + container.style.cursor = "move"; + } + }); + // 创建功能按钮 + function createButton(text, onClick) { + const button = document.createElement("button"); + button.textContent = text; + Object.assign(button.style, { + padding: "8px 12px", + border: "none", + borderRadius: "4px", + backgroundColor: "white", + color: "#333", + cursor: "pointer", + width: "100%", + transition: "backgroundColor 0.2s", + }); + button.addEventListener( + "mouseenter", + () => (button.style.backgroundColor = "#f0f0f0") + ); + button.addEventListener( + "mouseleave", + () => (button.style.backgroundColor = "white") + ); + button.addEventListener("click", onClick); + return button; + } + + // 复制源码按钮 + const copySourceButton = createButton("复制源码", () => { + const html = document.documentElement.outerHTML; + + copyToClipboard(html, "HTML源码已复制到剪贴板"); + /* + navigator.clipboard + .writeText(html) + .then(() => { + alert("源码已复制到剪贴板"); + }) + .catch((err) => { + console.error("复制失败:", err); + }); + */ + }); + + // 解析公司信息按钮 + const parseInfoButton = createButton("解析公司信息", () => { + // 这里添加解析公司信息的逻辑 + // 获取目标表格 + const table = document.querySelector("table.zx-detail-basic-table"); + if (!table) { + alert("未找到企业信息表格"); + return; + } + + // 解析表格数据 + const companyData = { + 企业名称: getOptimizedValue(table, "企业名称"), + 统一社会信用代码: getUnifiedSocialCreditCode(table, "统一社会信用代码"), + 法定代表人: getLegalRepresentative(table, "法定代表人"), + 经营状态: getOptimizedValue(table, "经营状态"), + 成立日期: getOptimizedValue(table, "成立日期"), + 行政区划: getOptimizedValue(table, "行政区划"), + 注册资本: getOptimizedValue(table, "注册资本"), + 实缴资本: getOptimizedValue(table, "实缴资本"), + 企业类型: getOptimizedValue(table, "企业类型"), + 所属行业: getOptimizedValue(table, "所属行业"), + 工商注册号: getBusinessRegistrationNo(table, "工商注册号"), + 组织机构代码: getOrganizationCode(table), + 纳税人识别号: getTaxpayerId(table, "纳税人识别号"), + 纳税人资质: getOptimizedValue(table, "纳税人资质"), + 营业期限: getOptimizedValue(table, "营业期限"), + 核准日期: getApprovalDate(table, "核准日期"), + 参保人数: getInsuranceNumber(table, "参保人数"), + 登记机关: getOptimizedValue(table, "登记机关"), + 曾用名: getOptimizedValue(table, "曾用名"), + 注册地址: getOptimizedValue(table, "注册地址"), + 经营范围: getOptimizedValue(table, "经营范围"), + }; + + // 显示解析结果 + showResult(companyData); + }); + + // 法定代表人提取方法(优化版) + function getLegalRepresentative(table) { + // 方法1:通过特定class组合定位 + const legalElements = Array.from(table.querySelectorAll("td")).filter( + (td) => cleanText(td.textContent) === "法定代表人" + ); + + if (legalElements.length > 0) { + const valueCell = legalElements[0].nextElementSibling; + if (valueCell && valueCell.classList.contains("image-text-content")) { + // 从包含头像的复杂结构中提取姓名 + const nameElement = valueCell.querySelector(".person-name-warp a"); + if (nameElement) { + return cleanText(nameElement.textContent); + } + // 备用方案:直接提取单元格文本 + return cleanText(valueCell.textContent); + } + } + + // 方法2:通过标题文本定位(备用方案) + const titleElements = Array.from(table.querySelectorAll("td")).filter( + (td) => td.textContent.includes("法定代表人") + ); + + if (titleElements.length > 0 && titleElements[0].nextElementSibling) { + const valueCell = titleElements[0].nextElementSibling; + return cleanText(valueCell.textContent); + } + + return null; + } + + // 核准日期提取方法(优化版) + function getApprovalDate(table) { + // 方法1:通过特定class组合定位 + const approvalElements = Array.from( + table.querySelectorAll(".poptip-wrap-annual-date") + ).filter((el) => el.textContent.includes("核准日期")); + + if (approvalElements.length > 0) { + const valueCell = approvalElements[0].closest("td").nextElementSibling; + if (valueCell) { + const rawValue = valueCell.textContent + .replace(/[\r\n\t]/g, "") + .trim(); + // 验证日期格式 + if (/^\d{4}-\d{2}-\d{2}$/.test(rawValue)) { + return rawValue; + } + } + } + + // 方法2:通过标题文本定位 + const titleElements = Array.from(table.querySelectorAll("td")).filter( + (td) => cleanText(td.textContent) === "核准日期" + ); + + if (titleElements.length > 0 && titleElements[0].nextElementSibling) { + const valueCell = titleElements[0].nextElementSibling; + const rawValue = cleanText(valueCell.textContent); + if (/^\d{4}-\d{2}-\d{2}$/.test(rawValue)) { + return rawValue; + } + } + + return null; + } + + // 组织机构代码提取方法 + function getOrganizationCode(table) { + // 方法1:通过特定class组合定位 + const orgCodeElements = Array.from( + table.querySelectorAll(".poptip-wrap-org-no") + ).filter((el) => el.textContent.includes("组织机构代码")); + + if (orgCodeElements.length > 0) { + const valueCell = orgCodeElements[0].closest("td").nextElementSibling; + if (valueCell && valueCell.classList.contains("enter-bg")) { + const rawValue = + valueCell.querySelector(".enter-bg-ele")?.textContent || + valueCell.textContent; + return cleanText(rawValue); + } + } + + // 方法2:通过标题文本定位 + const titleElements = Array.from(table.querySelectorAll("td")).filter( + (td) => cleanText(td.textContent) === "组织机构代码" + ); + + if (titleElements.length > 0 && titleElements[0].nextElementSibling) { + const valueCell = titleElements[0].nextElementSibling; + const rawValue = + valueCell.querySelector(".enter-bg-ele")?.textContent || + valueCell.textContent; + return cleanText(rawValue); + } + + return null; + } + + // 纳税人识别号提取方法 + function getTaxpayerId(table) { + // 方法1:尝试直接获取纳税人识别号 + const taxElements = Array.from(table.querySelectorAll("td")).filter( + (td) => cleanText(td.textContent).includes("纳税人识别号") + ); + + if (taxElements.length > 0 && taxElements[0].nextElementSibling) { + const valueCell = taxElements[0].nextElementSibling; + const rawValue = + valueCell.querySelector(".enter-bg-ele")?.textContent || + valueCell.textContent; + return cleanText(rawValue); + } + + // 方法2:使用统一社会信用代码(通常与纳税人识别号相同) + const creditElements = Array.from(table.querySelectorAll("td")).filter( + (td) => cleanText(td.textContent).includes("统一社会信用代码") + ); + + if (creditElements.length > 0 && creditElements[0].nextElementSibling) { + const valueCell = creditElements[0].nextElementSibling; + const rawValue = + valueCell.querySelector(".enter-bg-ele")?.textContent || + valueCell.textContent; + return cleanText(rawValue); + } + + return null; + } + + // 工商注册号提取方法 + function getBusinessRegistrationNo(table) { + const regElements = Array.from(table.querySelectorAll("td")).filter( + (td) => cleanText(td.textContent).includes("工商注册号") + ); + + if (regElements.length > 0 && regElements[0].nextElementSibling) { + const valueCell = regElements[0].nextElementSibling; + const rawValue = + valueCell.querySelector(".enter-bg-ele")?.textContent || + valueCell.textContent; + return cleanText(rawValue); + } + + return null; + } + + // 专用参保人数提取方法 + function getInsuranceNumber(table) { + // 方法1:通过标题和特定class组合定位 + const insuranceElements = Array.from(table.querySelectorAll("td")).filter( + (td) => { + return ( + td.textContent.includes("参保人数") && + td.querySelector(".insurance-info") + ); + } + ); + + if (insuranceElements.length > 0) { + const valueCell = insuranceElements[0].nextElementSibling; + if (!valueCell) return null; + + // 提取纯文本内容,过滤掉img标签 + const rawText = valueCell.textContent.replace(/[\r\n\t]/g, "").trim(); + // 匹配"数字+人"格式 + const match = rawText.match(/(\d+人)/); + return match ? match[0] : null; + } + + // 方法2:备用方案,通过相邻单元格内容定位 + const registrationElements = Array.from( + table.querySelectorAll("td") + ).filter((td) => td.textContent.includes("登记机关")); + + if ( + registrationElements.length > 0 && + registrationElements[0].previousElementSibling + ) { + const valueCell = registrationElements[0].previousElementSibling; + const rawText = valueCell.textContent.replace(/[\r\n\t]/g, "").trim(); + const match = rawText.match(/(\d+人)/); + return match ? match[0] : null; + } + + return null; + } + + // 优化后的统一社会信用代码提取方法 + function getUnifiedSocialCreditCode(table) { + // 方法1:直接通过标题定位 + const codeElements = Array.from(table.querySelectorAll("td")).filter( + (td) => { + return ( + td.textContent.includes("统一社会信用代码") && + td.nextElementSibling && + td.nextElementSibling.classList.contains("table-regCapital-lable") + ); + } + ); + + if (codeElements.length > 0) { + const valueCell = codeElements[0].nextElementSibling; + const rawValue = + valueCell.querySelector(".enter-bg-ele")?.textContent || + valueCell.textContent; + return cleanText(rawValue); + } + + // 方法2:备用方案,通过纳税人识别号获取(通常与统一社会信用代码相同) + const taxElements = Array.from(table.querySelectorAll("td")).filter( + (td) => td.textContent.includes("纳税人识别号") + ); + + if (taxElements.length > 0 && taxElements[0].nextElementSibling) { + const valueCell = taxElements[0].nextElementSibling; + const rawValue = + valueCell.querySelector(".enter-bg-ele")?.textContent || + valueCell.textContent; + return cleanText(rawValue); + } + + return null; + } + + // 通用优化字段提取方法 + function getOptimizedValue(table, title) { + const cells = Array.from(table.querySelectorAll("td")); + const titleCell = cells.find( + (cell) => cleanText(cell.textContent) === title + ); + + if (!titleCell) return null; + + // 查找值单元格(考虑多种DOM结构情况) + let valueCell = titleCell.nextElementSibling; + if (!valueCell) return null; + + // 优先提取.enter-bg-ele内的值,若无则直接取单元格文本 + const valueElement = + valueCell.querySelector(".enter-bg-ele") || + valueCell.querySelector(".addr-enter-bg-ele") || + valueCell; + + return cleanText(valueElement.textContent); + } + + // 文本清理函数 + function cleanText(text) { + return text + .replace(/\s+/g, " ") + .replace(/[\r\n\t]/g, "") + .trim(); + } + + // 辅助函数:显示解析结果 + function showResult(data) { + // 创建弹窗 + const modal = document.createElement("div"); + modal.style.position = "fixed"; + modal.style.top = "50%"; + modal.style.left = "50%"; + modal.style.transform = "translate(-50%, -50%)"; + modal.style.width = "600px"; + modal.style.maxHeight = "80vh"; + modal.style.overflowY = "auto"; + modal.style.backgroundColor = "white"; + modal.style.padding = "20px"; + modal.style.boxShadow = "0 0 10px rgba(0,0,0,0.3)"; + modal.style.zIndex = "10000"; + + // 创建JSON显示区域 + const pre = document.createElement("pre"); + pre.textContent = JSON.stringify(data, null, 2); + pre.style.whiteSpace = "pre-wrap"; + pre.style.wordWrap = "break-word"; + + // 创建复制按钮 + const copyBtn = document.createElement("button"); + copyBtn.textContent = "复制JSON"; + copyBtn.style.marginTop = "10px"; + copyBtn.style.padding = "8px 16px"; + copyBtn.style.backgroundColor = "#52c41a"; + copyBtn.style.color = "white"; + copyBtn.style.border = "none"; + copyBtn.style.borderRadius = "4px"; + copyBtn.style.cursor = "pointer"; + + copyBtn.addEventListener("click", function () { + navigator.clipboard + .writeText(JSON.stringify(data, null, 2)) + .then(() => alert("已复制到剪贴板")) + .catch((err) => alert("复制失败: " + err)); + }); + + // 创建关闭按钮 + const closeBtn = document.createElement("button"); + closeBtn.textContent = "关闭"; + closeBtn.style.marginLeft = "10px"; + closeBtn.style.marginTop = "10px"; + closeBtn.style.padding = "8px 16px"; + closeBtn.style.backgroundColor = "#f5222d"; + closeBtn.style.color = "white"; + closeBtn.style.border = "none"; + closeBtn.style.borderRadius = "4px"; + closeBtn.style.cursor = "pointer"; + + closeBtn.addEventListener("click", function () { + document.body.removeChild(modal); + }); + + // 组装弹窗内容 + modal.innerHTML = '

企业信息解析结果

'; + modal.appendChild(pre); + modal.appendChild(document.createElement("br")); + modal.appendChild(copyBtn); + modal.appendChild(closeBtn); + + document.body.appendChild(modal); + } + + // 解析公司信息函数 + function parseCompanyInfo(html) { + // 创建临时DOM解析器 + const parser = new DOMParser(); + const doc = parser.parseFromString(html, "text/html"); + + // 常见公司信息字段解析 + const companyInfo = { + name: extractText(doc, [ + ".company-name", + ".company-title", + "h1", + "title", + ]), + socialCreditCodeText: extractText(doc, [".social-credit-code-text"]), + + legalRepresentative: extractText(doc, [ + ".legal-representative span.a", + ".legal-person", + '[itemprop="founder"]', + ]), + registeredCapital: extractText(doc, [ + ".registered-capital", + ".capital", + '[itemprop="foundingFund"]', + ]), + registrationDate: extractText(doc, [ + ".registration-date", + ".establish-date", + '[itemprop="foundingDate"]', + ]), + businessScope: extractText(doc, [ + ".business-scope", + ".scope", + '[itemprop="knowsAbout"]', + ]), + address: extractText(doc, [ + ".addr-enter-bg-ele", + ".company-address", + ".address", + '[itemprop="address"]', + ]), + phone: extractText(doc, [ + '[data-log-title="detail-head-phone"] span', + ".company-phone", + ".contact-phone", + '[itemprop="telephone"]', + ]), + }; + + return companyInfo; + } + + // 辅助函数:从多个可能的选择器中提取文本 + function extractText(doc, selectors) { + for (const selector of selectors) { + const element = doc.querySelector(selector); + if (element && element.textContent.trim()) { + return element.textContent.trim(); + } + } + return ""; + } + + // 辅助函数:复制到剪贴板 + function copyToClipboard(content, successMessage) { + const textarea = document.createElement("textarea"); + textarea.value = content; + textarea.style.position = "fixed"; + textarea.style.top = "0"; + textarea.style.left = "0"; + textarea.style.width = "1px"; + textarea.style.height = "1px"; + textarea.style.opacity = "0"; + + document.body.appendChild(textarea); + textarea.select(); + document.execCommand("copy"); + document.body.removeChild(textarea); + + if (successMessage) { + alert(successMessage); + } + } + + // 添加按钮到容器 + container.appendChild(copySourceButton); + container.appendChild(parseInfoButton); + + document.body.appendChild(container); + } + + // 页面加载完成后创建按钮 + window.addEventListener("load", createButtonContainer); +})(); \ No newline at end of file