Skip to content

Commit 9e0170d

Browse files
committed
opt code
1 parent 9e51766 commit 9e0170d

6 files changed

Lines changed: 338 additions & 6 deletions

File tree

dist/build.js

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/build.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

js/background.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,30 @@ chrome.alarms.onAlarm.addListener(() => {
3131
const minute = date.getMinutes();
3232
noticeAlert(hour, minute);
3333
});
34+
35+
function request_proxy({ url, method, data }) {
36+
const XHR = new XMLHttpRequest();
37+
XHR.open(method, url);
38+
XHR.setRequestHeader('Content-Type', 'application/json;charset=UTF-8');
39+
XHR.send(data);
40+
XHR.onreadystatechange = function () {
41+
if (XHR.readyState === 4) {
42+
console.log(XHR.responseText);
43+
}
44+
};
45+
}
46+
47+
chrome.runtime.onMessage.addListener((data, sender, sendResponse) => {
48+
const url = 'http://127.0.0.1:8081/api/chrome-extension/save-spider?token=zhimin-studio-save-spider';
49+
fetch(url, {
50+
method: 'POST',
51+
body: JSON.stringify(data),
52+
headers: {
53+
'Content-Type': 'application/json;charset=UTF-8',
54+
},
55+
}).then((resp) => {
56+
console.log(resp);
57+
});
58+
// request_proxy({ url, method: 'POST', data });
59+
sendResponse({ code: 200 });
60+
});

