umpaper-fetch 1.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- umpaper_fetch-1.0.0/LICENSE +22 -0
- umpaper_fetch-1.0.0/MANIFEST.in +10 -0
- umpaper_fetch-1.0.0/PKG-INFO +462 -0
- umpaper_fetch-1.0.0/README.md +413 -0
- umpaper_fetch-1.0.0/TROUBLESHOOTING.md +165 -0
- umpaper_fetch-1.0.0/auth/__init__.py +1 -0
- umpaper_fetch-1.0.0/auth/chrome_fix.py +119 -0
- umpaper_fetch-1.0.0/auth/um_authenticator.py +521 -0
- umpaper_fetch-1.0.0/downloader/__init__.py +1 -0
- umpaper_fetch-1.0.0/downloader/pdf_downloader.py +207 -0
- umpaper_fetch-1.0.0/pyproject.toml +72 -0
- umpaper_fetch-1.0.0/requirements.txt +8 -0
- umpaper_fetch-1.0.0/scraper/__init__.py +1 -0
- umpaper_fetch-1.0.0/scraper/paper_scraper.py +316 -0
- umpaper_fetch-1.0.0/setup.cfg +4 -0
- umpaper_fetch-1.0.0/setup.py +83 -0
- umpaper_fetch-1.0.0/umpaper_fetch/__init__.py +26 -0
- umpaper_fetch-1.0.0/umpaper_fetch/auth/__init__.py +1 -0
- umpaper_fetch-1.0.0/umpaper_fetch/auth/chrome_fix.py +119 -0
- umpaper_fetch-1.0.0/umpaper_fetch/auth/um_authenticator.py +521 -0
- umpaper_fetch-1.0.0/umpaper_fetch/cli.py +316 -0
- umpaper_fetch-1.0.0/umpaper_fetch/downloader/__init__.py +1 -0
- umpaper_fetch-1.0.0/umpaper_fetch/downloader/pdf_downloader.py +207 -0
- umpaper_fetch-1.0.0/umpaper_fetch/scraper/__init__.py +1 -0
- umpaper_fetch-1.0.0/umpaper_fetch/scraper/paper_scraper.py +316 -0
- umpaper_fetch-1.0.0/umpaper_fetch/utils/__init__.py +1 -0
- umpaper_fetch-1.0.0/umpaper_fetch/utils/logger.py +67 -0
- umpaper_fetch-1.0.0/umpaper_fetch/utils/zip_creator.py +299 -0
- umpaper_fetch-1.0.0/umpaper_fetch.egg-info/PKG-INFO +462 -0
- umpaper_fetch-1.0.0/umpaper_fetch.egg-info/SOURCES.txt +36 -0
- umpaper_fetch-1.0.0/umpaper_fetch.egg-info/dependency_links.txt +1 -0
- umpaper_fetch-1.0.0/umpaper_fetch.egg-info/entry_points.txt +2 -0
- umpaper_fetch-1.0.0/umpaper_fetch.egg-info/not-zip-safe +1 -0
- umpaper_fetch-1.0.0/umpaper_fetch.egg-info/requires.txt +15 -0
- umpaper_fetch-1.0.0/umpaper_fetch.egg-info/top_level.txt +8 -0
- umpaper_fetch-1.0.0/utils/__init__.py +1 -0
- umpaper_fetch-1.0.0/utils/logger.py +67 -0
- umpaper_fetch-1.0.0/utils/zip_creator.py +299 -0
@@ -0,0 +1,22 @@
|
|
1
|
+
MIT License
|
2
|
+
|
3
|
+
Copyright (c) 2025 UM Paper Fetch
|
4
|
+
|
5
|
+
Marcus Mah Qing Fung
|
6
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
+
of this software and associated documentation files (the "Software"), to deal
|
8
|
+
in the Software without restriction, including without limitation the rights
|
9
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
+
copies of the Software, and to permit persons to whom the Software is
|
11
|
+
furnished to do so, subject to the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be included in all
|
14
|
+
copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
22
|
+
SOFTWARE.
|
@@ -0,0 +1,462 @@
|
|
1
|
+
Metadata-Version: 2.4
|
2
|
+
Name: umpaper-fetch
|
3
|
+
Version: 1.0.0
|
4
|
+
Summary: Automated downloader for University Malaya past year exam papers
|
5
|
+
Home-page: https://github.com/MarcusMQF/umpaper-fetch
|
6
|
+
Author: Marcus Mah
|
7
|
+
Author-email: Marcus Mah <marcusmah6969@gmail.com>
|
8
|
+
License: MIT
|
9
|
+
Project-URL: Homepage, https://github.com/MarcusMQF/umpaper-fetch
|
10
|
+
Project-URL: Documentation, https://github.com/MarcusMQF/umpaper-fetch#readme
|
11
|
+
Project-URL: Repository, https://github.com/MarcusMQF/umpaper-fetch
|
12
|
+
Project-URL: Bug Reports, https://github.com/MarcusMQF/umpaper-fetch/issues
|
13
|
+
Keywords: university,malaya,um,exam,papers,downloader,automation,selenium
|
14
|
+
Classifier: Development Status :: 4 - Beta
|
15
|
+
Classifier: Intended Audience :: Education
|
16
|
+
Classifier: Topic :: Education
|
17
|
+
Classifier: Topic :: Internet :: WWW/HTTP :: Browsers
|
18
|
+
Classifier: Topic :: Utilities
|
19
|
+
Classifier: License :: OSI Approved :: MIT License
|
20
|
+
Classifier: Programming Language :: Python :: 3
|
21
|
+
Classifier: Programming Language :: Python :: 3.8
|
22
|
+
Classifier: Programming Language :: Python :: 3.9
|
23
|
+
Classifier: Programming Language :: Python :: 3.10
|
24
|
+
Classifier: Programming Language :: Python :: 3.11
|
25
|
+
Classifier: Programming Language :: Python :: 3.12
|
26
|
+
Classifier: Operating System :: OS Independent
|
27
|
+
Classifier: Environment :: Console
|
28
|
+
Requires-Python: >=3.8
|
29
|
+
Description-Content-Type: text/markdown
|
30
|
+
License-File: LICENSE
|
31
|
+
Requires-Dist: selenium>=4.15.2
|
32
|
+
Requires-Dist: requests>=2.31.0
|
33
|
+
Requires-Dist: beautifulsoup4>=4.12.2
|
34
|
+
Requires-Dist: webdriver-manager>=4.0.1
|
35
|
+
Requires-Dist: lxml>=4.9.3
|
36
|
+
Requires-Dist: urllib3>=2.0.7
|
37
|
+
Requires-Dist: certifi>=2023.7.22
|
38
|
+
Requires-Dist: tqdm>=4.66.1
|
39
|
+
Provides-Extra: dev
|
40
|
+
Requires-Dist: pytest>=7.0; extra == "dev"
|
41
|
+
Requires-Dist: pytest-cov>=4.0; extra == "dev"
|
42
|
+
Requires-Dist: black>=22.0; extra == "dev"
|
43
|
+
Requires-Dist: flake8>=5.0; extra == "dev"
|
44
|
+
Requires-Dist: mypy>=1.0; extra == "dev"
|
45
|
+
Dynamic: author
|
46
|
+
Dynamic: home-page
|
47
|
+
Dynamic: license-file
|
48
|
+
Dynamic: requires-python
|
49
|
+
|
50
|
+
# ๐ UM Past Year Paper Downloader - PaperFetch
|
51
|
+
|
52
|
+
**One-click bulk download solution for University Malaya (UM) past year exam papers**
|
53
|
+
|
54
|
+
Automate the tedious process of manually downloading past year papers one by one. Simply provide your UM credentials and subject code, and get all available papers in a single organized ZIP file.
|
55
|
+
|
56
|
+
---
|
57
|
+
|
58
|
+
## โจ Key Features
|
59
|
+
|
60
|
+
### ๐ **Core Functionality**
|
61
|
+
- **๐ One-Click Bulk Download**: Download all past year papers for any subject code automatically
|
62
|
+
- **๐ฆ Smart ZIP Organization**: Automatically organizes papers by year and creates a structured ZIP archive
|
63
|
+
- **๐ Secure Authentication**: Handles complex UM OpenAthens authentication flow seamlessly
|
64
|
+
- **โก Concurrent Downloads**: Multi-threaded downloading for faster performance
|
65
|
+
- **๐ Auto-Retry Logic**: Robust error handling with configurable retry attempts
|
66
|
+
- **๐ Real-time Progress**: Live progress bars and detailed status updates
|
67
|
+
|
68
|
+
### ๐ **File Organization**
|
69
|
+
- **๐ Hierarchical Structure**: Papers organized by subject โ year โ semester
|
70
|
+
- **๐ท๏ธ Smart File Naming**: Automatically detects and preserves meaningful filenames
|
71
|
+
- **๐ Auto-Generated README**: Includes download summary and paper inventory in ZIP
|
72
|
+
- **๐๏ธ Organized Output**: Individual PDFs + consolidated ZIP file
|
73
|
+
- **๐งน Optional Cleanup**: Choice to keep individual files or ZIP only
|
74
|
+
|
75
|
+
### ๐ฅ๏ธ **User Experience**
|
76
|
+
- **๐ฑ Terminal-Based Interface**: Clean, intuitive command-line interface
|
77
|
+
- **๐ฏ Interactive Mode**: Prompts for credentials and settings when needed
|
78
|
+
- **โ๏ธ Command-Line Mode**: Full automation with command-line arguments
|
79
|
+
- **๐ Custom Download Locations**: Choose where to save your papers
|
80
|
+
- **๐ Browser Options**: Support for Edge, Chrome with auto-detection
|
81
|
+
- **๐ Comprehensive Logging**: Detailed logs for troubleshooting
|
82
|
+
|
83
|
+
### ๐ **Security & Reliability**
|
84
|
+
- **๐ก๏ธ Secure Password Input**: Hidden password entry (never stored/logged)
|
85
|
+
- **๐งน Session Cleanup**: Automatic browser data cleanup after use
|
86
|
+
- **โ
Download Verification**: Validates PDF integrity after download
|
87
|
+
- **๐ HTTPS Enforcement**: Secure connections to UM servers
|
88
|
+
- **โฑ๏ธ Configurable Timeouts**: Customizable session and download timeouts
|
89
|
+
|
90
|
+
---
|
91
|
+
|
92
|
+
## ๐ Complete Command Reference
|
93
|
+
|
94
|
+
### **Available Commands (9 total)**
|
95
|
+
|
96
|
+
| Command | Short | Description | Default |
|
97
|
+
|---------|-------|-------------|---------|
|
98
|
+
| `--username` | `-u` | UM username (without @siswa.um.edu.my) | *prompted* |
|
99
|
+
| `--subject-code` | `-s` | Subject code to search for (e.g., WIA1005) | *prompted* |
|
100
|
+
| `--output-dir` | `-o` | Custom download directory | `./downloads` |
|
101
|
+
| `--browser` | `-b` | Browser choice: `auto`, `chrome`, `edge` | `edge` |
|
102
|
+
| `--timeout` | | Session timeout in seconds | `30` |
|
103
|
+
| `--max-retries` | | Maximum retry attempts for failed downloads | `3` |
|
104
|
+
| `--show-browser` | | Show browser window (disable headless mode) | `false` |
|
105
|
+
| `--no-location-prompt` | | Skip interactive location selection | `false` |
|
106
|
+
| `--verbose` | `-v` | Enable detailed debug logging | `false` |
|
107
|
+
|
108
|
+
### **Usage Examples**
|
109
|
+
|
110
|
+
**1. Interactive Mode (Recommended for first-time users)**
|
111
|
+
```bash
|
112
|
+
python main.py
|
113
|
+
```
|
114
|
+
*Prompts for username, password, subject code, and download location*
|
115
|
+
|
116
|
+
**2. Quick Command-Line Mode**
|
117
|
+
```bash
|
118
|
+
python main.py --username john_doe --subject-code WIA1005
|
119
|
+
```
|
120
|
+
*Only prompts for password*
|
121
|
+
|
122
|
+
**3. Fully Automated Mode**
|
123
|
+
```bash
|
124
|
+
python main.py -u student123 -s WXES1116 -o "C:/Downloads/Papers" --no-location-prompt
|
125
|
+
```
|
126
|
+
*No prompts except secure password entry*
|
127
|
+
|
128
|
+
**4. Debug Mode with Visible Browser**
|
129
|
+
```bash
|
130
|
+
python main.py --subject-code WIA1005 --show-browser --verbose
|
131
|
+
```
|
132
|
+
*Shows browser actions and detailed logging*
|
133
|
+
|
134
|
+
**5. High-Performance Mode**
|
135
|
+
```bash
|
136
|
+
python main.py -s WIA1005 --max-retries 5 --timeout 60
|
137
|
+
```
|
138
|
+
*Extended timeouts and retries for slow connections*
|
139
|
+
|
140
|
+
**6. Custom Browser Selection**
|
141
|
+
```bash
|
142
|
+
python main.py --browser chrome --subject-code CSC1025
|
143
|
+
```
|
144
|
+
*Force use of Chrome browser*
|
145
|
+
|
146
|
+
---
|
147
|
+
|
148
|
+
## ๐ Quick Start Guide
|
149
|
+
|
150
|
+
### **Prerequisites**
|
151
|
+
- Python 3.8+ installed
|
152
|
+
- One of these browsers: **Microsoft Edge** (recommended), Google Chrome
|
153
|
+
- UM student account with active credentials
|
154
|
+
- Stable internet connection
|
155
|
+
|
156
|
+
### **Installation**
|
157
|
+
```bash
|
158
|
+
# 1. Clone/download this repository
|
159
|
+
git clone <repository-url>
|
160
|
+
cd um-past-year-downloader
|
161
|
+
|
162
|
+
# 2. Install dependencies
|
163
|
+
pip install -r requirements.txt
|
164
|
+
|
165
|
+
# 3. Ready to use!
|
166
|
+
python main.py
|
167
|
+
```
|
168
|
+
|
169
|
+
### **First Run**
|
170
|
+
```bash
|
171
|
+
python main.py
|
172
|
+
```
|
173
|
+
Follow the interactive prompts:
|
174
|
+
1. Enter your UM username (without @siswa.um.edu.my)
|
175
|
+
2. Enter your password securely
|
176
|
+
3. Enter subject code (e.g., WIA1005)
|
177
|
+
4. Choose download location
|
178
|
+
5. Confirm download of found papers
|
179
|
+
|
180
|
+
---
|
181
|
+
|
182
|
+
## ๐ What You Get
|
183
|
+
|
184
|
+
### **Organized File Structure**
|
185
|
+
```
|
186
|
+
๐ downloads/
|
187
|
+
โโโ ๐ WIA1005/
|
188
|
+
โ โโโ ๐ Year_2023/
|
189
|
+
โ โ โโโ WIA1005_Final_2023_S1.pdf
|
190
|
+
โ โ โโโ WIA1005_Final_2023_S2.pdf
|
191
|
+
โ โโโ ๐ Year_2022/
|
192
|
+
โ โ โโโ WIA1005_Final_2022_S1.pdf
|
193
|
+
โ โ โโโ WIA1005_Final_2022_S2.pdf
|
194
|
+
โ โโโ ๐ Unsorted/
|
195
|
+
โ โโโ WIA1005_Additional_Papers.pdf
|
196
|
+
โโโ ๐ฆ WIA1005_past_years.zip
|
197
|
+
โโโ ๐ WIA1005_README.txt
|
198
|
+
```
|
199
|
+
|
200
|
+
### **ZIP Archive Contents**
|
201
|
+
- **Hierarchical Organization**: Subject โ Year โ Files
|
202
|
+
- **Automatic README**: Download summary and file inventory
|
203
|
+
- **Optimized Compression**: Balanced compression for size/speed
|
204
|
+
- **Preserve Metadata**: Original filenames and dates maintained
|
205
|
+
|
206
|
+
### **Generated Reports**
|
207
|
+
- **Download Summary**: Shows total papers found and downloaded
|
208
|
+
- **Failed Downloads**: Lists any papers that couldn't be downloaded
|
209
|
+
- **File Inventory**: Complete list of papers with years and types
|
210
|
+
- **Timestamp**: When the download was performed
|
211
|
+
|
212
|
+
---
|
213
|
+
|
214
|
+
## ๐ง Advanced Configuration
|
215
|
+
|
216
|
+
### **Browser Selection Guide**
|
217
|
+
|
218
|
+
| Browser | Best For | Advantages | Notes |
|
219
|
+
|---------|----------|------------|-------|
|
220
|
+
| **Edge** | Windows users | Built-in, no driver conflicts, memory efficient | **Recommended** |
|
221
|
+
| **Chrome** | Mac/Linux users | Wide compatibility, stable | May need driver updates |
|
222
|
+
| **Auto** | Uncertain | Detects best available | Falls back to Edge โ Chrome |
|
223
|
+
|
224
|
+
### **Performance Tuning**
|
225
|
+
```bash
|
226
|
+
# For slow connections
|
227
|
+
python main.py --timeout 60 --max-retries 5
|
228
|
+
|
229
|
+
# For fast connections
|
230
|
+
python main.py --timeout 15 --max-retries 2
|
231
|
+
|
232
|
+
# For debug/troubleshooting
|
233
|
+
python main.py --verbose --show-browser
|
234
|
+
```
|
235
|
+
|
236
|
+
### **Output Directory Options**
|
237
|
+
- **Default**: `./downloads` (project folder)
|
238
|
+
- **Custom**: Any valid path (e.g., `C:/Users/Student/Papers`)
|
239
|
+
- **Interactive**: Choose during runtime
|
240
|
+
- **Auto**: Use `--no-location-prompt` to skip selection
|
241
|
+
|
242
|
+
---
|
243
|
+
|
244
|
+
## ๐งช Testing & Validation
|
245
|
+
|
246
|
+
### **Built-in Test Scripts**
|
247
|
+
|
248
|
+
**1. Complete System Test**
|
249
|
+
```bash
|
250
|
+
python test_setup.py
|
251
|
+
```
|
252
|
+
*Tests Python environment, dependencies, browser drivers, and network connectivity*
|
253
|
+
|
254
|
+
**2. Authentication Test**
|
255
|
+
```bash
|
256
|
+
python test_login.py
|
257
|
+
```
|
258
|
+
*Tests only the UM login process (useful for credential verification)*
|
259
|
+
|
260
|
+
**3. Search Functionality Test**
|
261
|
+
```bash
|
262
|
+
python test_search_debug.py
|
263
|
+
```
|
264
|
+
*Tests paper search without downloading*
|
265
|
+
|
266
|
+
### **Validation Features**
|
267
|
+
- **PDF Integrity Check**: Verifies downloaded files are valid PDFs
|
268
|
+
- **Size Validation**: Ensures files aren't empty or corrupted
|
269
|
+
- **Download Verification**: Confirms all expected papers were downloaded
|
270
|
+
- **ZIP Integrity**: Validates ZIP file creation and contents
|
271
|
+
|
272
|
+
---
|
273
|
+
|
274
|
+
## ๐ ๏ธ Technical Architecture
|
275
|
+
|
276
|
+
### **Modular Components**
|
277
|
+
|
278
|
+
**1. Authentication (`auth/um_authenticator.py`)**
|
279
|
+
- Handles complex UM OpenAthens SAML authentication
|
280
|
+
- Manages session cookies and security tokens
|
281
|
+
- Supports multiple browser backends
|
282
|
+
|
283
|
+
**2. Paper Discovery (`scraper/paper_scraper.py`)**
|
284
|
+
- Searches UM repository by subject code
|
285
|
+
- Extracts paper metadata (year, semester, type)
|
286
|
+
- Handles pagination and result filtering
|
287
|
+
|
288
|
+
**3. Download Engine (`downloader/pdf_downloader.py`)**
|
289
|
+
- Concurrent multi-threaded downloads
|
290
|
+
- Progress tracking with visual indicators
|
291
|
+
- Retry logic with exponential backoff
|
292
|
+
- File integrity validation
|
293
|
+
|
294
|
+
**4. Archive Creator (`utils/zip_creator.py`)**
|
295
|
+
- Intelligent file organization by year/semester
|
296
|
+
- Optimized compression algorithms
|
297
|
+
- Auto-generated documentation
|
298
|
+
- Metadata preservation
|
299
|
+
|
300
|
+
**5. Logging System (`utils/logger.py`)**
|
301
|
+
- Structured logging with multiple levels
|
302
|
+
- Separate log files for debugging
|
303
|
+
- Performance metrics and timing
|
304
|
+
|
305
|
+
### **Dependencies**
|
306
|
+
- `selenium` - Web automation and browser control
|
307
|
+
- `requests` - HTTP session management
|
308
|
+
- `beautifulsoup4` - HTML parsing and data extraction
|
309
|
+
- `tqdm` - Progress bars and status indicators
|
310
|
+
- `webdriver-manager` - Automatic browser driver management
|
311
|
+
|
312
|
+
---
|
313
|
+
|
314
|
+
## ๐จ Troubleshooting
|
315
|
+
|
316
|
+
### **Common Issues & Solutions**
|
317
|
+
|
318
|
+
**โ Login Failed**
|
319
|
+
- โ
Verify username/password are correct
|
320
|
+
- โ
Check if your UM account is active
|
321
|
+
- โ
Try using Edge browser: `--browser edge`
|
322
|
+
- โ
Enable debug mode: `--verbose --show-browser`
|
323
|
+
|
324
|
+
**โ No Papers Found**
|
325
|
+
- โ
Verify subject code is correct (e.g., WIA1005, not wia1005)
|
326
|
+
- โ
Check if papers exist for that subject
|
327
|
+
- โ
Try different semester/year variations
|
328
|
+
|
329
|
+
**โ Download Errors**
|
330
|
+
- โ
Check internet connection stability
|
331
|
+
- โ
Increase timeout: `--timeout 60`
|
332
|
+
- โ
Increase retries: `--max-retries 5`
|
333
|
+
- โ
Check disk space in output directory
|
334
|
+
|
335
|
+
**โ Browser/WebDriver Issues**
|
336
|
+
- โ
**Windows users**: Use Edge first: `--browser edge`
|
337
|
+
- โ
Update browser to latest version
|
338
|
+
- โ
Try: `pip install --upgrade webdriver-manager`
|
339
|
+
- โ
See `TROUBLESHOOTING.md` for detailed solutions
|
340
|
+
|
341
|
+
### **Exit Codes**
|
342
|
+
- `0` - Success
|
343
|
+
- `1` - Authentication failure
|
344
|
+
- `2` - Network connectivity issues
|
345
|
+
- `3` - No papers found or download failed
|
346
|
+
- `4` - File system permissions error
|
347
|
+
- `130` - User cancelled (Ctrl+C)
|
348
|
+
|
349
|
+
---
|
350
|
+
|
351
|
+
## ๐ Performance Metrics
|
352
|
+
|
353
|
+
### **Typical Performance**
|
354
|
+
- **Authentication**: 5-10 seconds
|
355
|
+
- **Paper Search**: 2-5 seconds
|
356
|
+
- **Download Speed**: 2-5 MB/s per file (concurrent)
|
357
|
+
- **ZIP Creation**: 1-3 seconds
|
358
|
+
- **Total Time**: 30 seconds - 2 minutes (depending on paper count)
|
359
|
+
|
360
|
+
### **Optimization Features**
|
361
|
+
- **Concurrent Downloads**: Up to 4 simultaneous downloads
|
362
|
+
- **Intelligent Caching**: Avoids re-downloading existing files
|
363
|
+
- **Compressed Archives**: ZIP compression reduces file size by 10-30%
|
364
|
+
- **Progress Tracking**: Real-time ETA and speed indicators
|
365
|
+
|
366
|
+
---
|
367
|
+
|
368
|
+
## โ๏ธ Legal & Academic Use
|
369
|
+
|
370
|
+
### **Terms of Use**
|
371
|
+
- โ
**Educational Purpose Only**: For UM students' academic use
|
372
|
+
- โ
**Respect UM Policies**: Adheres to university terms of service
|
373
|
+
- โ
**No Circumvention**: Uses standard authentication methods
|
374
|
+
- โ
**Rate Limiting**: Respects server load limits
|
375
|
+
- โ
**Valid Credentials Required**: Must have active UM account
|
376
|
+
|
377
|
+
### **What This Tool Does NOT Do**
|
378
|
+
- โ Bypass any security measures
|
379
|
+
- โ Access restricted content
|
380
|
+
- โ Store or share credentials
|
381
|
+
- โ Violate copyright or academic policies
|
382
|
+
- โ Access content you don't have permission for
|
383
|
+
|
384
|
+
---
|
385
|
+
|
386
|
+
## ๐ก Tips for Best Experience
|
387
|
+
|
388
|
+
### **For Windows Users**
|
389
|
+
```bash
|
390
|
+
# Recommended command for Windows
|
391
|
+
python main.py --browser edge --subject-code WIA1005
|
392
|
+
```
|
393
|
+
|
394
|
+
### **For Mac/Linux Users**
|
395
|
+
```bash
|
396
|
+
# Recommended command for Mac/Linux
|
397
|
+
python main.py --browser chrome --subject-code WIA1005
|
398
|
+
```
|
399
|
+
|
400
|
+
### **For Slow Connections**
|
401
|
+
```bash
|
402
|
+
python main.py --timeout 90 --max-retries 5 --subject-code WIA1005
|
403
|
+
```
|
404
|
+
|
405
|
+
### **For Batch Processing**
|
406
|
+
```bash
|
407
|
+
# Create a batch script for multiple subjects
|
408
|
+
python main.py -s WIA1005 --no-location-prompt -o "./Papers/WIA1005"
|
409
|
+
python main.py -s WXES1116 --no-location-prompt -o "./Papers/WXES1116"
|
410
|
+
```
|
411
|
+
|
412
|
+
---
|
413
|
+
|
414
|
+
## ๐ค Support & Contributing
|
415
|
+
|
416
|
+
### **Getting Help**
|
417
|
+
1. **๐ Read `TROUBLESHOOTING.md`** - Comprehensive solution guide
|
418
|
+
2. **๐ Check logs** - Review log files for detailed error information
|
419
|
+
3. **๐งช Run tests** - Use `python test_setup.py` to validate environment
|
420
|
+
4. **๐ Try Edge browser** - Often resolves driver issues: `--browser edge`
|
421
|
+
|
422
|
+
### **Contributing**
|
423
|
+
Contributions welcome! Please:
|
424
|
+
1. Fork the repository
|
425
|
+
2. Create a feature branch
|
426
|
+
3. Make your changes with tests
|
427
|
+
4. Submit a pull request
|
428
|
+
5. Follow existing code style and documentation standards
|
429
|
+
|
430
|
+
---
|
431
|
+
|
432
|
+
## ๐ Disclaimer
|
433
|
+
|
434
|
+
**Disclaimer**: This tool is an unofficial utility created to help UM students access past year papers more efficiently. It is not affiliated with or endorsed by University Malaya. Users are responsible for complying with UM's terms of service and academic policies.
|
435
|
+
|
436
|
+
---
|
437
|
+
|
438
|
+
## ๐ฏ Quick Command Cheat Sheet
|
439
|
+
|
440
|
+
```bash
|
441
|
+
# Basic usage
|
442
|
+
python main.py
|
443
|
+
|
444
|
+
# Fast automated mode
|
445
|
+
python main.py -u username -s WIA1005 --no-location-prompt
|
446
|
+
|
447
|
+
# Debug mode
|
448
|
+
python main.py --verbose --show-browser -s WIA1005
|
449
|
+
|
450
|
+
# High performance
|
451
|
+
python main.py --max-retries 5 --timeout 60 -s WXES1116
|
452
|
+
|
453
|
+
# Custom location
|
454
|
+
python main.py -o "C:/Papers" -s CSC1025
|
455
|
+
|
456
|
+
# Windows optimized
|
457
|
+
python main.py --browser edge -s WIA1005
|
458
|
+
```
|
459
|
+
|
460
|
+
---
|
461
|
+
|
462
|
+
*Time to lock in for your final*
|