From 05fad888e823c3f6271b4b14f884ce725d8df841 Mon Sep 17 00:00:00 2001 From: ShivSt Date: Tue, 15 Sep 2020 17:19:53 +0530 Subject: [PATCH 1/2] Script added for saving GeeksforGeeks article as pdf #229 --- .../downloader.py | 49 ++++++++++++++++++ .../download GeeksForGeeks articles/readme.md | 22 ++++++++ .../requirements.txt | 2 + .../screenshot.jpg | Bin 0 -> 46211 bytes 4 files changed, 73 insertions(+) create mode 100644 projects/download GeeksForGeeks articles/downloader.py create mode 100644 projects/download GeeksForGeeks articles/readme.md create mode 100644 projects/download GeeksForGeeks articles/requirements.txt create mode 100644 projects/download GeeksForGeeks articles/screenshot.jpg diff --git a/projects/download GeeksForGeeks articles/downloader.py b/projects/download GeeksForGeeks articles/downloader.py new file mode 100644 index 000000000..14146ad06 --- /dev/null +++ b/projects/download GeeksForGeeks articles/downloader.py @@ -0,0 +1,49 @@ +# !/usr/bin/env python +from selenium import webdriver +import json +import requests + + +# article url +# URL = "https://www.geeksforgeeks.org/what-can-i-do-with-python/" + + +def download_article(URL): + # chrome options settings + chrome_options = webdriver.ChromeOptions() + settings = { + "recentDestinations": [ + {"id": "Save as PDF", "origin": "local", "account": ""} + ], + "selectedDestinationId": "Save as PDF", + "version": 2, + } + prefs = { + "printing.print_preview_sticky_settings.appState": json.dumps(settings) + } + chrome_options.add_experimental_option("prefs", prefs) + chrome_options.add_argument("--kiosk-printing") + chrome_options.binary_location = ( + r"C:\Program Files (x86)/" + + r"BraveSoftware\Brave-Browser\Application\brave.exe" + ) + CHROMEDRIVER_PATH = r"chromedriver.exe" + + # launch browser with predefined settings + browser = webdriver.Chrome( + executable_path=CHROMEDRIVER_PATH, options=chrome_options + ) + browser.get(URL) + + # launch print and save as pdf + browser.execute_script("window.print();") + browser.close() + + +if __name__ == "__main__": + URL = input("provide article URL: ") + if requests.get(URL).status_code == 200: + download_article(URL) + print("Your article is successfully downloaded") + else: + print("Enter a valid working URL") diff --git a/projects/download GeeksForGeeks articles/readme.md b/projects/download GeeksForGeeks articles/readme.md new file mode 100644 index 000000000..de1a0ffeb --- /dev/null +++ b/projects/download GeeksForGeeks articles/readme.md @@ -0,0 +1,22 @@ +# Download GeeksForGeeks Articles as pdf + +This script take the link to a GeeksForGeeks article as input and store the complete article as a pdf. + +### Prerequisites + +* selenium +* requests +* Run `pip install -r requirements.txt` to install required external modules. + +### How to run the script + +- Execute `python3 downloader.py` +- Type in URL of article when prompted. + +### Screenshot/GIF showing the sample use of the script + +![Screenshot of the Output](Screenshot.jpg) + +## *Author Name* + +[Shiv Thakur](https://github.com/ShivSt) \ No newline at end of file diff --git a/projects/download GeeksForGeeks articles/requirements.txt b/projects/download GeeksForGeeks articles/requirements.txt new file mode 100644 index 000000000..90330a778 --- /dev/null +++ b/projects/download GeeksForGeeks articles/requirements.txt @@ -0,0 +1,2 @@ +requests==2.24.0 +selenium==3.141.0 diff --git a/projects/download GeeksForGeeks articles/screenshot.jpg b/projects/download GeeksForGeeks articles/screenshot.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a8fce8eda827dfc5c0402a70c7129a6d96ad5eea GIT binary patch literal 46211 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 B_w4`x literal 0 HcmV?d00001 From f815c8a45144989b96f125561d5688270d990be1 Mon Sep 17 00:00:00 2001 From: ShivSt Date: Thu, 17 Sep 2020 13:47:17 +0530 Subject: [PATCH 2/2] removed static location requirements --- .../downloader.py | 23 +++++++++++-------- .../download GeeksForGeeks articles/readme.md | 3 ++- .../requirements.txt | 1 + 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/projects/download GeeksForGeeks articles/downloader.py b/projects/download GeeksForGeeks articles/downloader.py index 14146ad06..7742edca9 100644 --- a/projects/download GeeksForGeeks articles/downloader.py +++ b/projects/download GeeksForGeeks articles/downloader.py @@ -1,5 +1,6 @@ # !/usr/bin/env python from selenium import webdriver +from webdriver_manager.chrome import ChromeDriverManager import json import requests @@ -8,7 +9,7 @@ # URL = "https://www.geeksforgeeks.org/what-can-i-do-with-python/" -def download_article(URL): +def get_driver(): # chrome options settings chrome_options = webdriver.ChromeOptions() settings = { @@ -23,16 +24,16 @@ def download_article(URL): } chrome_options.add_experimental_option("prefs", prefs) chrome_options.add_argument("--kiosk-printing") - chrome_options.binary_location = ( - r"C:\Program Files (x86)/" - + r"BraveSoftware\Brave-Browser\Application\brave.exe" - ) - CHROMEDRIVER_PATH = r"chromedriver.exe" # launch browser with predefined settings browser = webdriver.Chrome( - executable_path=CHROMEDRIVER_PATH, options=chrome_options + executable_path=ChromeDriverManager().install(), options=chrome_options ) + return browser + + +def download_article(URL): + browser = get_driver() browser.get(URL) # launch print and save as pdf @@ -42,8 +43,12 @@ def download_article(URL): if __name__ == "__main__": URL = input("provide article URL: ") + # check if the url is valid/reachable if requests.get(URL).status_code == 200: - download_article(URL) - print("Your article is successfully downloaded") + try: + download_article(URL) + print("Your article is successfully downloaded") + except Exception as e: + print(e) else: print("Enter a valid working URL") diff --git a/projects/download GeeksForGeeks articles/readme.md b/projects/download GeeksForGeeks articles/readme.md index de1a0ffeb..924ab5295 100644 --- a/projects/download GeeksForGeeks articles/readme.md +++ b/projects/download GeeksForGeeks articles/readme.md @@ -1,11 +1,12 @@ # Download GeeksForGeeks Articles as pdf -This script take the link to a GeeksForGeeks article as input and store the complete article as a pdf. +This script take a link of GeeksForGeeks article as input and download the complete article as a pdf at default download location. ### Prerequisites * selenium * requests +* webdriver-manager * Run `pip install -r requirements.txt` to install required external modules. ### How to run the script diff --git a/projects/download GeeksForGeeks articles/requirements.txt b/projects/download GeeksForGeeks articles/requirements.txt index 90330a778..a65ab54dc 100644 --- a/projects/download GeeksForGeeks articles/requirements.txt +++ b/projects/download GeeksForGeeks articles/requirements.txt @@ -1,2 +1,3 @@ requests==2.24.0 selenium==3.141.0 +webdriver-manager==3.2.2 \ No newline at end of file