A. 如何通过输入域名访问部署在本机的nodejs服务器
修改系统的hosts文件就可以了,比如(你想用的域名为:www.myapp.com):
node服务器的host为:localhost,端口(port):8080;
修改系统hosts文件,在末尾加一行代码:127.0.0.1 www.myapp.com 然后保存。
在浏览器输入:www.myapp.com:8080即可访问(前提是项目node服务器正在运行,没运行会失败);
PS:如果想直接输入www.myapp.com就能访问(不加端口,其实不是没有端口只是一般80端口是默认值,可以不写),只需把node服务器的端口(port)设置为80再运行即可(当然前提是80端口没有被其他程序占用)
B. 濡备綍浣跨敤Node.js鐖鍙栦换镒忕绣椤佃祫婧愬苟杈揿嚭pdf鏂囦欢鍒版湰鍦
闇姹傦细
浣跨敤Node.js鐖鍙栫绣椤佃祫婧愶纴寮绠卞嵆鐢ㄧ殑閰岖疆
灏嗙埇鍙栧埌镄勭绣椤靛唴瀹逛互PDF镙煎纺杈揿嚭
濡傛灉浣犳槸涓钖嶆妧链浜哄憳锛岄偅涔埚彲浠ョ湅鎴戞帴涓嬫潵镄勬枃绔狅纴钖﹀垯锛岃风洿鎺ョЩ姝ュ埌鎴戠殑github浠揿簱锛岀洿鎺ョ湅鏂囨。浣跨敤鍗冲彲
浠揿簱鍦板潃:闄勫甫鏂囨。鍜屾簮镰
链闇姹备娇鐢ㄥ埌镄勬妧链锛歂ode.js鍜宲uppeteer
puppeteer 瀹樼绣鍦板潃: puppeteer鍦板潃
Node.js瀹樼绣鍦板潃:阈炬帴鎻忚堪
Puppeteer鏄璋锋瓕瀹樻柟鍑哄搧镄勪竴涓阃氲繃DevTools鍗忚鎺у埗headless Chrome镄凬ode搴撱傚彲浠ラ氲繃Puppeteer镄勬彁渚涚殑api鐩存帴鎺у埗Chrome妯℃嫙澶ч儴鍒嗙敤鎴锋搷浣沧潵杩涜孶I Test鎴栬呬綔涓虹埇铏璁块梾椤甸溃𨱒ユ敹闆嗘暟鎹銆
鐜澧冨拰瀹夎
Puppeteer链韬渚濊禆6.4浠ヤ笂镄凬ode锛屼絾鏄涓轰简寮傛ヨ秴绾уソ鐢ㄧ殑async/await锛屾帹钻愪娇鐢7.6鐗堟湰浠ヤ笂镄凬ode銆傚彟澶杊eadless Chrome链韬瀵规湇锷″櫒渚濊禆镄勫簱镄勭増链瑕佹眰姣旇缉楂桡纴centos链嶅姟鍣ㄤ緷璧栧亸绋冲畾锛寁6寰堥毦浣跨敤headless Chrome锛屾彁鍗囦緷璧栫増链鍙鑳藉嚭鐜板悇绉嶆湇锷″櫒闂棰桡纸鍖呮嫭涓斾笉闄愪簬镞犳硶浣跨敤ssh锛夛纴链濂戒娇鐢ㄩ珮鐗堟湰链嶅姟鍣ㄣ傦纸寤鸿浣跨敤链鏂扮増链镄凬ode.js锛
灏忚瘯鐗涘垁锛岀埇鍙栦含涓滆祫婧
const puppeteer = require('puppeteer'); // 寮曞叆渚濊禆
(async () => { //浣跨敤async鍑芥暟瀹岀编寮傛
const browser = await puppeteer.launch(); //镓揿紑鏂扮殑娴忚埚櫒
const page = await browser.newPage(); // 镓揿紑鏂扮殑缃戦〉
await page.goto('https://www.jd.com/'); //鍓嶅线閲岄溃 'url' 镄勭绣椤
const result = await page.evaluate(() => { //杩欎釜result鏁扮粍鍖呭惈镓链夌殑锲剧墖src鍦板潃
let arr = []; //杩欎釜绠澶村嚱鏁板唴閮ㄥ啓澶勭悊镄勯昏緫
const imgs = document.querySelectorAll('img');
imgs.forEach(function (item) {
arr.push(item.src)
})
return arr
});
// '姝ゆ椂镄剅esult灏辨槸寰楀埌镄勭埇铏鏁版嵁锛屽彲浠ラ氲繃'fs'妯″潡淇濆瓨'
})()
澶嶅埗杩囧幓 浣跨敤锻戒护琛屽懡浠 ` node 鏂囦欢钖 ` 灏卞彲浠ヨ繍琛岃幏鍙栫埇铏鏁版嵁浜 杩欎釜 puppeteer 镄勫寘 锛屽叾瀹炴槸镟挎垜浠寮钖浜嗗彟涓涓娴忚埚櫒锛岄吨鏂板幓寮钖缃戦〉锛岃幏鍙栧畠浠镄勬暟鎹銆
涓婇溃鍙鐖鍙栦简浜涓滈栭〉镄勫浘鐗囧唴瀹癸纴锅囱炬垜镄勯渶姹傝繘涓姝ユ墿澶э纴闇瑕佺埇鍙栦含涓滈栭〉涓镄勬墍链<a> 镙囩惧瑰簲镄勮烦杞缃戦〉涓镄勬墍链 title镄勬枃瀛楀唴瀹癸纴链钖庢斁鍒颁竴涓鏁扮粍涓銆
鎴戜滑镄刟sync鍑芥暟涓婇溃涓鍏卞垎浜嗕簲姝ワ纴 鍙链 puppeteer.launch() ,browser.newPage(), browser.close() 鏄锲哄畾镄勫啓娉曘
page.goto 鎸囧畾鎴戜滑铡诲摢涓缃戦〉鐖鍙栨暟鎹锛屽彲浠ユ洿鎹㈠唴閮╱rl鍦板潃锛屼篃鍙浠ュ氭¤皟鐢ㄨ繖涓鏂规硶銆
page.evaluate 杩欎釜鍑芥暟锛屽唴閮ㄦ槸澶勭悊鎴戜滑杩涘叆𨱍宠佺埇鍙栫绣椤电殑鏁版嵁阃昏緫
page.goto鍜宲age.evaluate涓や釜鏂规硶锛屽彲浠ュ湪async鍐呴儴璋幂敤澶氭★纴闾f剰锻崇潃鎴戜滑鍙浠ュ厛杩涘叆浜涓灭绣椤碉纴澶勭悊阃昏緫钖庯纴鍐嶆¤皟鐢╬age.goto杩欎釜鍑芥暟
娉ㄦ剰锛屼笂闱㈣繖涓鍒囬昏緫锛岄兘鏄痯uppeteer杩欎釜鍖呭府鎴戜滑鍦ㄧ湅涓嶈佺殑鍦版柟寮钖浜嗗彟澶栦竴涓娴忚埚櫒锛岀劧钖庡勭悊阃昏緫锛屾墍浠ユ渶缁堣佽皟鐢╞rowser.close()鏂规硶鍏抽棴闾d釜娴忚埚櫒銆
杩欐椂鍊欐垜浠瀵逛笂涓绡囩殑浠g爜杩涜屼紭鍖栵纴鐖鍙栧瑰簲镄勮祫婧愩
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://www.jd.com/');
const hrefArr = await page.evaluate(() => {
let arr = [];
const aNodes = document.querySelectorAll('.cate_menu_lk');
aNodes.forEach(function (item) {
arr.push(item.href)
})
return arr
});
let arr = [];
for (let i = 0; i < hrefArr.length; i++) {
const url = hrefArr[i];
console.log(url) //杩欓噷鍙浠ユ墦鍗
await page.goto(url);
const result = await page.evaluate(() => { //杩欎釜鏂规硶鍐呴儴console.log镞犳晥
return $('title').text(); //杩斿洖姣忎釜鐣岄溃镄则itle鏂囧瓧鍐呭
});
arr.push(result) //姣忔″惊鐜缁欐暟缁勪腑娣诲姞瀵瑰簲镄勫
}
console.log(arr) //寰楀埌瀵瑰簲镄勬暟鎹 鍙浠ラ氲繃Node.js镄 fs 妯″潡淇濆瓨鍒版湰鍦
await browser.close()
})()
涓婇溃链夊ぉ鍧 page.evaluate鍑芥暟鍐呴儴镄刢onsole.log涓嶈兘镓揿嵃锛岃屼笖鍐呴儴涓嶈兘銮峰彇澶栭儴镄勫彉閲,鍙鑳絩eturn杩斿洖锛
浣跨敤镄勯夋嫨鍣ㄥ繀椤诲厛铡诲瑰簲鐣岄溃镄勬带鍒跺彴瀹为獙杩囱兘涓嶈兘阃夋嫨DOM鍐崭娇鐢锛屾瘆濡备含涓沧棤娉曚娇鐢╭uerySelector銆傝繖閲岀敱浜
浜涓灭殑鍒嗙晫闱㈤兘浣跨敤浜唈Query锛屾墍浠ユ垜浠鍙浠ョ敤jQuery锛屾讳箣浠栦滑寮鍙戣兘鐢ㄧ殑阃夋嫨鍣锛屾垜浠閮藉彲浠ョ敤锛屽惁鍒椤氨涓嶅彲浠ャ
鎺ヤ笅𨱒ユ垜浠鐩存帴𨱒ョ埇鍙朜ode.js镄勫畼缃戦栭〉铹跺悗鐩存帴鐢熸垚PDF
镞犺烘偍鏄钖︿简瑙Node.js鍜宲uppeteer镄勭埇铏镄勪汉锻橀兘鍙浠ユ搷浣滐纴璇锋偍涓瀹氢竾鍒嗕粩缁嗛槄璇绘湰鏂囨。骞舵寜椤哄簭镓ц屾疮涓姝
链椤圭洰瀹炵幇闇姹傦细缁欐垜浠涓涓缃戦〉鍦板潃锛岀埇鍙栦粬镄勭绣椤靛唴瀹癸纴铹跺悗杈揿嚭鎴愭垜浠𨱍宠佺殑PDF镙煎纺鏂囨。锛岃锋敞镒忥纴鏄楂樿川閲忕殑PDF鏂囨。
绗涓姝ワ纴瀹夎匩ode.js ,鎺ㄨ崘http://nodejs.cn/download/锛孨ode.js镄勪腑鏂囧畼缃戜笅杞藉瑰簲镄勬搷浣灭郴缁熷寘
绗浜屾ワ纴鍦ㄤ笅杞藉畨瑁呭畬浜哊ode.js钖庯纴 钖锷╳indows锻戒护琛屽伐鍏(windows涓嫔惎锷ㄧ郴缁熸悳绱㈠姛鑳斤纴杈揿叆cmd锛屽洖杞︼纴灏卞嚭𨱒ヤ简)
绗涓夋 闇瑕佹煡鐪嬬幆澧冨彉閲忔槸钖﹀凡缁忚嚜锷ㄩ厤缃,鍦ㄥ懡浠よ屽伐鍏蜂腑杈揿叆 node -v锛屽傛灉鍑虹幇 v10. ***瀛楁碉纴鍒栾存槑鎴愬姛瀹夎匩ode.js
绗锲涙 濡傛灉鎭ㄥ湪绗涓夋ュ彂鐜拌緭鍏node -v杩樻槸娌℃湁鍑虹幇 瀵瑰簲镄勫瓧娈碉纴闾d箞璇锋偍閲嶅惎鐢佃剳鍗冲彲
绗浜旀 镓揿紑链椤圭洰鏂囦欢澶癸纴镓揿紑锻戒护琛屽伐鍏凤纸windows绯荤粺涓鐩存帴鍦ㄦ枃浠剁殑url鍦板潃镙忚緭鍏cmd灏卞彲浠ユ墦寮浜嗭级锛岃緭鍏 npm i cnpm nodemon -g
绗鍏姝 涓嬭浇puppeteer鐖铏鍖咃纴鍦ㄥ畬鎴愮浜旀ュ悗锛屼娇鐢╟npm i puppeteer --save 锻戒护 鍗冲彲涓嬭浇
绗涓冩 瀹屾垚绗鍏姝ヤ笅杞藉悗锛屾墦寮链椤圭洰镄剈rl.js锛屽皢鎭ㄩ渶瑕佺埇铏鐖鍙栫殑缃戦〉鍦板潃镟挎崲涓婂幓(榛樿ゆ槸http://nodejs.cn/)
绗鍏姝 鍦ㄥ懡浠よ屼腑杈揿叆 nodemon index.js 鍗冲彲鐖鍙栧瑰簲镄勫唴瀹癸纴骞朵笖镊锷ㄨ緭鍑哄埌褰揿墠鏂囦欢澶逛笅闱㈢殑index.pdf鏂囦欢涓
TIPS: 链椤圭洰璁捐℃濇兂灏辨槸涓涓缃戦〉涓涓狿DF鏂囦欢锛屾墍浠ユ疮娆$埇鍙栦竴涓鍗旷嫭椤甸溃钖庯纴璇锋妸index.pdf𨰾疯礉鍑哄幓锛岀劧钖庣户缁镟存崲url鍦板潃锛岀户缁鐖鍙栵纴鐢熸垚鏂扮殑PDF鏂囦欢锛屽綋铹讹纴鎭ㄤ篃鍙浠ラ氲繃寰鐜缂栬疟绛夋柟寮忓幓涓娆℃х埇鍙栧氢釜缃戦〉鐢熸垚澶氢釜PDF鏂囦欢銆
瀵瑰簲镀忎含涓滈栭〉杩欐牱镄勫紑钖浜嗗浘鐗囨噿锷犺浇镄勭绣椤碉纴鐖鍙栧埌镄勯儴鍒嗗唴瀹规槸loading鐘舵佺殑鍐呭癸纴瀵逛簬链変竴浜涘弽鐖铏链哄埗镄勭绣椤碉纴鐖铏涔熶细鍑虹幇闂棰桡纴浣嗘槸缁濆ぇ澶氭暟缃戠珯閮芥槸鍙浠ョ殑
const puppeteer = require('puppeteer');
const url = require('./url');
(async () => {
const browser = await puppeteer.launch({ headless: true })
const page = await browser.newPage()
//阃夋嫨瑕佹墦寮镄勭绣椤
await page.goto(url, { waitUntil: 'networkidle0' })
//阃夋嫨浣犺佽緭鍑虹殑闾d釜PDF鏂囦欢璺寰勶纴鎶婄埇鍙栧埌镄勫唴瀹硅緭鍑哄埌PDF涓锛屽繀椤绘槸瀛桦湪镄凯DF锛屽彲浠ユ槸绌哄唴瀹癸纴濡傛灉涓嶆槸绌虹殑鍐呭笔DF锛岄偅涔堜细瑕嗙洊鍐呭
let pdfFilePath = './index.pdf'
//镙规嵁浣犵殑閰岖疆阃夐”锛屾垜浠杩欓噷阃夋嫨A4绾哥殑瑙勬牸杈揿嚭PDF锛屾柟渚挎墦鍗
await page.pdf({
path: pdfFilePath,
format: 'A4',
scale: 1,
printBackground: true,
landscape: false,
displayHeaderFooter: false
});
await browser.close()
})()
鏂囦欢瑙f瀯璁捐
鏁版嵁鍦ㄨ繖涓镞朵唬闱炲父鐝嶈吹锛屾寜镦х绣椤电殑璁捐¢昏緫锛岄夊畾鐗瑰畾镄删ref镄勫湴鍧锛屽彲浠ュ厛鐩存帴銮峰彇瀵瑰簲镄勮祫婧愶纴涔熷彲浠ラ氲繃鍐嶆′娇鐢 page.goto鏂规硶杩涘叆锛屽啀璋幂敤 page.evaluate() 澶勭悊阃昏緫锛屾垨钥呰緭鍑哄瑰簲镄凯DF鏂囦欢锛屽綋铹朵篃鍙浠ヤ竴鍙f皵杈揿嚭澶氢釜PDF鏂囦欢~
杩欓噷灏变笉锅氲繃澶氢粙缁崭简锛屾瘯绔 Node.js 鏄鍙浠ヤ笂澶╃殑锛屾垨璁告湭𨱒ュ畠鐪熺殑浠涔堥兘鑳藉仛銆傝繖涔堜紭璐ㄧ亩鐭镄勬暀绋嬶纴璇锋敹钘
鎴栬呰浆鍙戠粰鎭ㄧ殑链嫔弸锛岃阿璋銆
C. 如何通过输入域名访问部署在本机的nodejs服务器
通过输入域名访问部署在本机的nodejs服务器方法:
修改系统的hosts文件就可以了,比如(想用的域名为:myapp.com,前面加上www.):
node服务器的host为:localhost,端口(port):8080;
修改系统hosts文件,在末尾加一行代码:127.0.0.1 myapp.com,前面加上www. 然后保存。
在浏览器输入:myapp.com:8080,前面加上www. 即可访问(前提是项目node服务器正在运行,没运行会失败);