init
This commit is contained in:
1625
htmlheadstyle class=vjs-styles-defa.txt
Normal file
1625
htmlheadstyle class=vjs-styles-defa.txt
Normal file
File diff suppressed because one or more lines are too long
633
script.txt
Normal file
633
script.txt
Normal file
@@ -0,0 +1,633 @@
|
|||||||
|
|
||||||
|
// ==UserScript==
|
||||||
|
// @name View HTML Source & Company Info
|
||||||
|
// @namespace http://tampermonkey.net/
|
||||||
|
// @version 1.0
|
||||||
|
// @description 在所有网页添加按钮,显示当前HTML源码并可复制
|
||||||
|
// @author Your Name *://*/*,
|
||||||
|
// @match https://aiqicha.baidu.com/*
|
||||||
|
// @grant none
|
||||||
|
// ==/UserScript==
|
||||||
|
(function() {
|
||||||
|
'use strict';
|
||||||
|
// 创建主容器(修改版)
|
||||||
|
function createButtonContainer() {
|
||||||
|
const container = document.createElement('div');
|
||||||
|
container.id = 'tm-button-container';
|
||||||
|
container.style.position = 'fixed';
|
||||||
|
container.style.right = '20px';
|
||||||
|
container.style.bottom = '20px';
|
||||||
|
container.style.zIndex = '9999';
|
||||||
|
container.style.display = 'flex';
|
||||||
|
container.style.flexDirection = 'column';
|
||||||
|
container.style.gap = '10px';
|
||||||
|
container.style.transition = 'all 0.3s ease';
|
||||||
|
container.style.width = '40px'; // 初始宽度设为+号大小
|
||||||
|
container.style.overflow = 'hidden';
|
||||||
|
container.style.borderRadius = '50%';
|
||||||
|
container.style.backgroundColor = 'rgba(0,0,0,0.7)';
|
||||||
|
container.style.padding = '10px';
|
||||||
|
container.style.cursor = 'move';
|
||||||
|
|
||||||
|
// 添加悬浮效果
|
||||||
|
container.addEventListener('mouseenter', function() {
|
||||||
|
this.style.width = 'auto';
|
||||||
|
this.style.borderRadius = '5px';
|
||||||
|
});
|
||||||
|
|
||||||
|
container.addEventListener('mouseleave', function() {
|
||||||
|
this.style.width = '40px';
|
||||||
|
this.style.borderRadius = '50%';
|
||||||
|
});
|
||||||
|
|
||||||
|
// 添加拖动功能
|
||||||
|
let isDragging = false;
|
||||||
|
let offsetX, offsetY;
|
||||||
|
|
||||||
|
container.addEventListener('mousedown', function(e) {
|
||||||
|
isDragging = true;
|
||||||
|
offsetX = e.clientX - this.getBoundingClientRect().left;
|
||||||
|
offsetY = e.clientY - this.getBoundingClientRect().top;
|
||||||
|
this.style.cursor = 'grabbing';
|
||||||
|
});
|
||||||
|
|
||||||
|
document.addEventListener('mousemove', function(e) {
|
||||||
|
if (!isDragging) return;
|
||||||
|
const container = document.getElementById('tm-button-container');
|
||||||
|
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', function() {
|
||||||
|
isDragging = false;
|
||||||
|
document.getElementById('tm-button-container').style.cursor = 'move';
|
||||||
|
});
|
||||||
|
|
||||||
|
// 创建+号指示器
|
||||||
|
const plusIndicator = document.createElement('div');
|
||||||
|
plusIndicator.textContent = '+';
|
||||||
|
plusIndicator.style.color = 'white';
|
||||||
|
plusIndicator.style.fontSize = '24px';
|
||||||
|
plusIndicator.style.textAlign = 'center';
|
||||||
|
plusIndicator.style.marginBottom = '10px';
|
||||||
|
plusIndicator.style.cursor = 'pointer';
|
||||||
|
|
||||||
|
// 点击+号也可以展开
|
||||||
|
plusIndicator.addEventListener('click', function() {
|
||||||
|
const container = document.getElementById('tm-button-container');
|
||||||
|
if (container.style.width === '40px') {
|
||||||
|
container.style.width = 'auto';
|
||||||
|
container.style.borderRadius = '5px';
|
||||||
|
} else {
|
||||||
|
container.style.width = '40px';
|
||||||
|
container.style.borderRadius = '50%';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
container.appendChild(plusIndicator);
|
||||||
|
document.body.appendChild(container);
|
||||||
|
return container;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建按钮(修改版)
|
||||||
|
function createButton(text, onClick) {
|
||||||
|
const button = document.createElement('button');
|
||||||
|
button.textContent = text;
|
||||||
|
button.style.backgroundColor = 'transparent';
|
||||||
|
button.style.color = 'white';
|
||||||
|
button.style.padding = '8px 12px';
|
||||||
|
button.style.border = '1px solid white';
|
||||||
|
button.style.borderRadius = '4px';
|
||||||
|
button.style.cursor = 'pointer';
|
||||||
|
button.style.marginBottom = '5px';
|
||||||
|
button.style.width = '100%';
|
||||||
|
button.style.transition = 'all 0.2s ease';
|
||||||
|
|
||||||
|
|
||||||
|
button.addEventListener('mouseenter', function() {
|
||||||
|
this.style.backgroundColor = 'rgba(255,255,255,0.2)';
|
||||||
|
});
|
||||||
|
|
||||||
|
button.addEventListener('mouseleave', function() {
|
||||||
|
this.style.backgroundColor = 'transparent';
|
||||||
|
});
|
||||||
|
|
||||||
|
button.addEventListener('click', onClick);
|
||||||
|
|
||||||
|
return button;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建显示源码的按钮
|
||||||
|
function createSourceButton(container) {
|
||||||
|
const buttton = createButton('显示HTML源码',function(){
|
||||||
|
const html = document.documentElement.outerHTML;
|
||||||
|
copyToClipboard(html, 'HTML源码已复制到剪贴板');
|
||||||
|
})
|
||||||
|
container.appendChild(buttton)
|
||||||
|
return;
|
||||||
|
const button = document.createElement('button');
|
||||||
|
button.textContent = '显示HTML源码';
|
||||||
|
button.style.backgroundColor = '#4CAF50';
|
||||||
|
button.style.color = 'white';
|
||||||
|
button.style.padding = '10px 15px';
|
||||||
|
button.style.border = 'none';
|
||||||
|
button.style.borderRadius = '5px';
|
||||||
|
button.style.cursor = 'pointer';
|
||||||
|
button.style.boxShadow = '0 2px 5px rgba(0,0,0,0.2)';
|
||||||
|
|
||||||
|
button.addEventListener('click', function() {
|
||||||
|
const html = document.documentElement.outerHTML;
|
||||||
|
copyToClipboard(html, 'HTML源码已复制到剪贴板');
|
||||||
|
});
|
||||||
|
|
||||||
|
container.appendChild(button);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建解析公司信息的按钮
|
||||||
|
function createParserButton(container) {
|
||||||
|
const button = createButton('解析公司信息',function(){
|
||||||
|
// 获取目标表格
|
||||||
|
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);
|
||||||
|
})
|
||||||
|
container.appendChild(button)
|
||||||
|
|
||||||
|
return;
|
||||||
|
//const button = document.createElement('button');
|
||||||
|
button.textContent = '解析公司信息';
|
||||||
|
button.style.backgroundColor = '#2196F3';
|
||||||
|
button.style.color = 'white';
|
||||||
|
button.style.padding = '10px 15px';
|
||||||
|
button.style.border = 'none';
|
||||||
|
button.style.borderRadius = '5px';
|
||||||
|
button.style.cursor = 'pointer';
|
||||||
|
button.style.boxShadow = '0 2px 5px rgba(0,0,0,0.2)';
|
||||||
|
|
||||||
|
button.addEventListener('click', function() {
|
||||||
|
try {
|
||||||
|
const companyInfo = parseCompanyInfo(document.documentElement.outerHTML);
|
||||||
|
const jsonStr = JSON.stringify(companyInfo, null, 2);
|
||||||
|
copyToClipboard(jsonStr, '公司信息已复制到剪贴板');
|
||||||
|
} catch (e) {
|
||||||
|
alert('解析失败: ' + e.message);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取目标表格
|
||||||
|
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);
|
||||||
|
});
|
||||||
|
|
||||||
|
container.appendChild(button);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 法定代表人提取方法(优化版)
|
||||||
|
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 = '<h2 style="margin-top: 0;">企业信息解析结果</h2>';
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 初始化
|
||||||
|
const container = createButtonContainer();
|
||||||
|
createSourceButton(container);
|
||||||
|
createParserButton(container);
|
||||||
|
|
||||||
|
})();
|
||||||
642
script1.txt
Normal file
642
script1.txt
Normal file
@@ -0,0 +1,642 @@
|
|||||||
|
|
||||||
|
// ==UserScript==
|
||||||
|
// @name View HTML Source & Company Info
|
||||||
|
// @namespace http://tampermonkey.net/
|
||||||
|
// @version 1.0
|
||||||
|
// @description 在所有网页添加按钮,显示当前HTML源码并可复制
|
||||||
|
// @author Your Name *://*/*,
|
||||||
|
// @match https://aiqicha.baidu.com/*
|
||||||
|
// @grant none
|
||||||
|
// ==/UserScript==
|
||||||
|
(function() {
|
||||||
|
'use strict';
|
||||||
|
// 创建主容器(修改版)
|
||||||
|
function createButtonContainer() {
|
||||||
|
const container = document.createElement('div');
|
||||||
|
container.id = 'tm-button-container';
|
||||||
|
container.style.position = 'fixed';
|
||||||
|
container.style.right = '20px';
|
||||||
|
container.style.bottom = '20px';
|
||||||
|
container.style.zIndex = '9999';
|
||||||
|
container.style.display = 'flex';
|
||||||
|
container.style.flexDirection = 'column';
|
||||||
|
container.style.gap = '10px';
|
||||||
|
container.style.transition = 'all 0.3s ease';
|
||||||
|
container.style.width = '40px';
|
||||||
|
container.style.height = '40px';
|
||||||
|
container.style.overflow = 'hidden';
|
||||||
|
container.style.borderRadius = '50%';
|
||||||
|
container.style.backgroundColor = 'rgba(0,0,0,0.7)';
|
||||||
|
container.style.padding = '0';
|
||||||
|
container.style.cursor = 'move';
|
||||||
|
container.style.alignItems = 'center';
|
||||||
|
container.style.justifyContent = 'center';
|
||||||
|
|
||||||
|
// 创建+号指示器
|
||||||
|
const plusIndicator = document.createElement('div');
|
||||||
|
plusIndicator.textContent = '+';
|
||||||
|
plusIndicator.style.color = 'white';
|
||||||
|
plusIndicator.style.fontSize = '24px';
|
||||||
|
plusIndicator.style.textAlign = 'center';
|
||||||
|
plusIndicator.style.cursor = 'pointer';
|
||||||
|
plusIndicator.style.width = '100%';
|
||||||
|
plusIndicator.style.height = '100%';
|
||||||
|
plusIndicator.style.display = 'flex';
|
||||||
|
plusIndicator.style.alignItems = 'center';
|
||||||
|
plusIndicator.style.justifyContent = 'center';
|
||||||
|
|
||||||
|
// 存储按钮引用
|
||||||
|
let buttons = [];
|
||||||
|
|
||||||
|
// 鼠标悬停加号时显示按钮
|
||||||
|
plusIndicator.addEventListener('mouseenter', function() {
|
||||||
|
container.style.width = 'auto';
|
||||||
|
container.style.height = 'auto';
|
||||||
|
container.style.padding = '10px';
|
||||||
|
container.style.borderRadius = '5px';
|
||||||
|
buttons.forEach(btn => btn.style.display = 'block');
|
||||||
|
});
|
||||||
|
|
||||||
|
// 鼠标移出容器时隐藏按钮
|
||||||
|
container.addEventListener('mouseleave', function() {
|
||||||
|
container.style.width = '40px';
|
||||||
|
container.style.height = '40px';
|
||||||
|
container.style.padding = '0';
|
||||||
|
container.style.borderRadius = '50%';
|
||||||
|
buttons.forEach(btn => btn.style.display = 'none');
|
||||||
|
});
|
||||||
|
|
||||||
|
// 点击+号也可以切换按钮显示
|
||||||
|
plusIndicator.addEventListener('click', function() {
|
||||||
|
const isExpanded = container.style.width !== '40px';
|
||||||
|
if (isExpanded) {
|
||||||
|
container.style.width = '40px';
|
||||||
|
container.style.height = '40px';
|
||||||
|
container.style.padding = '0';
|
||||||
|
container.style.borderRadius = '50%';
|
||||||
|
buttons.forEach(btn => btn.style.display = 'none');
|
||||||
|
} else {
|
||||||
|
container.style.width = 'auto';
|
||||||
|
container.style.height = 'auto';
|
||||||
|
container.style.padding = '10px';
|
||||||
|
container.style.borderRadius = '5px';
|
||||||
|
buttons.forEach(btn => btn.style.display = 'block');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// 添加拖动功能...
|
||||||
|
|
||||||
|
container.appendChild(plusIndicator);
|
||||||
|
document.body.appendChild(container);
|
||||||
|
|
||||||
|
// 返回容器和按钮引用存储
|
||||||
|
return {
|
||||||
|
container,
|
||||||
|
addButton: function(button) {
|
||||||
|
button.style.display = 'none'; // 初始隐藏按钮
|
||||||
|
buttons.push(button);
|
||||||
|
container.appendChild(button);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建按钮(修改版)
|
||||||
|
function createButton(text, onClick) {
|
||||||
|
const button = document.createElement('button');
|
||||||
|
button.textContent = text;
|
||||||
|
button.style.backgroundColor = 'transparent';
|
||||||
|
button.style.color = 'white';
|
||||||
|
button.style.padding = '8px 12px';
|
||||||
|
button.style.border = '1px solid white';
|
||||||
|
button.style.borderRadius = '4px';
|
||||||
|
button.style.cursor = 'pointer';
|
||||||
|
button.style.marginBottom = '5px';
|
||||||
|
button.style.width = '100%';
|
||||||
|
button.style.transition = 'all 0.2s ease';
|
||||||
|
button.style.minWidth = '120px';
|
||||||
|
|
||||||
|
button.addEventListener('mouseenter', function() {
|
||||||
|
this.style.backgroundColor = 'rgba(255,255,255,0.2)';
|
||||||
|
});
|
||||||
|
|
||||||
|
button.addEventListener('mouseleave', function() {
|
||||||
|
this.style.backgroundColor = 'transparent';
|
||||||
|
});
|
||||||
|
|
||||||
|
button.addEventListener('click', onClick);
|
||||||
|
|
||||||
|
return button;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建显示源码的按钮
|
||||||
|
function createSourceButton(container) {
|
||||||
|
const buttton = createButton('显示HTML源码',function(){
|
||||||
|
const html = document.documentElement.outerHTML;
|
||||||
|
copyToClipboard(html, 'HTML源码已复制到剪贴板');
|
||||||
|
})
|
||||||
|
//container.appendChild(buttton)
|
||||||
|
return;
|
||||||
|
const button = document.createElement('button');
|
||||||
|
button.textContent = '显示HTML源码';
|
||||||
|
button.style.backgroundColor = '#4CAF50';
|
||||||
|
button.style.color = 'white';
|
||||||
|
button.style.padding = '10px 15px';
|
||||||
|
button.style.border = 'none';
|
||||||
|
button.style.borderRadius = '5px';
|
||||||
|
button.style.cursor = 'pointer';
|
||||||
|
button.style.boxShadow = '0 2px 5px rgba(0,0,0,0.2)';
|
||||||
|
|
||||||
|
button.addEventListener('click', function() {
|
||||||
|
const html = document.documentElement.outerHTML;
|
||||||
|
copyToClipboard(html, 'HTML源码已复制到剪贴板');
|
||||||
|
});
|
||||||
|
|
||||||
|
container.appendChild(button);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建解析公司信息的按钮
|
||||||
|
function createParserButton(container) {
|
||||||
|
const button = createButton('解析公司信息',function(){
|
||||||
|
// 获取目标表格
|
||||||
|
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);
|
||||||
|
})
|
||||||
|
container.appendChild(button)
|
||||||
|
|
||||||
|
return;
|
||||||
|
//const button = document.createElement('button');
|
||||||
|
button.textContent = '解析公司信息';
|
||||||
|
button.style.backgroundColor = '#2196F3';
|
||||||
|
button.style.color = 'white';
|
||||||
|
button.style.padding = '10px 15px';
|
||||||
|
button.style.border = 'none';
|
||||||
|
button.style.borderRadius = '5px';
|
||||||
|
button.style.cursor = 'pointer';
|
||||||
|
button.style.boxShadow = '0 2px 5px rgba(0,0,0,0.2)';
|
||||||
|
|
||||||
|
button.addEventListener('click', function() {
|
||||||
|
try {
|
||||||
|
const companyInfo = parseCompanyInfo(document.documentElement.outerHTML);
|
||||||
|
const jsonStr = JSON.stringify(companyInfo, null, 2);
|
||||||
|
copyToClipboard(jsonStr, '公司信息已复制到剪贴板');
|
||||||
|
} catch (e) {
|
||||||
|
alert('解析失败: ' + e.message);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取目标表格
|
||||||
|
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);
|
||||||
|
});
|
||||||
|
|
||||||
|
container.appendChild(button);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 法定代表人提取方法(优化版)
|
||||||
|
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 = '<h2 style="margin-top: 0;">企业信息解析结果</h2>';
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 初始化代码修改
|
||||||
|
const {container, addButton} = createButtonContainer();
|
||||||
|
addButton(createSourceButton());
|
||||||
|
addButton(createParserButton());
|
||||||
|
|
||||||
|
})();
|
||||||
69
杭州奥杰装饰-basic.txt
Normal file
69
杭州奥杰装饰-basic.txt
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
<table data-v-734afde3="" class="zx-detail-basic-table"><tbody data-v-734afde3=""><tr data-v-734afde3=""><td data-v-734afde3="" class="table-regCapital-title">企业名称</td><td data-v-734afde3="" class="table-regCapital-lable enter-bg"><span data-v-734afde3="" class="enter-bg-ele">
|
||||||
|
杭州奥杰装饰工程有限公司
|
||||||
|
</span><!----></td><td data-v-734afde3="" class="table-regCapital-title"><div data-v-734afde3="" class="poptip-wrap poptip-wrap-unified-code ivu-poptip"><div class="ivu-poptip-rel">
|
||||||
|
统一社会信用代码
|
||||||
|
<span data-v-734afde3="" class="poptip-title icon-question"></span></div> <div class="ivu-poptip-popper" style="width: 400px; display: none; position: absolute; will-change: top, left; top: 120px; left: 570px;" x-placement="bottom-start"><div class="ivu-poptip-content"><div class="ivu-poptip-arrow"></div> <!----> <div class="ivu-poptip-inner"><!----> <div class="ivu-poptip-body"><div class="ivu-poptip-body-content"><div data-v-734afde3="" class="poptip-content"><p data-v-734afde3="" class="poptip-line"><span data-v-734afde3="" class="title"></span>一般指法人和其他组织统一社会信用代码,相当于让法人和其他组织拥有了一个全国统一的“身份证号”。
|
||||||
|
</p><p data-v-734afde3="" class="poptip-line"><span data-v-734afde3="" class="title"></span>标准规定统一社会信用代码用18位阿拉伯数字或大写英文字母表示,
|
||||||
|
分别是1位登记管理部门代码、1位机构类别代码、6位登记管理机关行政区划码、9位主体标识码、1位校验码。
|
||||||
|
</p></div></div></div></div></div></div></div></td><td data-v-734afde3="" class="table-regCapital-lable enter-bg"><span data-v-734afde3="" class="enter-bg-ele">
|
||||||
|
9133011031131201XU
|
||||||
|
</span><!----></td></tr><tr data-v-734afde3=""><td data-v-734afde3="" rowspan="1">
|
||||||
|
法定代表人
|
||||||
|
<div data-v-734afde3="" class="poptip-wrap ivu-poptip"><div class="ivu-poptip-rel"><span data-v-734afde3="" class="poptip-title icon-question"></span></div> <!----></div></td><td data-v-734afde3="" rowspan="1" class="image-text-content"><div data-v-734afde3="" class="legal-person-portrait"><div data-v-734afde3="" class="fate-image-container middle"><div class="img-logo"><img src="https://xinpub.cdn.bcebos.com/aiqicha/default-person-logo.png?x-bce-process=image/resize,m_lfit,w_112"></div></div></div><div data-v-734afde3="" class="title portrait-text"><div data-v-734afde3="" class="person-name-warp"><a data-v-734afde3="" href="/person?personId=564d36205bb55280b70955c86477a4fc" target="_blank" data-log-an="basic-business" data-log-title="basic-business-legalPerson" class="ellipsis-line-1">
|
||||||
|
曾显军
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<!----></div><a data-v-734afde3="" href="/person?personId=564d36205bb55280b70955c86477a4fc&subtab=personal-allenterprises&entry=2410002" target="_blank" data-log-an="basic-business" data-log-title="basic-business-compNum" class="extra-title text-orange-important">
|
||||||
|
TA有<span data-v-734afde3="" class="text-orange">5</span>家企业<i data-v-734afde3="" class="ivu-icon ivu-icon-ios-arrow-forward"></i></a></div></td><td data-v-734afde3=""><span data-v-734afde3="">经营状态</span></td><td data-v-734afde3=""><span data-v-734afde3="">开业</span></td></tr><!----><tr data-v-734afde3=""><td data-v-734afde3="">成立日期</td><td data-v-734afde3="">
|
||||||
|
2014-08-05
|
||||||
|
</td><td data-v-734afde3="">行政区划</td><td data-v-734afde3="">浙江省杭州市余杭区</td></tr><tr data-v-734afde3=""><td data-v-734afde3="" class="table-regCapital-title">
|
||||||
|
注册资本
|
||||||
|
<div data-v-734afde3="" class="poptip-wrap ivu-poptip"><div class="ivu-poptip-rel"><span data-v-734afde3="" class="poptip-title icon-question"></span></div> <!----></div></td><td data-v-734afde3="" class="table-regCapital-lable">
|
||||||
|
200万(元)
|
||||||
|
</td><td data-v-734afde3="" class="table-paidinCapital-title">
|
||||||
|
实缴资本
|
||||||
|
<div data-v-734afde3="" class="poptip-wrap ivu-poptip"><div class="ivu-poptip-rel"><span data-v-734afde3="" class="poptip-title icon-question"></span></div> <!----></div></td><td data-v-734afde3="" class="table-paidinCapital-lable">
|
||||||
|
200万(元)
|
||||||
|
</td></tr><tr data-v-734afde3=""><td data-v-734afde3="" class="table-regCapital-title">企业类型</td><td data-v-734afde3="" class="table-regCapital-lable">
|
||||||
|
有限责任公司(自然人独资)
|
||||||
|
</td><td data-v-734afde3="" class="table-paidinCapital-title">所属行业</td><td data-v-734afde3="" class="table-paidinCapital-lable">
|
||||||
|
批发业
|
||||||
|
</td></tr><tr data-v-734afde3=""><td data-v-734afde3="">
|
||||||
|
工商注册号
|
||||||
|
<div data-v-734afde3="" class="poptip-wrap ivu-poptip"><div class="ivu-poptip-rel"><span data-v-734afde3="" class="poptip-title icon-question"></span></div> <!----></div></td><td data-v-734afde3="" class="enter-bg"><span data-v-734afde3="" class="enter-bg-ele">
|
||||||
|
330184000311238
|
||||||
|
</span><!----></td><td data-v-734afde3=""><div data-v-734afde3="" class="poptip-wrap poptip-wrap-org-no ivu-poptip"><div class="ivu-poptip-rel">
|
||||||
|
组织机构代码
|
||||||
|
<span data-v-734afde3="" class="poptip-title icon-question"></span></div> <div class="ivu-poptip-popper" style="width: 400px; display: none; position: absolute; will-change: top, left; top: 351px; left: 570px;" x-placement="bottom-start"><div class="ivu-poptip-content"><div class="ivu-poptip-arrow"></div> <!----> <div class="ivu-poptip-inner"><!----> <div class="ivu-poptip-body"><div class="ivu-poptip-body-content"><div data-v-734afde3="" class="poptip-content"><p data-v-734afde3="" class="poptip-line"><span data-v-734afde3="" class="title"></span>组织机构代码是对国内依法注册、登记的机关、企事业单位、社会团体,以及其他组织机构颁发的唯一的、始终不变的代码标识。
|
||||||
|
</p><p data-v-734afde3="" class="poptip-line"><span data-v-734afde3="" class="title"></span>由8位数字(或大写拉丁字母)本体代码和1位数字(或大写拉丁字母)校验码组成。
|
||||||
|
</p></div></div></div></div></div></div></div></td><td data-v-734afde3="" class="enter-bg"><span data-v-734afde3="" class="enter-bg-ele">31131201-X</span><!----></td></tr><tr data-v-734afde3=""><td data-v-734afde3=""><div data-v-734afde3="" class="poptip-wrap poptip-wrap-tax-no ivu-poptip"><div class="ivu-poptip-rel">
|
||||||
|
纳税人识别号
|
||||||
|
<span data-v-734afde3="" class="poptip-title icon-question"></span></div> <div class="ivu-poptip-popper" style="width: 400px; display: none; position: absolute; will-change: top, left; top: 393px; left: 11px;" x-placement="bottom-start"><div class="ivu-poptip-content"><div class="ivu-poptip-arrow"></div> <!----> <div class="ivu-poptip-inner"><!----> <div class="ivu-poptip-body"><div class="ivu-poptip-body-content"><div data-v-734afde3="" class="poptip-content"><p data-v-734afde3="" class="poptip-line"><span data-v-734afde3="" class="title"></span>纳税人识别号是税务登记证上的号码,通常简称为“税号”,每个企业的纳税人识别号都是唯一的。
|
||||||
|
</p><p data-v-734afde3="" class="poptip-line"><span data-v-734afde3="" class="title"></span>由15位、17位、18或者20位码(字符型)组成。
|
||||||
|
</p></div></div></div></div></div></div></div></td><td data-v-734afde3="" class="enter-bg"><span data-v-734afde3="" class="enter-bg-ele">9133011031131201XU</span><!----></td><td data-v-734afde3="">
|
||||||
|
纳税人资质
|
||||||
|
<div data-v-734afde3="" class="poptip-wrap ivu-poptip"><div class="ivu-poptip-rel"><span data-v-734afde3="" class="poptip-title icon-question"></span></div> <!----></div></td><td data-v-734afde3="">增值税一般纳税人</td></tr><tr data-v-734afde3=""><td data-v-734afde3="">
|
||||||
|
营业期限
|
||||||
|
<div data-v-734afde3="" class="poptip-wrap ivu-poptip"><div class="ivu-poptip-rel"><span data-v-734afde3="" class="poptip-title icon-question"></span></div> <!----></div></td><td data-v-734afde3="">2014-08-05 至 2034-08-04</td><td data-v-734afde3=""><div data-v-734afde3="" class="poptip-wrap poptip-wrap-annual-date ivu-poptip"><div class="ivu-poptip-rel">
|
||||||
|
核准日期
|
||||||
|
<span data-v-734afde3="" class="poptip-title icon-question"></span></div> <div class="ivu-poptip-popper" style="width: 400px; display: none; position: absolute; will-change: top, left; top: 436px; left: 570px;" x-placement="bottom-start"><div class="ivu-poptip-content"><div class="ivu-poptip-arrow"></div> <!----> <div class="ivu-poptip-inner"><!----> <div class="ivu-poptip-body"><div class="ivu-poptip-body-content"><div data-v-734afde3="" class="poptip-content"><p data-v-734afde3="" class="poptip-line">
|
||||||
|
核准日期指企业营业执照登记事项最近一次变更,经工商部门核准,颁发新营业执照的日期。
|
||||||
|
</p></div></div></div></div></div></div></div></td><td data-v-734afde3="">2020-08-24</td></tr><tr data-v-734afde3=""><td data-v-734afde3="">
|
||||||
|
参保人数
|
||||||
|
<div data-v-734afde3="" class="poptip-wrap ivu-poptip"><div class="ivu-poptip-rel"><span data-v-734afde3="" class="poptip-title icon-question insurance-info"></span></div> <div class="ivu-poptip-popper" style="width: 280px; display: none; position: absolute; will-change: top, left; top: 478px; left: 71px;" x-placement="bottom-start"><div class="ivu-poptip-content"><div class="ivu-poptip-arrow"></div> <!----> <div class="ivu-poptip-inner"><!----> <div class="ivu-poptip-body"><div class="ivu-poptip-body-content"><div data-v-734afde3="" class="poptip-content"><p data-v-734afde3="" class="poptip-line">
|
||||||
|
信息来源:
|
||||||
|
<a data-v-734afde3="" href="/annualreport?pid=55748926477318&year=2024" target="_blank" data-log-an="business-table" data-log-title="business-table-yearReport" class="use-map">
|
||||||
|
2024年年报
|
||||||
|
</a>结果仅供参考。
|
||||||
|
</p></div></div></div></div></div></div></div></td><td data-v-734afde3="">
|
||||||
|
3人
|
||||||
|
<img data-v-734afde3="" src="https://xin-static.cdn.bcebos.com/aiqicha-pc/data-trend.png" data-log-an="basic-insurance" data-log-title="basic-insurance-click-line-chart" class="data-trend"></td><td data-v-734afde3="">登记机关</td><td data-v-734afde3="">
|
||||||
|
杭州市余杭区市场监督管理局
|
||||||
|
</td></tr><!----><tr data-v-734afde3=""><td data-v-734afde3="">曾用名</td><td data-v-734afde3="" colspan="3" class="enter-bg"><p data-v-734afde3=""><span data-v-734afde3="" class="enter-bg-ele">
|
||||||
|
杭州茂复建材有限公司
|
||||||
|
</span><!----></p></td></tr><tr data-v-734afde3=""><td data-v-734afde3="">注册地址</td><td data-v-734afde3="" colspan="3"><span data-v-734afde3="" class="addr-enter-bg-ele">浙江省杭州市余杭区五常街道郭家兜路8号1幢4楼408室</span><span data-v-734afde3="" class="use-map"><a data-v-734afde3="" href="http://api.map.baidu.com/geocoder?address=%E6%B5%99%E6%B1%9F%E7%9C%81%E6%9D%AD%E5%B7%9E%E5%B8%82%E4%BD%99%E6%9D%AD%E5%8C%BA%E4%BA%94%E5%B8%B8%E8%A1%97%E9%81%93%E9%83%AD%E5%AE%B6%E5%85%9C%E8%B7%AF8%E5%8F%B71%E5%B9%A24%E6%A5%BC408%E5%AE%A4&output=html" target="_blank" data-log-an="basic-business" data-log-title="basic-business-use-map">
|
||||||
|
查看地图
|
||||||
|
</a></span><!----></td></tr><tr data-v-734afde3=""><td data-v-734afde3="">
|
||||||
|
经营范围
|
||||||
|
<div data-v-734afde3="" class="poptip-wrap ivu-poptip"><div class="ivu-poptip-rel"><span data-v-734afde3="" class="poptip-title icon-question"></span></div> <!----></div></td><td data-v-734afde3="" colspan="3"><div data-v-6b617b08="" data-v-734afde3="" class="fold-container line--1">设计、施工:建筑工程、室内外装饰工程、幕墙工程;销售:建筑材料,装饰材料,石材,五金;服务:铝合金门窗上门安装,建筑工程技术咨询,国内广告设计和制作。(依法须经批准的项目,经相关部门批准后方可开展经营活动)
|
||||||
|
<!----><!----><!----></div></td></tr></tbody></table>
|
||||||
1647
杭州奥杰装饰.txt
Normal file
1647
杭州奥杰装饰.txt
Normal file
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user