コード例 #1
0
def step1_login_reserve(driver,
                        username, password,
                        date, hour_from, hour_to,
                        is_indoor):

    url = get_url(date, hour_from, hour_to, is_indoor)
    driver.get(url)

    try:
        input_member_code = driver.find_element_by_id(
            'input_reserver_code'
        )
        input_password = driver.find_element_by_id(
            'input_reserver_password'
        )
        input_submit = driver.find_element_by_css_selector(
            "input[type='submit']"
        )
    except NoSuchElementException:
        # NOTE: ASSUMPTION specified time is unavailable
        # of course, this could be the case of form HTML changed
        logging.exception(
            ('step1: unable to locate username and password inputs: '
             f'{date}-{hour_from}-{hour_to}')
        )
        raise ReservationUnavailable()
    else:
        input_member_code.send_keys(username)
        input_password.send_keys(password)
        input_submit.click()
コード例 #2
0
def open_websockets(connections_number):
    aliases = [str(uuid4()) for _ in xrange(connections_number)]

    wss_url = get_url(WSS_PROTOCOL, DOMAIN, WEBSOCKET_PATH)

    futures = [get_future(a, wss_url) for a in aliases]

    for f in futures:
        yield f
コード例 #3
0
ファイル: login.py プロジェクト: dkalke/csys_h31p3r_public
 def logout(self):
     self.login_status = False
     package = self.login_session.post(config.get_url('login'),
                                       data=config.get_payload(mode='logout'),
                                       headers=self.login_config.headers)
     if package.status_code == 200:
         # print('Logout Successfully!')
         # print(config.msg_logout)
         self.login_session.close()
     else:
         self.login_session.close()
コード例 #4
0
def login():
    #Get config info
    url = config.get_url()
    username = config.get_user()
    password = config.get_password()

	driver.get(url)
	username = driver.find_element_by_id('LoginCtrl_txtLoginUsername')
	username.send_keys(username)
	password = driver.find_element_by_id('LoginCtrl_txtPassword')
	password.send_keys(password)
	login = driver.find_element_by_id('LoginCtrl_btnLogin').click()
コード例 #5
0
def register_user(alias):
    register_url = get_url(HTTPS_PROTOCOL, DOMAIN, REGISTER_PATH)
    method = 'POST'
    headers = {"Content-Type": "application/x-www-form-urlencoded"}

    register_params = {'id': 0, 'alias': alias, 'device_type': DEVICE_TYPE}

    register_body = urlencode(register_params)

    http_client = AsyncHTTPClient()
    register_request = HTTPRequest(register_url, method, headers,
                                   register_body)
    yield http_client.fetch(register_request)
コード例 #6
0
ファイル: http.py プロジェクト: alces/gitlab-rest-client
def send_req(nam, path, meth = 'GET', body = '', isCorrect = lambda c: c == 200):
	url = config.get_url(nam)
	cn = mk_conn(url)
	fullUrl = '%s/api/v3/%s' % (url, path)
	cn.request(meth, fullUrl, body, {
		'PRIVATE-TOKEN': config.get_token(nam),
		'Content-Type': 'application/json'
	})
	rsp = cn.getresponse()
	ret = rsp.read()
	assert isCorrect(rsp.status), '''Server has returned an error
URL: %s
Status: %d
Body: %s''' % (fullUrl, rsp.status, ret)
	return json.loads(ret)
コード例 #7
0
def send_req(nam, path, meth='GET', body='', isCorrect=lambda c: c == 200):
    url = config.get_url(nam)
    cn = mk_conn(url)
    fullUrl = '%s/api/v3/%s' % (url, path)
    cn.request(meth, fullUrl, body, {
        'PRIVATE-TOKEN': config.get_token(nam),
        'Content-Type': 'application/json'
    })
    rsp = cn.getresponse()
    ret = rsp.read()
    assert isCorrect(rsp.status), '''Server has returned an error
URL: %s
Status: %d
Body: %s''' % (fullUrl, rsp.status, ret)
    return json.loads(ret)
コード例 #8
0
def get_token(alias):
    yield register_user(alias)
    token_url = get_url(HTTPS_PROTOCOL, DOMAIN, TOKEN_PATH)
    method = 'POST'
    headers = {"Content-Type": "application/x-www-form-urlencoded"}

    # формируем запрос на получение токена
    token_params = {'alias': alias, 'app_id': APP_ID}
    token_body = urlencode(token_params)
    token_request = HTTPRequest(token_url, method, headers, token_body)

    http_client = AsyncHTTPClient()

    # получаем токен
    response = yield http_client.fetch(token_request)
    token = json.loads(response.body).get('token', None)
    raise gen.Return(token)
コード例 #9
0
ファイル: login.py プロジェクト: dkalke/csys_h31p3r_public
    def login_init(self):
        package = self.login_session.post(config.get_url('login'),
                                          data=config.get_payload(mode='login_init'),
                                          headers=self.login_config.headers)

        if package.status_code == 200:
            package = package.json()
            self.server_status = package['result']
            try:
                self.secure_random = package['secureRandom']
                return package
            except KeyError:
                # print(config.msg_server_begin+package['message'])
                self.init_message = package['message']
                self.login_session.close()
                return package
        else:
            # print('POST Unsuccessfully!')
            self.login_session.close()
            return {'result': False, 'message': '選課系統異常!無法登入!'}
コード例 #10
0
def hermes_scraper():
    wanted_bags = config.load()
    print(wanted_bags['categories'])

    URL = config.get_url()
    page = requests.get(URL, headers={'Cache-Control': 'no-cache'})
    print(f'Status code: {page.status_code}')
    soup = BeautifulSoup(page.content, 'html.parser')
    bags_on_site = soup.find_all(class_='product-item-name')
    available_bags = []

    print(f'Number of bags: {len(bags_on_site)}')
    for bag_on_site_html in bags_on_site:
        bag_on_site = bag_on_site_html.text.strip()
        print("Bag on site: " + bag_on_site)

        for wanted_bag in wanted_bags['categories']:
            if wanted_bag in bag_on_site:
                available_bags.append(bag_on_site)

    previous_bags = db.get_bags()
    available_bags.sort()
    print(f'Previous bags: {previous_bags}')
    print(f'Wanted bags: {wanted_bags}')
    print(f'Available bags: {available_bags}')
    print(f'previous bags == current bags: {previous_bags == available_bags}')

    if (previous_bags != available_bags):
        print("Change in bags")
        notify.email(wanted_bags, available_bags)
        db.update_bags(available_bags)
    else:
        print("No change")

    return str(available_bags)

    if __name__ == "__main__":
        app.run(debug=True,
                host='0.0.0.0',
                port=int(os.environ.get('PORT', 8080)))
コード例 #11
0
ファイル: login.py プロジェクト: dkalke/csys_h31p3r_public
    def login(self, _id, _pw):
        if self.server_status and self.secure_random:
            self.student_id = _id
            student_pw = _pw
            hash_pw = hashlib.md5(student_pw.encode("utf-8")).hexdigest()
            hash_pw = hmac.new(str.encode(hash_pw), digestmod=hashlib.sha256)
            hash_pw.update(str.encode(self.student_id))
            hash_pw.update(str.encode(self.secure_random))
            hash_pw = hash_pw.hexdigest()
            package = self.login_session.post(config.get_url('login'),
                                              data=config.get_payload(mode='login', userid=self.student_id,
                                                                       hash=hash_pw),
                                              headers=self.login_config.headers)
            # print(package.json())
            if package.status_code == 200:
                if package.json()['result']:
                    # 允許使用者名單
					sheet_id = 'xxxxxxxxxxxxxxxxxxxxxxx'
					sheet_gid = 'xxxxxxxxxxxxxxxxxxxxxxx'
                    allowed_user_list = requests.get('https://docs.google.com/spreadsheets/d/'+sheet_id+
                                                     '/export?format=csv&gid='+sheet_gid).text.split(
                                                     '\r\n')
                    # print(type(self.student_id))
                    tmp_hash = hashlib.sha256()
                    tmp_hash.update(self.student_id.encode('utf8'))
                    if tmp_hash.hexdigest().upper() in allowed_user_list:
                        self.allowed_id = True
                    self.login_status = True
                    self.login_config.set_headers(package.json()['pageId'])
                    return {'result': True, 'message': '登入成功!'}
                else:
                    return package.json()
            else:
                # print(config.msg_server_begin+'非學生作業時段!學生無法登入!')
                self.login_session.close()
                return {'result': False, 'message': '非學生作業時段!學生無法登入!'}
コード例 #12
0
ファイル: bot.py プロジェクト: strange-capp/catBot
from aiogram import Dispatcher, Bot, types, dispatcher
import requests
import config, models
from urllib.parse import urljoin
import os
from aiogram.utils.executor import start_webhook

bot_token = config.get_token()
url = config.get_url()

WEBHOOK_HOST = f'https://catcatcat-bot.herokuapp.com/'  # Enter here your link from Heroku project settings
WEBHOOK_URL_PATH = '/webhook/' + bot_token
WEBHOOK_URL = urljoin(WEBHOOK_HOST, WEBHOOK_URL_PATH)

cats_url = 'https://api.thecatapi.com/v1/images/search'
vote_url = 'https://api.thecatapi.com/v1/votes/?api_key=9c384300-7b15-449e-991a-205654945bce/'

bot = Bot(bot_token)
dp = Dispatcher(bot)

@dp.message_handler(
    dispatcher.filters.builtin.Text(equals='Помощь')
)
@dp.message_handler(commands=['start', 'help'])
async def start(message):
    """
    Sends a help message
    """
    chat_id = message.chat.id

    user = models.get_user(chat_id)
コード例 #13
0
ファイル: main.py プロジェクト: strvworks/jugyouhenkou
def main():
    j = 0
    even = False
    change = False
    date_li = []
    days_li = []
    class_li = []
    change_li = []
    send_li = []
    day = datetime.datetime.today()
    + datetime.timedelta(1)
    today = day.strftime('%-m月%-d日')

    res = req.urlopen(config.get_url())
    soup = BeautifulSoup(res, 'html.parser')
    changes = soup.select('table:nth-of-type(10) > tr[height="35"] > td')

    for li in changes:
        if even is False:
            cut = li.string
            date_li.append(cut.lstrip())
            even = True
        elif even is True:
            cut = li.string
            change_li.append(cut.lstrip())
            even = False

    for x in date_li:
        days_li.append(re.findall(
            '(\d{1,2}月\d{1,2}日)\(([月火水木金])\) ([12345678])',
            x
            ))
    for x in change_li:
        class_li.append(re.findall('.+ → (.+)', x))

    # today = '10月3日'
    # days_li.append([('10月3日', '火', '8')])
    # print(days_li)
    # class_li.append(['ぎゃぎゃ'])
    # print(class_li)
    for x in days_li:
        time = x[0]
        if x[0][0] == today:
            change = True

            if '月' == time[1]:
                config.mon.change_class(
                        int(zen_to_han(time[2])),
                        class_li[j][0]
                        )
                send_li = config.mon.classes
            elif '火' == time[1]:
                config.tue.change_class(
                        int(zen_to_han(time[2])),
                        class_li[j][0]
                        )
                send_li = config.tue.classes
            elif '水' == time[1]:
                config.wed.change_class(
                        int(zen_to_han(time[2])),
                        class_li[j][0]
                        )
                send_li = config.wed.classes
            elif '木' == time[1]:
                config.thu.change_class(
                        int(zen_to_han(time[2])),
                        class_li[j][0]
                        )
                send_li = config.thu.classes
            elif '金' == time[1]:
                config.fri.change_class(
                        int(zen_to_han(time[2])),
                        class_li[j][0]
                        )
                send_li = config.fri.classes
            # print(send_li)
        else:
            # print('Not match.')
            if '月' == time[1]:
                send_li = config.mon.classes
            elif '火' == time[1]:
                send_li = config.tue.classes
            elif '水' == time[1]:
                send_li = config.wed.classes
            elif '木' == time[1]:
                send_li = config.thu.classes
            elif '金' == time[1]:
                send_li = config.fri.classes
        j += 1

    message = sender.text_gen(
            send_li,
            change,
            today,
            config.get_url()[-2:]
            )
    # print(message)
    sender.sender(message)