67 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| import { launch } from "puppeteer";
 | |
| import "dotenv/config.js";
 | |
| import { injectionCookie } from "../utils/userUtils.js";
 | |
| import fs from "fs";
 | |
| import dotenv from "dotenv";
 | |
| dotenv.config();
 | |
| 
 | |
| (async () => {
 | |
|     const browser = await launch({
 | |
|         headless: false,
 | |
|         args: [`--window-size=1920,1080`],
 | |
|         defaultViewport: { width: 1920, height: 1080 },
 | |
|     });
 | |
|     const page = await browser.newPage();
 | |
|     page.on("console", msg => console.log("PAGE LOG", msg.text()));
 | |
|     page.on("error", error => console.error("PAGE error", error));
 | |
| 
 | |
|     // 注入cookie
 | |
|     const webUrl = "https://www.zhihu.com/hot";
 | |
|     const cookieFileUrl = "./data/zhihu.json";
 | |
|     await injectionCookie(page, webUrl, cookieFileUrl);
 | |
| 
 | |
|     const hotItems = await page.$$(".HotList-list .HotItem");
 | |
| 
 | |
|     const hotText = new Array();
 | |
| 
 | |
|     for (const hot in hotItems) {
 | |
|         if (Object.hasOwnProperty.call(hotItems, hot)) {
 | |
|             const element = hotItems[hot];
 | |
| 
 | |
|             const h2Element = await element.$("h2");
 | |
|             const pElement = await element.$("p");
 | |
| 
 | |
|             const title = h2Element != null ? await h2Element.evaluate(e => e.textContent) : "";
 | |
|             const excerpt = pElement != null ? await pElement.evaluate(e => e.textContent) : "";
 | |
|             const createTime = Date.now();
 | |
|             hotText.push({ title, excerpt, createTime });
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     fs.writeFileSync("./data/zhihuData.json", JSON.stringify(hotText, null, 2));
 | |
| 
 | |
|     const url = process.env.URL;
 | |
|     console.log(process.env.URL);
 | |
| 
 | |
|     try {
 | |
|         const response = await fetch(url, {
 | |
|             method: "POST",
 | |
|             headers: {
 | |
|                 "Content-Type": "application/json",
 | |
|             },
 | |
|             body: JSON.stringify(hotText, null, 2),
 | |
|         });
 | |
| 
 | |
|         if (!response.ok) {
 | |
|             throw new Error(`Http error! status : ${response.status}`);
 | |
|         }
 | |
| 
 | |
|         const responseData = await response.json();
 | |
|         console.log("Repsonse data", responseData);
 | |
|     } catch (error) {
 | |
|         console.error(error);
 | |
|     }
 | |
| 
 | |
|     await browser.close();
 | |
| })();
 | 