js/content_script.js

Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,159 @@ setTimeout(() => {
6161
}
6262
}, 2000);
6363
}
64+
if(nowHost === 'weibo.com'){
65+
console.log('----zhimin spider inject');
66+
67+
function parseStyleUrl(str) {
68+
const regex = /url\(\"(.*)\"\)/gm;
69+
70+
// Alternative syntax using RegExp constructor
71+
// const regex = new RegExp('url\\(\\"(.*)\\"\\)', 'gm')
72+
let m;
73+
const save = {};
74+
75+
while ((m = regex.exec(str)) !== null) {
76+
// This is necessary to avoid infinite loops with zero-width matches
77+
if (m.index === regex.lastIndex) {
78+
regex.lastIndex++;
79+
}
80+
81+
// The result can be accessed through the `m`-variable.
82+
m.forEach((match, groupIndex) => {
83+
save[groupIndex] = match;
84+
});
85+
}
86+
return save;
87+
}
88+
89+
setInterval(() => {
90+
const saveData = [];
91+
const content = document.getElementsByClassName('wbpro-scroller-item');
92+
for (let i = 0; i < content.length; i += 1) {
93+
const oneItem = content[i];
94+
let videoUrl = '';
95+
let videoCover = '';
96+
97+
let repost = false;
98+
// 转发的内容 正文+视频+封面
99+
const originalContent = oneItem.getElementsByClassName('wbpro-feed-reText');
100+
for (let iD = 0; iD < originalContent.length; iD += 1) {
101+
repost = true;
102+
const videoContainer = originalContent[iD].nextSibling;
103+
const videoInfo = videoContainer.getElementsByTagName('video');
104+
if (videoInfo.length > 0) {
105+
videoUrl = videoInfo[0].getAttribute('src');
106+
}
107+
const coverInfo = videoContainer.getElementsByClassName('wbpv-poster');
108+
if (coverInfo.length > 0) {
109+
videoCover = coverInfo[0].getAttribute('style');
110+
}
111+
}
112+
let userName = '';
113+
for (let oC = 0; oC < originalContent.length; oC += 1) {
114+
if (oC === 0) {
115+
userName = originalContent[oC].innerText;
116+
}
117+
}
118+
119+
// 原始的内容 正文+视频+封面
120+
const userContent = oneItem.getElementsByClassName('wbpro-feed-ogText');
121+
let uContent = '';
122+
for (let uC = 0; uC < userContent.length; uC += 1) {
123+
if (uC === 0) {
124+
uContent = userContent[uC].innerText;
125+
}
126+
if (!repost) {
127+
const videoContainer = userContent[uC].nextSibling;
128+
if (videoContainer) {
129+
const videoInfo = videoContainer.getElementsByTagName('video');
130+
if (videoInfo.length > 0) {
131+
videoUrl = videoInfo[0].getAttribute('src');
132+
}
133+
const coverInfo = videoContainer.getElementsByClassName('wbpv-poster');
134+
if (coverInfo.length > 0) {
135+
videoCover = coverInfo[0].getAttribute('style');
136+
}
137+
}
138+
}
139+
}
140+
141+
// 获取文本链接
142+
let linkUrl = '';
143+
const contentId = oneItem.getElementsByClassName('woo-box-justifyBetween');
144+
for (let iC = 0; iC < contentId.length; iC += 1) {
145+
if (iC === 0) {
146+
if (contentId[iC].getElementsByTagName('a').length > 0) {
147+
linkUrl = contentId[iC].getElementsByTagName('a')[0].getAttribute('href');
148+
}
149+
}
150+
}
151+
if (linkUrl === '') {
152+
const clink = oneItem.getElementsByClassName('woo-box-justifyCenter');
153+
for (let iC = 0; iC < clink.length; iC += 1) {
154+
if (iC === 1) {
155+
if (clink[iC].getElementsByTagName('a').length > 0) {
156+
linkUrl = clink[iC].getElementsByTagName('a')[0].getAttribute('href');
157+
}
158+
}
159+
}
160+
}
161+
162+
// 获取图片或者live photo视频
163+
const imageList = [];
164+
const videoList = [];
165+
const orignalPic = oneItem.getElementsByClassName('woo-picture-slot');
166+
for (let p = 0; p < orignalPic.length; p += 1) {
167+
const oneSmallPic = orignalPic[p].getElementsByTagName('img');
168+
if (oneSmallPic.length > 0) {
169+
for (let sP = 0; sP < oneSmallPic.length; sP += 1) {
170+
imageList.push(oneSmallPic[sP].getAttribute('src'));
171+
}
172+
}
173+
const vides = orignalPic[p].getElementsByTagName('video');
174+
if (vides.length > 0) {
175+
for (let sP = 0; sP < vides.length; sP += 1) {
176+
videoList.push(vides[sP].getAttribute('src'));
177+
}
178+
}
179+
}
180+
const exp = userName.split('\n');
181+
let uName = '';
182+
let ucContent = '';
183+
if (exp.length >= 2) {
184+
[uName, ucContent] = exp;
185+
} else {
186+
ucContent = userName;
187+
}
188+
let videoCoverUrl = '';
189+
if (videoCover !== '') {
190+
const urlArr = parseStyleUrl(videoCover);
191+
if (urlArr[1] !== undefined) {
192+
videoCoverUrl = urlArr[1];
193+
}
194+
}
195+
saveData.push({
196+
link: linkUrl,
197+
content: uContent,
198+
post: {
199+
userName: uName,
200+
content: ucContent,
201+
},
202+
videoInfo: {
203+
videoUrl,
204+
videoCoverUrl,
205+
},
206+
images: imageList,
207+
liveVideo: videoList,
208+
});
209+
}
210+
chrome.runtime.sendMessage({ list: saveData }, (data) => {
211+
// if (data.code !== undefined && data.code !== 200) {
212+
console.log(data);
213+
// }
214+
});
215+
}, 5000);
216+
}
64217
if(nowHost === 'www.baidu.com'){
65218
setTimeout(() => {
66219
// 右侧百度热榜

manifest.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@
1212
"notifications",
1313
"webRequest",
1414
"webRequestBlocking",
15-
"storage"
15+
"storage",
16+
"http://*/"
1617
],
1718
"background": {
1819
"service_worker": "js/background.js"

src/script/content/weibo.com.js

Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
console.log('----zhimin spider inject');
2+
3+
function parseStyleUrl(str) {
4+
const regex = /url\(\"(.*)\"\)/gm;
5+
6+
// Alternative syntax using RegExp constructor
7+
// const regex = new RegExp('url\\(\\"(.*)\\"\\)', 'gm')
8+
let m;
9+
const save = {};
10+
11+
while ((m = regex.exec(str)) !== null) {
12+
// This is necessary to avoid infinite loops with zero-width matches
13+
if (m.index === regex.lastIndex) {
14+
regex.lastIndex++;
15+
}
16+
17+
// The result can be accessed through the `m`-variable.
18+
m.forEach((match, groupIndex) => {
19+
save[groupIndex] = match;
20+
});
21+
}
22+
return save;
23+
}
24+
25+
setInterval(() => {
26+
const saveData = [];
27+
const content = document.getElementsByClassName('wbpro-scroller-item');
28+
for (let i = 0; i < content.length; i += 1) {
29+
const oneItem = content[i];
30+
let videoUrl = '';
31+
let videoCover = '';
32+
33+
let repost = false;
34+
// 转发的内容 正文+视频+封面
35+
const originalContent = oneItem.getElementsByClassName('wbpro-feed-reText');
36+
for (let iD = 0; iD < originalContent.length; iD += 1) {
37+
repost = true;
38+
const videoContainer = originalContent[iD].nextSibling;
39+
const videoInfo = videoContainer.getElementsByTagName('video');
40+
if (videoInfo.length > 0) {
41+
videoUrl = videoInfo[0].getAttribute('src');
42+
}
43+
const coverInfo = videoContainer.getElementsByClassName('wbpv-poster');
44+
if (coverInfo.length > 0) {
45+
videoCover = coverInfo[0].getAttribute('style');
46+
}
47+
}
48+
let userName = '';
49+
for (let oC = 0; oC < originalContent.length; oC += 1) {
50+
if (oC === 0) {
51+
userName = originalContent[oC].innerText;
52+
}
53+
}
54+
55+
// 原始的内容 正文+视频+封面
56+
const userContent = oneItem.getElementsByClassName('wbpro-feed-ogText');
57+
let uContent = '';
58+
for (let uC = 0; uC < userContent.length; uC += 1) {
59+
if (uC === 0) {
60+
uContent = userContent[uC].innerText;
61+
}
62+
if (!repost) {
63+
const videoContainer = userContent[uC].nextSibling;
64+
if (videoContainer) {
65+
const videoInfo = videoContainer.getElementsByTagName('video');
66+
if (videoInfo.length > 0) {
67+
videoUrl = videoInfo[0].getAttribute('src');
68+
}
69+
const coverInfo = videoContainer.getElementsByClassName('wbpv-poster');
70+
if (coverInfo.length > 0) {
71+
videoCover = coverInfo[0].getAttribute('style');
72+
}
73+
}
74+
}
75+
}
76+
77+
// 获取文本链接
78+
let linkUrl = '';
79+
const contentId = oneItem.getElementsByClassName('woo-box-justifyBetween');
80+
for (let iC = 0; iC < contentId.length; iC += 1) {
81+
if (iC === 0) {
82+
if (contentId[iC].getElementsByTagName('a').length > 0) {
83+
linkUrl = contentId[iC].getElementsByTagName('a')[0].getAttribute('href');
84+
}
85+
}
86+
}
87+
if (linkUrl === '') {
88+
const clink = oneItem.getElementsByClassName('woo-box-justifyCenter');
89+
for (let iC = 0; iC < clink.length; iC += 1) {
90+
if (iC === 1) {
91+
if (clink[iC].getElementsByTagName('a').length > 0) {
92+
linkUrl = clink[iC].getElementsByTagName('a')[0].getAttribute('href');
93+
}
94+
}
95+
}
96+
}
97+
98+
// 获取图片或者live photo视频
99+
const imageList = [];
100+
const videoList = [];
101+
const orignalPic = oneItem.getElementsByClassName('woo-picture-slot');
102+
for (let p = 0; p < orignalPic.length; p += 1) {
103+
const oneSmallPic = orignalPic[p].getElementsByTagName('img');
104+
if (oneSmallPic.length > 0) {
105+
for (let sP = 0; sP < oneSmallPic.length; sP += 1) {
106+
imageList.push(oneSmallPic[sP].getAttribute('src'));
107+
}
108+
}
109+
const vides = orignalPic[p].getElementsByTagName('video');
110+
if (vides.length > 0) {
111+
for (let sP = 0; sP < vides.length; sP += 1) {
112+
videoList.push(vides[sP].getAttribute('src'));
113+
}
114+
}
115+
}
116+
const exp = userName.split('\n');
117+
let uName = '';
118+
let ucContent = '';
119+
if (exp.length >= 2) {
120+
[uName, ucContent] = exp;
121+
} else {
122+
ucContent = userName;
123+
}
124+
let videoCoverUrl = '';
125+
if (videoCover !== '') {
126+
const urlArr = parseStyleUrl(videoCover);
127+
if (urlArr[1] !== undefined) {
128+
videoCoverUrl = urlArr[1];
129+
}
130+
}
131+
saveData.push({
132+
link: linkUrl,
133+
content: uContent,
134+
post: {
135+
userName: uName,
136+
content: ucContent,
137+
},
138+
videoInfo: {
139+
videoUrl,
140+
videoCoverUrl,
141+
},
142+
images: imageList,
143+
liveVideo: videoList,
144+
});
145+
}
146+
chrome.runtime.sendMessage({ list: saveData }, (data) => {
147+
// if (data.code !== undefined && data.code !== 200) {
148+
console.log(data);
149+
// }
150+
});
151+
}, 2000);

0 commit comments

Comments
 (0)