diff --git a/DownloadPyThreadKiller/DownloadPyThreadKiller.py b/DownloadPyThreadKiller/DownloadPyThreadKiller.py new file mode 100644 index 0000000..fed73bd --- /dev/null +++ b/DownloadPyThreadKiller/DownloadPyThreadKiller.py @@ -0,0 +1,154 @@ +__version__ = "2024.07.20.01" +__author__ = "Muthukumar Subramanian" + +""" +Download the PythreadKiller package and Install/Upgrade +""" + +import os +import platform +import subprocess +import time +from collections import OrderedDict +from selenium import webdriver +from selenium.webdriver.chrome.options import Options +from selenium.webdriver.common.by import By +from selenium.webdriver.support.ui import WebDriverWait +from selenium.webdriver.support import expected_conditions as EC +from selenium.common.exceptions import StaleElementReferenceException +from selenium.webdriver.support.ui import Select +from selenium.webdriver.common.action_chains import ActionChains +from selenium.webdriver.common.keys import Keys +from prettytable import PrettyTable +import re +import multiprocessing + + +class DownloadPyThreadKiller: + def __init__(self): + options = Options() + options.add_argument("--disable-notifications") + options.add_argument("no-sandbox") + options.add_argument("--disable-gpu") + options.add_argument("--disable-dev-shm-usage") + options.add_argument('--ignore-ssl-errors=yes') + options.add_argument('--ignore-certificate-errors') + options.add_argument("window-size=1400,600") + options.add_argument("headless=new") + + # Initialize Chrome WebDriver + self.browser = webdriver.Chrome(options=options) + self.browser.maximize_window() + self.browser.get('https://pypi.org/project/PyThreadKiller/') + time.sleep(2) + self.wait = WebDriverWait(self.browser, 10) + self.final_dict = OrderedDict({}) + + def get_download_dir(self): + """Get the default download directory based on the OS.""" + if platform.system() == "Windows": + return os.path.join(os.environ['USERPROFILE'], "Downloads") + else: + return os.path.join(os.path.expanduser("~"), "Downloads") + + def find_downloaded_file(self, download_dir, extension=".whl"): + """Find the most recently downloaded file with the given extension in the download directory.""" + files = [os.path.join(download_dir, f) for f in os.listdir(download_dir) if f.endswith(extension)] + return max(files, key=os.path.getctime) if files else None + + def delete_similar_files(self, download_dir): + """Delete all files in the download directory that match the pattern but are not the valid filename.""" + files_to_delete = [f for f in os.listdir(download_dir) if f.startswith('PyThreadKiller') and f.endswith('.whl')] + if files_to_delete: + for file in files_to_delete: + os.remove(os.path.join(download_dir, file)) + print(f"Deleted PyThreadKiller similar file(s): {file}") + + def download_files(self): + print("{:*^30}".format(" Script Start ")) + try: + # Click release history + click_release_history = self.wait.until(EC.element_to_be_clickable((By.XPATH, '//*[@id="history-tab"]'))) + click_release_history.click() + print("Process done for Release history") + + # Click latest version + click_latest_version = self.wait.until( + EC.element_to_be_clickable((By.XPATH, '//*[@id="content"]/div[2]/div/div[2]/a'))) + click_latest_version.click() + print("Process done for latest version") + + # Click download files tab + click_download_files = self.wait.until(EC.element_to_be_clickable((By.XPATH, '//*[@id="files-tab"]'))) + click_download_files.click() + print("Process done for Download files") + + # Get the download directory + download_dir_before = self.get_download_dir() + self.delete_similar_files(download_dir_before) + + # Click download .whl file + click_download_whl_file = self.wait.until( + EC.element_to_be_clickable((By.XPATH, '//*[@id="files"]/div[2]/div[2]/a[1]'))) + click_download_whl_file.click() + print("Process done for Select and download wheel(.whl) file") + time.sleep(5) + # Get the download directory + download_dir_after = self.get_download_dir() + + # Find the most recently downloaded file + downloaded_file = self.find_downloaded_file(download_dir_after) + if downloaded_file: + try: + print(f"Installing/upgrading: {downloaded_file}") + if platform.system() == "Windows": + # Install or upgrade the downloaded wheel file + sub_process_obj = subprocess.Popen( + ['cmd.exe', '/c', 'pip3.12 install %s --upgrade' % downloaded_file], + stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) + else: + # Install or upgrade the downloaded wheel file + sub_process_obj = subprocess.Popen(['bash', '-c', + 'pip3.12 install %s --upgrade' % downloaded_file], + stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) + output_data, output_err_data = sub_process_obj.communicate() + print(f"Pip output_data:\n {output_data}\noutput_err_data:\n {output_err_data}") + sub_process_obj.terminate() + print(f"Installed/Upgraded: {downloaded_file}") + except ValueError as e: + print(e) + except subprocess.CalledProcessError as e: + print(f"Error installing/upgrading {downloaded_file}: {e}") + + # Delete the downloaded file + os.remove(os.path.join(download_dir_after, downloaded_file)) + print(f"Deleted downloaded file: {downloaded_file}") + else: + print("No downloaded wheel file found.") + + except StaleElementReferenceException: + print("Observed exception in Try block") + + def execute_test_scenarios(self): + try: + self.download_files() + except StaleElementReferenceException: + print("Observed exception in Try block") + self.browser.quit() + print("{:*^30}".format(" Script End ")) + + +def main_script(): + cls_obj = DownloadPyThreadKiller() + cls_obj.execute_test_scenarios() + + +if __name__ == '__main__': + print("{:#^30}".format("Script Start")) + multiprocess_obj = multiprocessing.Process(target=main_script) + multiprocess_obj.start() + multiprocess_obj.join(timeout=120) + if multiprocess_obj.is_alive(): + multiprocess_obj.terminate() + + print("{:#^30}".format("Script End")) diff --git a/GithubAutoRefresh/AutoRefresh.py b/GithubAutoRefresh/AutoRefresh.py index 9cf7428..151b71d 100644 --- a/GithubAutoRefresh/AutoRefresh.py +++ b/GithubAutoRefresh/AutoRefresh.py @@ -1,30 +1,25 @@ -''' -Created on Nov 15, 2019 +""" +AutoRefresh +""" -@author: Muthukumar Subramanian -''' -from selenium import webdriver +__version__ = "2019.11.15.01" +__author__ = "Muthukumar Subramanian" + +from selenium import webdriver import time # set webdriver path here it may vary -browser = webdriver.Chrome(executable_path ="C:\\Users\\ms023673\\Documents\\Sel_driver\\Driver\\chromedriver_win32\\chromedriver.exe") - -# website_URL ="https://www.google.co.in/" -browser.get("https://github.com/kumarmuthu/python_logic") -browser.maximize_window() +browser = webdriver.Chrome() + +website_URL = "https://github.com/kumarmuthu/PythonWithSelenium" +browser.get(website_URL) +browser.maximize_window() -# refresh time -refreshrate = int(2) -while True: - b = 0 - for i in range(1, 6, 1): - print("I: ",i) - # This would keep running until you stop the compiler. - time.sleep(refreshrate) - browser.refresh() - if i == 5: - b =1 - print("break here") - if b == 1: +for i in range(1, 6): + time.sleep(2) + browser.refresh() + if i == 5: + print("Break here") break + browser.close() diff --git a/LICENSE b/LICENSE index d3087e4..7e8f1d1 100644 --- a/LICENSE +++ b/LICENSE @@ -1,277 +1,21 @@ -Eclipse Public License - v 2.0 - - THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE - PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION - OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. - -1. DEFINITIONS - -"Contribution" means: - - a) in the case of the initial Contributor, the initial content - Distributed under this Agreement, and - - b) in the case of each subsequent Contributor: - i) changes to the Program, and - ii) additions to the Program; - where such changes and/or additions to the Program originate from - and are Distributed by that particular Contributor. A Contribution - "originates" from a Contributor if it was added to the Program by - such Contributor itself or anyone acting on such Contributor's behalf. - Contributions do not include changes or additions to the Program that - are not Modified Works. - -"Contributor" means any person or entity that Distributes the Program. - -"Licensed Patents" mean patent claims licensable by a Contributor which -are necessarily infringed by the use or sale of its Contribution alone -or when combined with the Program. - -"Program" means the Contributions Distributed in accordance with this -Agreement. - -"Recipient" means anyone who receives the Program under this Agreement -or any Secondary License (as applicable), including Contributors. - -"Derivative Works" shall mean any work, whether in Source Code or other -form, that is based on (or derived from) the Program and for which the -editorial revisions, annotations, elaborations, or other modifications -represent, as a whole, an original work of authorship. - -"Modified Works" shall mean any work in Source Code or other form that -results from an addition to, deletion from, or modification of the -contents of the Program, including, for purposes of clarity any new file -in Source Code form that contains any contents of the Program. Modified -Works shall not include works that contain only declarations, -interfaces, types, classes, structures, or files of the Program solely -in each case in order to link to, bind by name, or subclass the Program -or Modified Works thereof. - -"Distribute" means the acts of a) distributing or b) making available -in any manner that enables the transfer of a copy. - -"Source Code" means the form of a Program preferred for making -modifications, including but not limited to software source code, -documentation source, and configuration files. - -"Secondary License" means either the GNU General Public License, -Version 2.0, or any later versions of that license, including any -exceptions or additional permissions as identified by the initial -Contributor. - -2. GRANT OF RIGHTS - - a) Subject to the terms of this Agreement, each Contributor hereby - grants Recipient a non-exclusive, worldwide, royalty-free copyright - license to reproduce, prepare Derivative Works of, publicly display, - publicly perform, Distribute and sublicense the Contribution of such - Contributor, if any, and such Derivative Works. - - b) Subject to the terms of this Agreement, each Contributor hereby - grants Recipient a non-exclusive, worldwide, royalty-free patent - license under Licensed Patents to make, use, sell, offer to sell, - import and otherwise transfer the Contribution of such Contributor, - if any, in Source Code or other form. This patent license shall - apply to the combination of the Contribution and the Program if, at - the time the Contribution is added by the Contributor, such addition - of the Contribution causes such combination to be covered by the - Licensed Patents. The patent license shall not apply to any other - combinations which include the Contribution. No hardware per se is - licensed hereunder. - - c) Recipient understands that although each Contributor grants the - licenses to its Contributions set forth herein, no assurances are - provided by any Contributor that the Program does not infringe the - patent or other intellectual property rights of any other entity. - Each Contributor disclaims any liability to Recipient for claims - brought by any other entity based on infringement of intellectual - property rights or otherwise. As a condition to exercising the - rights and licenses granted hereunder, each Recipient hereby - assumes sole responsibility to secure any other intellectual - property rights needed, if any. For example, if a third party - patent license is required to allow Recipient to Distribute the - Program, it is Recipient's responsibility to acquire that license - before distributing the Program. - - d) Each Contributor represents that to its knowledge it has - sufficient copyright rights in its Contribution, if any, to grant - the copyright license set forth in this Agreement. - - e) Notwithstanding the terms of any Secondary License, no - Contributor makes additional grants to any Recipient (other than - those set forth in this Agreement) as a result of such Recipient's - receipt of the Program under the terms of a Secondary License - (if permitted under the terms of Section 3). - -3. REQUIREMENTS - -3.1 If a Contributor Distributes the Program in any form, then: - - a) the Program must also be made available as Source Code, in - accordance with section 3.2, and the Contributor must accompany - the Program with a statement that the Source Code for the Program - is available under this Agreement, and informs Recipients how to - obtain it in a reasonable manner on or through a medium customarily - used for software exchange; and - - b) the Contributor may Distribute the Program under a license - different than this Agreement, provided that such license: - i) effectively disclaims on behalf of all other Contributors all - warranties and conditions, express and implied, including - warranties or conditions of title and non-infringement, and - implied warranties or conditions of merchantability and fitness - for a particular purpose; - - ii) effectively excludes on behalf of all other Contributors all - liability for damages, including direct, indirect, special, - incidental and consequential damages, such as lost profits; - - iii) does not attempt to limit or alter the recipients' rights - in the Source Code under section 3.2; and - - iv) requires any subsequent distribution of the Program by any - party to be under a license that satisfies the requirements - of this section 3. - -3.2 When the Program is Distributed as Source Code: - - a) it must be made available under this Agreement, or if the - Program (i) is combined with other material in a separate file or - files made available under a Secondary License, and (ii) the initial - Contributor attached to the Source Code the notice described in - Exhibit A of this Agreement, then the Program may be made available - under the terms of such Secondary Licenses, and - - b) a copy of this Agreement must be included with each copy of - the Program. - -3.3 Contributors may not remove or alter any copyright, patent, -trademark, attribution notices, disclaimers of warranty, or limitations -of liability ("notices") contained within the Program from any copy of -the Program which they Distribute, provided that Contributors may add -their own appropriate notices. - -4. COMMERCIAL DISTRIBUTION - -Commercial distributors of software may accept certain responsibilities -with respect to end users, business partners and the like. While this -license is intended to facilitate the commercial use of the Program, -the Contributor who includes the Program in a commercial product -offering should do so in a manner which does not create potential -liability for other Contributors. Therefore, if a Contributor includes -the Program in a commercial product offering, such Contributor -("Commercial Contributor") hereby agrees to defend and indemnify every -other Contributor ("Indemnified Contributor") against any losses, -damages and costs (collectively "Losses") arising from claims, lawsuits -and other legal actions brought by a third party against the Indemnified -Contributor to the extent caused by the acts or omissions of such -Commercial Contributor in connection with its distribution of the Program -in a commercial product offering. The obligations in this section do not -apply to any claims or Losses relating to any actual or alleged -intellectual property infringement. In order to qualify, an Indemnified -Contributor must: a) promptly notify the Commercial Contributor in -writing of such claim, and b) allow the Commercial Contributor to control, -and cooperate with the Commercial Contributor in, the defense and any -related settlement negotiations. The Indemnified Contributor may -participate in any such claim at its own expense. - -For example, a Contributor might include the Program in a commercial -product offering, Product X. That Contributor is then a Commercial -Contributor. If that Commercial Contributor then makes performance -claims, or offers warranties related to Product X, those performance -claims and warranties are such Commercial Contributor's responsibility -alone. Under this section, the Commercial Contributor would have to -defend claims against the other Contributors related to those performance -claims and warranties, and if a court requires any other Contributor to -pay any damages as a result, the Commercial Contributor must pay -those damages. - -5. NO WARRANTY - -EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT -PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS" -BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR -IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF -TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR -PURPOSE. Each Recipient is solely responsible for determining the -appropriateness of using and distributing the Program and assumes all -risks associated with its exercise of rights under this Agreement, -including but not limited to the risks and costs of program errors, -compliance with applicable laws, damage to or loss of data, programs -or equipment, and unavailability or interruption of operations. - -6. DISCLAIMER OF LIABILITY - -EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT -PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS -SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST -PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE -EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - -7. GENERAL - -If any provision of this Agreement is invalid or unenforceable under -applicable law, it shall not affect the validity or enforceability of -the remainder of the terms of this Agreement, and without further -action by the parties hereto, such provision shall be reformed to the -minimum extent necessary to make such provision valid and enforceable. - -If Recipient institutes patent litigation against any entity -(including a cross-claim or counterclaim in a lawsuit) alleging that the -Program itself (excluding combinations of the Program with other software -or hardware) infringes such Recipient's patent(s), then such Recipient's -rights granted under Section 2(b) shall terminate as of the date such -litigation is filed. - -All Recipient's rights under this Agreement shall terminate if it -fails to comply with any of the material terms or conditions of this -Agreement and does not cure such failure in a reasonable period of -time after becoming aware of such noncompliance. If all Recipient's -rights under this Agreement terminate, Recipient agrees to cease use -and distribution of the Program as soon as reasonably practicable. -However, Recipient's obligations under this Agreement and any licenses -granted by Recipient relating to the Program shall continue and survive. - -Everyone is permitted to copy and distribute copies of this Agreement, -but in order to avoid inconsistency the Agreement is copyrighted and -may only be modified in the following manner. The Agreement Steward -reserves the right to publish new versions (including revisions) of -this Agreement from time to time. No one other than the Agreement -Steward has the right to modify this Agreement. The Eclipse Foundation -is the initial Agreement Steward. The Eclipse Foundation may assign the -responsibility to serve as the Agreement Steward to a suitable separate -entity. Each new version of the Agreement will be given a distinguishing -version number. The Program (including Contributions) may always be -Distributed subject to the version of the Agreement under which it was -received. In addition, after a new version of the Agreement is published, -Contributor may elect to Distribute the Program (including its -Contributions) under the new version. - -Except as expressly stated in Sections 2(a) and 2(b) above, Recipient -receives no rights or licenses to the intellectual property of any -Contributor under this Agreement, whether expressly, by implication, -estoppel or otherwise. All rights in the Program not expressly granted -under this Agreement are reserved. Nothing in this Agreement is intended -to be enforceable by any entity that is not a Contributor or Recipient. -No third-party beneficiary rights are created under this Agreement. - -Exhibit A - Form of Secondary Licenses Notice - -"This Source Code may also be made available under the following -Secondary Licenses when the conditions for such availability set forth -in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), -version(s), and exceptions or additional permissions here}." - - Simply including a copy of this Agreement, including this Exhibit A - is not sufficient to license the Source Code under Secondary Licenses. - - If it is not possible or desirable to put the notice in a particular - file, then You may include the notice in a location (such as a LICENSE - file in a relevant directory) where a recipient would be likely to - look for such a notice. - - You may add additional accurate notices of copyright ownership. +MIT License + +Copyright (c) 2023 Muthukumar + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index 1000693..45b348c 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,2 @@ # PythonWithSelenium -Webpage testing is used by selenium +Webpage testing powerved by selenium diff --git a/Zomato/ZomatoSignin.py b/Zomato/ZomatoSignin.py index e641bd2..a90ee84 100644 --- a/Zomato/ZomatoSignin.py +++ b/Zomato/ZomatoSignin.py @@ -8,7 +8,7 @@ import sys # set webdriver path here it may vary -browser = webdriver.Chrome(executable_path ="C:\\Users\\ms023673\\Documents\\Sel_driver\\Driver\\chromedriver_win32\\chromedriver.exe") +browser = webdriver.Chrome(executable_path ="C:\\Users\\muthu\\Documents\\Sel_driver\\Driver\\chromedriver_win32\\chromedriver.exe") # zomato link set browser.get('https://www.zomato.com/ncr') diff --git a/Zomato/ZomatoSigninAction.py b/Zomato/ZomatoSigninAction.py index 8bc78b5..d134ab8 100644 --- a/Zomato/ZomatoSigninAction.py +++ b/Zomato/ZomatoSigninAction.py @@ -9,7 +9,7 @@ import sys # set webdriver path here it may vary -browser = webdriver.Chrome(executable_path ="C:\\Users\\ms023673\\Documents\\Sel_driver\\Driver\\chromedriver_win32\\chromedriver.exe") +browser = webdriver.Chrome(executable_path ="C:\\Users\\muthu\\Documents\\Sel_driver\\Driver\\chromedriver_win32\\chromedriver.exe") # zomato link set browser.get('https://www.zomato.com/ncr')