Open In App

Flight-price checker using Python and Selenium

Improve
Improve
Like Article
Like
Save
Share
Report

Python is a scripting language with many extended libraries and frameworks. It is used in various fields of computer science such as web development and data science. Also, Python can be used to automate some minor tasks which can be really helpful in the long run.

The Python script mentioned in this article will fetch the prices from paytm.com using selenium and if it is lesser or than equal to the amount(you are ready to spend) set by you, then a notification will be sent to the desired email-ids about the reduced price.

The email id which will be used to send the notifications should not use the personal password since it requires the two-factor authentication and the action will fail. Rather, a different password should be set which can be accessed by the script and many other different applications one might develop in the future.

Implementation

Importing all the required libraries

Selenium to perform automation of the website




from selenium import webdriver 
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.webdriver.chrome.options import Options 
from selenium.common.exceptions import TimeoutException 
from selenium.webdriver.common.keys import Keys 


STMPLIB for sending notifications through emails




import smtplib


Extracting the price of flights between two selected dates




# Choose the two dates
# in this format 
x = "2020-03-10" 
y = "2020-03-16"
  
a = int(x[8:10])
b = int(y[8:10])
  
if a > b:
    m = a - b
    t = b
  
else:
    m = b - a
    t = a
print(t)
  
low_price = ""
data = {}
  
for i in range(t, t + m+1):
    url = 'https://paytm.com/flights/flightSearch/BBI-\
    Bhubaneshwar/DEL-Delhi/1/0/0/E/2020-03-'+str(i)
      
    # Locations can be changed on 
    # the above statement
    print(url)
      
    date = "2019-12-" + str(i)
      
    # enables the script to run properly without 
    # opening the chrome browser.
    chrome_options = Options()
    chrome_options.add_argument("--disable-gpu")
      
  
    chrome_options.add_argument("--headless")
      
    driver = webdriver.Chrome(executable_path = '/path/to/chromedriver'
                              options=chrome_options)
      
    driver.implicitly_wait(20)
    driver.get(url)
      
    g = driver.find_element_by_xpath("//div[@class='_2gMo']"
    price = g.text
      
    x = price[0]
    y = price[2:5]
    z = str(x)+str(y)
    p = int(z)
    print(p)
      
    prices=[]
    if p <= 2000:
        data[date] = p
          
for i in data:
    low_price += str(i) + ": Rs." + str(data[i]) + "\n"
      
print(low_price) 


Sending the notification if there are cheap flights available through an email using SMTP




if len(data) != 0:
      
    dp = 2000
    server = smtplib.SMTP('smtp.gmail.com',587)
    server.ehlo()
    server.starttls()
    server.ehlo()
      
    server.login('your_email_id','your_password')
    subject = "Flight price for BBI-DEL has fallen\
    below Rs. " + str(dp)
      
    body = "Hey Akash! \n The price of BBI-DEL on PayTm \
    has fallen down below Rs." + str(dp) + ".\n So,\
    hurry up & check: " + url_final+"\n\n\n The prices of\
    flight below Rs.2000 for the following days are\
    :\n\n" + low_price
      
    msg = f"Subject: {subject} \n\n {body}"
      
    server.sendmail(
        # email ids where you want to
        # send the notification
        'email_id_1',
        'email_id_2',
        msg
        )
      
    print("HEY,EMAIL HAS BEEN SENT SUCCESSFULLY.")
       
    server.quit()


Entire Code:




from selenium import webdriver 
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.webdriver.chrome.options import Options 
from selenium.common.exceptions import TimeoutException 
from selenium.webdriver.common.keys import Keys 
import smtplib
  
  
# Choose the two dates
# in this format 
x = "2020-03-10" 
y = "2020-03-16"
  
a = int(x[8:10])
b = int(y[8:10])
  
if a > b:
    m = a - b
    t = b
  
else:
    m = b - a
    t = a
print(t)
  
low_price = ""
data = {}
  
for i in range(t, t + m+1):
    url = 'https://paytm.com/flights/flightSearch/BBI-\
    Bhubaneshwar/DEL-Delhi/1/0/0/E/2020-03-'+str(i)
      
    # Locations can be changed on 
    # the above statement
    print(url)
      
    date = "2019-12-" + str(i)
      
    # enables the script to run properly without 
    # opening the chrome browser.
    chrome_options = Options()
    chrome_options.add_argument("--disable-gpu")
      
  
    chrome_options.add_argument("--headless")
      
    driver = webdriver.Chrome(executable_path = '/path/to/chromedriver'
                              options=chrome_options)
      
    driver.implicitly_wait(20)
    driver.get(url)
      
    g = driver.find_element_by_xpath("//div[@class='_2gMo']"
    price = g.text
      
    x = price[0]
    y = price[2:5]
    z = str(x)+str(y)
    p = int(z)
    print(p)
      
    prices=[]
    if p <= 2000:
        data[date] = p
          
for i in data:
    low_price += str(i) + ": Rs." + str(data[i]) + "\n"
      
print(low_price) 
  
if len(data) != 0:
      
    dp = 2000
    server = smtplib.SMTP('smtp.gmail.com',587)
    server.ehlo()
    server.starttls()
    server.ehlo()
      
    server.login('your_email_id','your_password')
    subject = "Flight price for BBI-DEL has fallen\
    below Rs. " + str(dp)
      
    body = "Hey Akash! \n The price of BBI-DEL on PayTm \
    has fallen down below Rs." + str(dp) + ".\n So,\
    hurry up & check: " + url_final+"\n\n\n The prices of\
    flight below Rs.2000 for the following days are\
    :\n\n" + low_price
      
    msg = f"Subject: {subject} \n\n {body}"
      
    server.sendmail(
        # email ids where you want to
        # send the notification
        'email_id_1',
        'email_id_2',
        msg
        )
      
    print("HEY,EMAIL HAS BEEN SENT SUCCESSFULLY.")
       
    server.quit()


Output:

python-selenium



Last Updated : 08 Mar, 2024
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads