Skip to content

Instantly share code, notes, and snippets.

@xen
Last active January 1, 2016 15:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save xen/8167943 to your computer and use it in GitHub Desktop.
Save xen/8167943 to your computer and use it in GitHub Desktop.
# -*- coding: utf-8 -*-
# <nbformat>3.0</nbformat>
# <codecell>
import pytils
import datetime
import time
from selenium import webdriver
import selenium.webdriver.support.ui as ui
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
# <codecell>
driver = webdriver.Chrome()
wait = ui.WebDriverWait(driver, 30)
driver.get("http://www.aviasales.ru/")
driver.add_cookie({u'domain': u'.aviasales.ru',
u'expiry': 4087371942,
u'name': u'currency',
u'path': u'/',
u'secure': False,
u'value': u'%7B%22code%22%3A%22usd%22%2C%22name%22%3A%22%u0434%u043E%u043B%u043B%u0430%u0440%u044B%20%u0421%u0428%u0410%20%28USD%29%22%2C%22%24%24hashKey%22%3A%2200Q%22%7D'}
)
driver.add_cookie({u'domain': u'.aviasales.ru',
u'expiry': 2019437570,
u'name': u'know_english',
u'path': u'/',
u'secure': False,
u'value': u'true'}
)
delta = datetime.timedelta(days=90)
origin_list = [u'Киев', u'Харьков', u'Днепропетровск', u'Москва']
destination = u'Бангкок'
import codecs
report = codecs.open(u"{}.csv".format(destination), encoding='utf-8', mode='a')
# <codecell>
def input_keys(d, el_id, keys, tries=2):
el = d.find_element_by_id(el_id)
if el.get_attribute('value') != keys:
el.clear()
time.sleep(0.5)
for x in keys:
el.send_keys(x)
time.sleep(0.1)
# <codecell>
for origin in origin_list:
for x in range(0, 90, 3):
start = datetime.date(2014, 1, 27) + datetime.timedelta(x)
end = start+delta
rstart = pytils.dt.ru_strftime(u"%d %B %Y", inflected=True, date=start)
rend = pytils.dt.ru_strftime(u"%d %B %Y", inflected=True, date=end)
print(u"{} - {}".format(rstart, rend))
driver.get("http://www.aviasales.ru/")
time.sleep(5)
input_keys(driver, 'origin_201', origin)
input_keys(driver, 'destination_202', destination)
range_days = driver.find_element_by_id('range_203')
if not range_days.get_attribute('checked'):
range_days.click()
input_keys(driver, 'depart_date_204', rstart)
driver.find_element_by_id('return_date_206').click()
driver.find_element_by_id('return_date_206').clear()
input_keys(driver, 'return_date_206', rend)
driver.find_element_by_id('body_content_title').click()
driver.find_element_by_id('adults_207')
time.sleep(0.2)
driver.find_element_by_id('adults_207').send_keys(u'2')
driver.find_element_by_id('children')
time.sleep(0.2)
driver.find_element_by_id('children').send_keys(u'1')
driver.find_element_by_xpath('//*[@id="uniform-undefined"]/span/input').click()
element = wait.until(EC.invisibility_of_element_located((By.XPATH, '//*[@class="realtime_progressbar_track"]')))
time.sleep(20)
price = driver.find_element_by_class_name('price_block')
output = u'"{destination}","{origin}","{start}","{end}","{price}"\n'.format(
origin = origin, destination = destination, start = rstart, end = rend,
price = price.text
)
print(output)
report.write(output)
driver.save_screenshot(u"scrn/{} {} {}-{}-{}.png".format(origin, destination, start, end, price.text))
# <codecell>
report.close()
driver.close()
# <codecell>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment