-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathnQuesFromGFG_LC.js
145 lines (129 loc) · 4.46 KB
/
nQuesFromGFG_LC.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
const puppeteer = require('puppeteer');
let createPDF=require("./convertJSON2PDF")
let getQuestionsGFG= require("./getQuestionsFromGFG").getQues;
let getQuestionsLC = require("./getQuestionsFromLC").getQues;
const readline = require("readline");
let questions = {}
let mainPage;
let mainBrowser;
let rl = readline.createInterface(
process.stdin,
process.stdout
)
rl.question("Which DSA do you want to practice ? \n", async function (topic) {
rl.question("Number of Questions you want to practice\n",async function(numQues){
rl.question("Enter your difficulty level:(Easy,Medium,Hard,All)\n",async function(difficulty)
{
if(difficulty.toLowerCase()=="easy")
{
await questionsGFG(topic,numQues,0);
await questionsLC(topic,numQues,0);
}
else if(difficulty.toLowerCase()=="medium")
{
await questionsGFG(topic,numQues,1);
await questionsLC(topic,numQues,1);
}
else if(difficulty.toLowerCase()=="hard")
{
await questionsGFG(topic,numQues,2);
await questionsLC(topic,numQues,2);
}
else
{
await questionsGFG(topic,numQues);
await questionsLC(topic,numQues);
}
rl.close();
})
})
})
async function questionsGFG(dsaTopic, numQues, difficulty) {
const browser = await puppeteer.launch({
headless: false,
defaultViewport: null,
args: ["--start-maximized"],
slowMo: 50
});
let allPages = await browser.pages();
const pageGFG = allPages[0];
await pageGFG.setDefaultTimeout(60000)
mainBrowser=browser;
mainPage=pageGFG;
await pageGFG.goto('https://practice.geeksforgeeks.org/explore/?page=1');
await pageGFG.reload();
await pageGFG.waitForSelector(".panel.problem-block div>span",{visible:true})
await pageGFG.waitForSelector("div[href='#collapse4'] h4");
await pageGFG.evaluate(function () {
document.querySelector("div[href='#collapse4'] h4").click();
document.querySelector("#moreCategories").click();
})
await pageGFG.waitForSelector("#searchCategories");
await pageGFG.type("#searchCategories", dsaTopic)
await pageGFG.$('[style="font-size: 12px; padding: 10px; display: block;"]')
.then(async function(topicAvailable)
{
if(topicAvailable!=null)
await pageGFG.click('[style="font-size: 12px; padding: 10px; display: block;"]', { delay: 2000 })
else
{
console.log(`${dsaTopic} questions are not availabe on GFG`);
await questionsLC(dsaTopic,numQues,difficulty);
process.exit(0);
}
})
await pageGFG.click("#selectCategoryModal", { delay: 500 })
await pageGFG.click("div[href='#collapse1'] h4", { delay: 2000 });
if(difficulty==0)
{
questions["Easy Questions: "] = await getQuestionsGFG(pageGFG, numQues,0, false);
}
else if(difficulty==1)
{
questions["Medium Questions: "] = await getQuestionsGFG(pageGFG, numQues,1, false)
}
else if(difficulty==2)
{
questions["Hard Questions: "] = await getQuestionsGFG(pageGFG, numQues,2, false)
}
else
{
questions["Easy Questions: "] = await getQuestionsGFG(pageGFG, numQues, 0, true);
questions["Medium Questions: "] = await getQuestionsGFG(pageGFG, numQues, 1, true)
questions["Hard Questions: "] = await getQuestionsGFG(pageGFG, numQues, 2, true)
}
createPDF(JSON.stringify(questions),dsaTopic,"GFG");
}
async function questionsLC(dsaTopic,numQues, difficulty) {
const pageLC = mainPage;
await pageLC.goto('https://leetcode.com/problemset/all/');
await pageLC.click("#headlessui-popover-button-17", { delay: 1000 })
await pageLC.click("[placeholder='Filter topics']", { delay: 1000 })
await pageLC.type("[placeholder='Filter topics']", dsaTopic)
await pageLC.$(".mt-4.text-red-s")
.then(async function(questionsAvailable)
{
if(questionsAvailable==null)
await pageLC.click(".flex.flex-wrap.py-4.-m-1 span")
else
{
console.log(`${dsaTopic} questions not available on LeetCode.`);
process.exit(0);
}
})
if(difficulty==0)
questions["Easy Questions: "] = await getQuestionsLC(pageLC, difficulty, numQues);
else if(difficulty==1)
questions["Medium Questions: "] = await getQuestionsLC(pageLC, difficulty, numQues);
else if(difficulty==2)
questions["Hard Questions: "] = await getQuestionsLC(pageLC, difficulty, numQues);
else
{
questions["Easy Questions: "] = await getQuestionsLC(pageLC, 0, numQues);
questions["Medium Questions: "] = await getQuestionsLC(pageLC, 1, numQues);
questions["Hard Questions: "] = await getQuestionsLC(pageLC, 2, numQues);
}
createPDF(JSON.stringify(questions),dsaTopic,"LeetCode");
mainBrowser.close();
}
module.exports;