Giter VIP home page Giter VIP logo

aapatre / automatic-udemy-course-enroller-get-paid-udemy-courses-for-free Goto Github PK

View Code? Open in Web Editor NEW
3.1K 84.0 543.0 619 KB

Do you want to LEARN NEW STUFF for FREE? Don't worry, with the power of web-scraping and automation, this script will find the necessary Udemy coupons & enroll you for PAID UDEMY COURSES, ABSOLUTELY FREE!

License: GNU General Public License v3.0

Python 99.89% Dockerfile 0.11%
python scraping selenium python3 scraper

automatic-udemy-course-enroller-get-paid-udemy-courses-for-free's Introduction

Hi there ๐Ÿ‘‹

Antariksh's GitHub stats

Antariksh's Used Languages

automatic-udemy-course-enroller-get-paid-udemy-courses-for-free's People

Contributors

a-0vi avatar aapatre avatar alyoninthecity avatar asunnya avatar baseplate-admin avatar c1sc0 avatar cullzie avatar deedeedev avatar deepsourcebot avatar diflartle avatar eklipse18 avatar fakeid30 avatar hubris-kubrick avatar jlarini avatar jzarca01 avatar latelylk avatar mustafaamer-1 avatar nottrif avatar nyctophilia58 avatar restyled-commits avatar sayedulsayem avatar shamiul419 avatar tbm avatar voulz avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

automatic-udemy-course-enroller-get-paid-udemy-courses-for-free's Issues

Blocked link shorteners are not being gracefully handled

In my country bit.ly is blocked, in previous version of the script it was allowed to time out to reach the next link, but since v0.2 onwards it's exiting with this error message :


Received Link 4 : https://www.udemy.com/course/adobepremiereprocccourse/?couponCode=BFDAYFREE
Received Link 5 : https://www.udemy.com/course/affinity-publisher-guide/?couponCode=E89491D7B740594E7824
Received Link 6 : https://www.udemy.com/course/adobe-dreamweaver-cc-2020-master-course/?couponCode=TRY10FREE403
Received Link 7 : https://www.udemy.com/course/complete-progressive-web-app-bootcamp/?couponCode=6CAFC39C5D5F0508385C
Received Link 8 : https://www.udemy.com/course/complete-react-course-w-hooks-react-router-redux-usecontext/?couponCode=9BCF501030302CCB4F6C
Received Link 9 : https://www.udemy.com/course/mindset-to-win-and-influence/?couponCode=77B3265043A4C0FF90FE
Received Link 10 : https://www.udemy.com/course/shipping-logistics-business-in-supply-chain-export-import/?couponCode=C93D07634761D4F70C66
Received Link 11 : https://bit.ly/38sVnJF
Received Link 12 : https://www.udemy.com/course/microsoft-excel-learn-ms-excel-for-data-analysis/?couponCode=172AD8D9C4AC7051E89A
Already enrolled in Be A Mental Math King | Udemy
Already enrolled in SAP FICO For Beginners With Simple And Detailed Explanation | Udemy
Course language not wanted: Portuguese
Already enrolled in Complete Adobe Premiere Pro CC Course - Beginner to Advanced | Udemy
Already enrolled in Affinity Publisher Guide - Affinity Publisher for Beginners | Udemy
Already enrolled in Adobe Dreamweaver CC 2020 | Udemy
Already enrolled in Complete Progressive Web App Bootcamp | Udemy
Already enrolled in React - The Complete Guide with React Hook Redux 2020 in 4hr | Udemy
Already enrolled in Mindset to Win and Influence | Udemy
Already enrolled in International Logistics & Transportation in Supply Chain. | Udemy
Message: Reached error page: about:neterror?e=netTimeout&u=https%3A//bit.ly/38sVnJF&c=UTF-8&d=The%20server%20at%20bit.ly%20is%20taking%20too%20long%20to%20respond.

Error: Message: Reached error page: about:neterror?e=netTimeout&u=https%3A//bit.ly/38sVnJF&c=UTF-8&d=The%20server%20at%20bit.ly%20is%20taking%20too%20long%20to%20respond.

Closing browser
โ—† Automatic-Udemy-Course-Enroller-GET-PAID-UDEMY-COURSES-for-FREE git:(develop) โฏโฏโฏ 

We need to reintroduce graceful timeout, not outright closing.

@cullzie can you take a look please ?

Trying to enroll in courses i'm already enrolled in

Well the title says everything.
It could save links of courses it processed and skip them the next time you run it. It could also save the email address linked to these links to avoid deleting / moving the list to use multiple accounts.

ModuleNotFoundError: No module named 'ruamel'

I am getting following error

from ruamel.yaml import YAML, dump
ModuleNotFoundError: No module named 'ruamel'

even though i ran pip install -r requirements.txt and installed ruamel separately as well.
My python version is Python 3.8.5. Please help.

webdriver_manager no module found

Using windows 10, python v3.8.3
attempted to run chrome script and got message
ModuleNotFoundError: No module named 'webdriver_manager'

I found a stack exchange page that to use this line:
pip install webdriver_manager

this successfully installed webdriver manager

[BUG] Doesn't enter zip code

Describe the bug
Doesn't enter zip code

To Reproduce
Steps to reproduce the behavior:

  1. Chrome web driver selected

Expected behavior
Enters zip code

Desktop (please complete the following information):
Windows 10

Additional context
Add any other context about the problem here.

password problems

when I run the script and it asks me for the password, it won't let me type anything, like if the keyboard didn't work

Got this error while running it on ubuntu vps

[WDM] - Current google-chrome version is 87.0.4280
[WDM] - Get LATEST driver version for 87.0.4280
[WDM] - There is no [linux64] chromedriver for browser 87.0.4280 in cache
[WDM] - Get LATEST driver version for 87.0.4280
[WDM] - Trying to download new driver from http://chromedriver.storage.googleapis.com/87.0.4280.20/chromedriver_linux64.zip
[WDM] - Driver has been saved in cache [/root/.wdm/drivers/chromedriver/linux64/87.0.4280.20]
Traceback (most recent call last):
File "udemy_enroller_chrome.py", line 29, in
driver = webdriver.Chrome(ChromeDriverManager().install(), options=chrome_options)
File "/usr/local/lib/python3.8/dist-packages/selenium/webdriver/chrome/webdriver.py", line 76, in init
RemoteWebDriver.init(
File "/usr/local/lib/python3.8/dist-packages/selenium/webdriver/remote/webdriver.py", line 157, in init
self.start_session(capabilities, browser_profile)
File "/usr/local/lib/python3.8/dist-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session
response = self.execute(Command.NEW_SESSION, parameters)
File "/usr/local/lib/python3.8/dist-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "/usr/local/lib/python3.8/dist-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally.
(unknown error: DevToolsActivePort file doesn't exist)
(The process started from chrome location /usr/bin/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)

Enroll only to courses in categories I'm interested in

Kind of in a similar vein to the #36
I don't want to be enrolled in anything under Music category for example as I cannot sing ๐ŸŽค

Top level categories which courses fall under:

Development
Business
IT & Software 
Office Productivity
Personal Development
Design
Marketing
Health & Fitness
Music

This list is in English of course so each user would have to define these in their own language

Leaving the option blank would add you to all courses. Otherwise you will only be enrolled in the courses which fall under the categories you have picked

Stop trying after X number of failed requests

When an user sees a page that they have redeemed before, it's unlikely that they will see any non redeemed course after.

This issue proposes to see have the program terminated after X amount of failed attempt. The number can be user inputted or hard coded. I think 22 is a good number.

This is a finer version of PR #11

Error: 'NoneType' object has no attribute 'find'

I was doing my daily run and encountered this following error, tried on both develop and master branch. Also on the released downloaded from issued release page.

โ—† Automatic-Udemy-Course-Enroller-GET-PAID-UDEMY-COURSES-for-FREE git:(develop) โฏโฏโฏ python udemy_enroller_firefox.py
Loading existing settings
Please Wait: Getting the course list from tutorialbar.com...
Page: 1 of 606 scraped
Error: 'NoneType' object has no attribute 'find'
Closing browser

Further reading is required on my part. Tutorialbar, my account in udemy and my internet are in good condition.

This is happening with both Firefox and Chromium. Arch & Ubuntu Linux with python 3.8.6

Use f-strings instead of .format and string addition

Using f-strings which are available from Python 3.6 or greater is a very helpful and human-readable tool for string concatenation.

For example, in line 141 to 142 in udemy_enroller_edge.py, you have to manually make page into a string:

url = "https://www.tutorialbar.com/all-courses/" + "page/" + str(
            page) + "/"

This can be simplified using f-strings:

url = f"https://www.tutorialbar.com/all-courses/page/{page}"

CI failing

unknown

@cullzie CI seems to be failing even with a configured dummy account in secrets, we've given you collaborator status. Can you please check what seems to be the problem ?

Move from print to logging module

Move from print statements to use python logging module

This will have several benefits to users and devs:

  • Creation of log file for easier bug reports
  • Ability to have different levels of logging for debugging purposes (DEBUG, INFO etc...)
  • Better formatting of console messages

Release 1.0.0

Since we are using semver the next version should be 1.0.0. I don't think there will be any breaking change. So no point continuing the 0.* branch.

What's your opinion about it @cullzie ?

But I am not sure what to add / change before making it to 1.0.0.

Should we try to get a GUI running ? Where someone will post their username , pass and all the other stuff.

Not sure how necessary the GUI is though.

Deduplication

I know we currently have firefox driver issue. But I think it's logical to reuse this part :

driver.maximize_window()

# in the maximized layout


def getUdemyLink(url):
    response = requests.get(url=url)

    soup = BeautifulSoup(response.content, "html.parser")

    linkForUdemy = soup.find("span",
                             class_="rh_button_wrapper").find("a").get("href")

    return linkForUdemy


def gatherUdemyCourseLinks(courses):
    """
    Threaded fetching of the udemy course links from tutorialbar.com

    :param list courses: A list of tutorialbar.com course links we want to fetch the udemy links for
    :return: list of udemy links
    """
    thread_pool = Pool()
    results = thread_pool.map(getUdemyLink, courses)
    thread_pool.close()
    thread_pool.join()
    return results


def getTutorialBarLinks(url):
    response = requests.get(url=url)

    soup = BeautifulSoup(response.content, "html.parser")

    links = soup.find("div", class_="rh-post-wrapper").find_all("a")
    # print(links)

    courses = []

    x = 0
    for i in range(12):
        courses.append(links[x].get("href"))
        x = x + 3

    return courses


def udemyLogin(email_text, password_text):
    driver.get("https://www.udemy.com/join/login-popup/")

    userEmail = driver.find_element_by_name("email")
    userPassword = driver.find_element_by_name("password")

    userEmail.send_keys(email_text)
    userPassword.send_keys(password_text)

    driver.find_element_by_name("submit").click()


def redeemUdemyCourse(url):
    driver.get(url)
    print("Trying to Enroll for: " + driver.title)

    # Enroll Now 1
    element_present = EC.presence_of_element_located(
        (By.XPATH, "//button[@data-purpose='buy-this-course-button']"))
    WebDriverWait(driver, 10).until(element_present)

    udemyEnroll = driver.find_element_by_xpath(
        "//button[@data-purpose='buy-this-course-button']")  # Udemy
    udemyEnroll.click()

    # Enroll Now 2
    element_present = EC.presence_of_element_located((
        By.XPATH,
        '//*[@class="udemy pageloaded"]/div[1]/div[2]/div/div/div/div[2]/form/div[2]/div/div[4]/button',
    ))
    WebDriverWait(driver, 10).until(element_present)

    # Check if zipcode exists before doing this
    if zipcode:
        # Assume sometimes zip is not required because script was originally pushed without this
        try:
            zipcode_element = driver.find_element_by_id(
                "billingAddressSecondaryInput")
            zipcode_element.send_keys(zipcode)

            # After you put the zip code in, the page refreshes itself and disables the enroll button for a split second.
            time.sleep(1)
        except NoSuchElementException:
            pass

    udemyEnroll = driver.find_element_by_xpath(
        '//*[@class="udemy pageloaded"]/div[1]/div[2]/div/div/div/div[2]/form/div[2]/div/div[4]/button'
    )  # Udemy
    udemyEnroll.click()


def main_function():
    page = 1  # Change the page number here only if necessary, else ignore

    loop_run_count = 0

    while True:

        print("Please Wait: Getting the course list from tutorialbar.com...")
        print("Page: " + str(page) + ", Loop run count: " +
              str(loop_run_count))

        url = "https://www.tutorialbar.com/all-courses/" + "page/" + str(
            page) + "/"
        courses = getTutorialBarLinks(url)

        udemyLinks = gatherUdemyCourseLinks(courses)

        for counter, course in enumerate(udemyLinks):
            print("Received Link {} : {}".format((counter + 1), course))

        if loop_run_count == 0:
            udemyLogin(email, password)

        for link in udemyLinks:
            # noinspection PyBroadException
            try:
                redeemUdemyCourse(link)
            except BaseException as e:
                print(
                    "Unable to enroll for this course either because you have already claimed it or the browser "
                    "window has been closed!")

        page = page + 1
        loop_run_count = loop_run_count + 1

        print(
            "Moving on to the next page of the course list on tutorialbar.com")


main_function()

We can make this part a class and call it from inside the function, we can split it into another file and that will work as well. I know this will mean that our project can not be run in isolation anymore. But nowhere did we promise that we can run it like that.

@aapatre @cullzie @ethankrein please give your opinion.

SOLVED: selenium.common.exceptions.WebDriverException:

Edit: this was solved by @ethankrein thanks!!

I get this error after running udemy_automate_course_enroll_v1.py , driver is in the system path I have already checked as per the instructions given here, Edge driver and browser match, I have already restarted. (https://www.selenium.dev/documentation/en/selenium_installation/installing_webdriver_binaries/). Please help!

This is how modified lines are set:
path = "C:\Webdriver\bin\msedgedriver.exe"
driver = webdriver.Edge(path)

This is the result:

"C:\Webdriver\bin\udemy_automate_course_enroll_v1.py"
Traceback (most recent call last):
File "C:\Users\Usuario\AppData\Local\Programs\Python\Python38\lib\site-packages\selenium\webdriver\common\service.py", line 72, in start
self.process = subprocess.Popen(cmd, env=self.env,
File "C:\Users\Usuario\AppData\Local\Programs\Python\Python38\lib\subprocess.py", line 854, in init
self._execute_child(args, executable, preexec_fn, close_fds,
File "C:\Users\Usuario\AppData\Local\Programs\Python\Python38\lib\subprocess.py", line 1307, in _execute_child
hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
FileNotFoundError: [WinError 2] The system cannot find the file

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\Webdriver\bin\udemy_automate_course_enroll_v1.py", line 53, in
driver = webdriver.Edge(path) # webdriver.Chrome(path) for Google Chrome, webdriver.Firefox(path) for Mozilla Firefox, webdriver.Edge(path) for Microsoft Edge, webdriver.Safari(path) for Apple Safari
File "C:\Users\Usuario\AppData\Local\Programs\Python\Python38\lib\site-packages\selenium\webdriver\edge\webdriver.py", line 56, in init
self.edge_service.start()
File "C:\Users\Usuario\AppData\Local\Programs\Python\Python38\lib\site-packages\selenium\webdriver\common\service.py", line 81, in start
raise WebDriverException(
selenium.common.exceptions.WebDriverException: Message: 'msedgedriver' executable needs to be in PATH. Please download from http://go.microsoft.com/fwlink/?LinkId=619687

Fixed this for edge and firefox, using a different Line 54 however now I get this:

Unable to enroll for this course either because you have already claimed it or the browser window has been closed
Unable to enroll for this course either because you have already claimed it or the browser window has been closed
Unable to enroll for this course either because you have already claimed it or the browser window has been closed
Unable to enroll for this course either because you have already claimed it or the browser window has been closed
Unable to enroll for this course either because you have already claimed it or the browser window has been closed
Unable to enroll for this course either because you have already claimed it or the browser window has been closed

Updating README

I think we need to change FAQ #7

Also once we incorporate develop into master and make a new release we need to remove the section about saved card.

Chromium on Ubuntu does not work if there is captcha

If I hit a captcha prompt in chromium I see this error :


Loading existing settings
 
[WDM] - Current chromium version is 83.0.4103
[WDM] - Get LATEST driver version for 83.0.4103
[WDM] - Driver [/home/nirjhor/.wdm/drivers/chromedriver/linux64/83.0.4103.39/chromedriver] found in cache
Error: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[name="email"]"}
  (Session info: chrome=83.0.4103.116)

Closing browser

This is on the master branch.

Microsoft Edge on Linux does not work (wrong download URL of the webdriver)

Relevant Error log :

โœ– 130 Automatic-Udemy-Course-Enroller-GET-PAID-UDEMY-COURSES-for-FREE git:(master) โœ— โฏโฏโฏ python udemy_enroller_edge.py 
Loading existing settings
[WDM] - There is no [linux64] edgedriver for browser  in cache
[WDM] - Trying to download new driver from https://msedgedriver.azureedge.net/87.0.664.47/edgedriver_linux64.zip
Traceback (most recent call last):
  File "udemy_enroller_edge.py", line 12, in <module>
    driver = webdriver.Edge(EdgeChromiumDriverManager().install())
  File "/home/nirjhor/.local/lib/python3.8/site-packages/webdriver_manager/microsoft.py", line 47, in install
    return self._get_driver_path(self.driver)
  File "/home/nirjhor/.local/lib/python3.8/site-packages/webdriver_manager/manager.py", line 29, in _get_driver_path
    file = download_file(driver.get_url())
  File "/home/nirjhor/.local/lib/python3.8/site-packages/webdriver_manager/utils.py", line 93, in download_file
    validate_response(response)
  File "/home/nirjhor/.local/lib/python3.8/site-packages/webdriver_manager/utils.py", line 79, in validate_response
    raise ValueError("There is no such driver by url {}".format(resp.url))
ValueError: There is no such driver by url https://msedgedriver.azureedge.net/87.0.664.47/edgedriver_linux64.zip

Fix firefox webdriver autoinstall

The current implementation lacks geckodriver autoinstall, we need to figure out a way to autoinstall geckodriver so that we don't have to manually install it and get parity with chrome and edge.

Enhancement: Automate Settings

When you launch the script, if there is no setting available, it creates one and asks you your informations.

That way, the user just have to launch the script without worrying to check any other file.

Issue a new release

I tested the caching feature all day locally. The code seems solid . Once we push a PR with updated README I believe we're good to post our next release.

Udemy antibot triggered

For now udemy detects the bot and i'm unable to login (without completing a captcha) because it tries to change page too fast. After the login it should check and, if there is the captcha, wait until the captcha is completed (maybe just with input("Please complete the captcha and press enter. ")).

screenshot

Add pyproject.toml

Simply add pyproject.toml to the project for use with poetry and remove poetry.lock
Update .gitignore to match this

Explanation: Should I commit .lock file changes separately? What should I write for the commit message?

At the moment I'm getting an error when trying to run poetry:


  RuntimeError

  Poetry could not find a pyproject.toml file in /home/xoxo/Automatic-Udemy-Course-Enroller-GET-PAID-UDEMY-COURSES-for-FREE or its parents

  at ~/.local/lib/python3.8/site-packages/poetry/core/factory.py:367 in locate
      363โ”‚             if poetry_file.exists():
      364โ”‚                 return poetry_file
      365โ”‚ 
      366โ”‚         else:
    โ†’ 367โ”‚             raise RuntimeError(
      368โ”‚                 "Poetry could not find a pyproject.toml file in {} or its parents".format(
      369โ”‚                     cwd
      370โ”‚                 )
      371โ”‚             )

ModuleNotFoundError: No module named 'selenium'

simkav@Simkav-PC:~/Sandbox/Automatic-Udemy-Course-Enroller-GET-PAID-UDEMY-COURSES-for-FREE$ python udemy_enroller.py

Traceback (most recent call last):
File "udemy_enroller.py", line 8, in
from selenium.webdriver.remote.webdriver import WebDriver
ModuleNotFoundError: No module named 'selenium'

screenshot_2

python verison 3.8
screenshot_3

pip3 list shows that i have selenium

screenshot_1

i'm new to phyton, what should i do?

Fix restyled-io bot

At the moment there are too many checks and each one is restyling the last checks commit

Example:
isort changes the import to:

from selenium.common.exceptions import NoSuchElementException, TimeoutException

reorder-python-imports changes it back to:

from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import TimeoutException

And this is just repeated on every single PR

Can we reduce down the list of checks to black and isort?

Adding filters

Hi. Kudos to the developers for their efforts.
What about adding filters in the application for enrolling user to those courses according to the their intrest such as 4 stars or above, those courses containing keywords like excel, analytics, python, and so on.

Add new source ?

Now that we have a good base, I'd like to explore the possibility of adding new source. What do you think @cullzie ?

Project rename?

I want to see if there can be a prettier name for this project than current boring name. For example, I had "udemy-cherrypick ๐Ÿ’" in my mind.

add argparse to remove manual code edits

you can use the standard library module argparser to get the username, password and the path to the browser webdriver and the browser type.

This would be great so a don't have to has to change the coding.

Thank Jetbrains in README

As we are getting support from Jetbrains they sent me an email with this body :

We hope that JetBrains software will be useful for your project! If you feel that our tools have helped you a great deal, we would be grateful if you could mention JetBrains' support on your project's homepage. You could do this by placing our Logo and a link to JetBrains such as https://www.jetbrains.com/?from=ABC (make sure to replace โ€˜ABCโ€™ with the name of your OS project, no spaces). Thanks in advance!

I think we should do this. I wonder where to put this though. What do you think @cullzie ?

Enhancement: Regroup all code in one

To facilite maintenance, I think it would be better to don't have duplicate code for each browser.

In this case, we could use the yaml to choose which browser we want to use

Stuck at payment checkout!

After collecting all the links with coupon codes, the program goes to udemy and select enroll, which is problematic because there should be a verification system whether adding the coupon makes the course "free" or not. There are some coupons which lessens the price. The bot also clicks there and gets stuck at payment process. This keeps happening and everytime it happens it throws an error like "find_all of none" type. Then I have to restart the bot again. I think you can add the verification process like when the "Buy Now" text is available in the "udlite-btn udlite-btn-large udlite-btn-primary udlite-heading-md styles--btn--express-checkout--28jN4" classes, the bot skips the page and go to the next link. Please look into it. Thanks!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.