add decorator

This commit is contained in:
ForgQi committed 2018-11-17 11:20:41 +08:00
1 parent 2666946475
commit bb253b3df9
20 files changed
+350 -342

No files matched your search

+4 -2
View File
@@ -1,10 +1,12 @@
#!/usr/bin/python3
import sys
import common
from Engine import main
from engine.handler import event_manager
from engine import main
from common.Daemon import Daemon
if __name__ == '__main__':
sys.excepthook = common.new_hook
daemon = Daemon('watch_process.pid')
@@ -20,7 +22,7 @@ if __name__ == '__main__':
sys.exit(2)
sys.exit(0)
elif len(sys.argv) == 1:
main()
main(event_manager)
else:
print('usage: %s start|stop|restart' % sys.argv[0])
sys.exit(2)
-93
View File
@@ -1,93 +0,0 @@
from functools import partial
from multiprocessing.pool import Pool
import yaml
import common
from Engine.downloader import Extractor
from Engine.kernel import CallBack, modify, process, revise, free_upload, \
callback2, all_check
from common.DesignPattern import Service
from common.event import Event
from common.reload import autoreload
from common.timer import Timer
CHECK = 'check'
TO_MODIFY = 'to_modify'
DOWNLOAD_UPLOAD = 'download_upload'
BE_MODIFIED = 'be_modified'
UPLOAD = 'upload'
# print(Urls, url_status, url_status_base)
# def get_queue(q):
# process.q = q
with open(r'config.yaml', encoding='utf-8') as stream:
config = yaml.load(stream)
links_id = config['links_id']
user_name = config['user_name']
pass_word = config['pass_word']
chromedrive_path = config['chromedrive_path']
def getmany():
urls = []
urlstatus = {}
for k, v in links_id.items():
urls += v
for url in v:
urlstatus[url] = 0
return urls, urlstatus, urlstatus.copy()
Urls, url_status, url_status_base = getmany()
batches, onebyone = Extractor().sorted_checker(Urls)
def main():
# pool = Pool(3, initializer=get_queue, initargs=(queue,))
pool = Pool(3)
service_p = partial(Service, pool)
# 初始化事件管理器
event_manager = common.event.EventManager()
# 初始化定时器
timer_ = Timer(func=event_manager.send_event, args=(Event(CHECK),), interval=40)
# 模块更新自动重启
autoreload(event_manager, timer_, interval=15)
# 监听器
# check = Event(CHECK)
# ty = Event(TO_MODIFY)
# dd = Event(DOWNLOAD_UPLOAD)
# bd = Event(BE_MODIFIED)
# ud = Event(UPLOAD)
callback_2 = partial(callback2, event_manager)
service_check = service_p(all_check, callback_2)
modify_p = partial(modify, event_manager)
service_download = service_p(process, CallBack(event_manager, Event(BE_MODIFIED)).send)
# service_upload = service_p(free_upload, None)
upload_p = partial(free_upload, event_manager)
# 批量注册事件
# Engine.downloader.Batch(event_manager, links_id).register()
# 绑定事件和监听器响应函数
event_manager.add_event_listener(CHECK, service_check.start)
event_manager.add_event_listener(TO_MODIFY, modify_p)
event_manager.add_event_listener(DOWNLOAD_UPLOAD, service_download.start)
event_manager.add_event_listener(BE_MODIFIED, revise)
event_manager.add_event_listener(UPLOAD, upload_p)
event_manager.start()
timer_.start()
# 添加事件队列
# event_queue(links_id, queue)
# 定时推送事件
__all__ = ['downloader', 'upload', 'plugins', 'main', 'links_id']
-155
View File
@@ -1,155 +0,0 @@
import time
import requests
import Engine
import common
from Engine.downloader import download
from Engine.upload import Upload
from common import logger
from common.event import Event
def all_check():
live = []
for batch in Engine.batches:
try:
res = batch.check()
if res:
live += res
except requests.exceptions.ReadTimeout as timeout:
logger.error(batch.__class__.__module__ + ',ReadTimeout:' + str(timeout))
except requests.exceptions.SSLError as sslerr:
logger.error(batch.__class__.__module__ + ',SSLError:' + str(sslerr))
except requests.exceptions.ConnectionError as connerr:
logger.error(batch.__class__.__module__ + ',ConnectionError:' + str(connerr))
except requests.exceptions.RequestException:
logger.exception(batch.__class__.__module__)
for one in Engine.onebyone:
for url in one.__plugin__.url_list:
try:
if one.__plugin__('检测' + url, url).check_stream():
live += [url]
except requests.exceptions.ReadTimeout as timeout:
logger.error(one.__plugin__.__module__ + ',ReadTimeout:' + str(timeout))
except requests.exceptions.ConnectTimeout as timeout:
logger.error(one.__plugin__.__module__ + ',ConnectTimeout:' + str(timeout))
except requests.exceptions.ConnectionError as connerr:
logger.error(one.__plugin__.__module__ + ',ConnectionError:' + str(connerr))
except requests.exceptions.ChunkedEncodingError as ceer:
logger.error(one.__plugin__.__module__ + ',ChunkedEncodingError:' + str(ceer))
except requests.exceptions.RequestException:
logger.exception(one.__plugin__.__module__)
if url != one.__plugin__.url_list[-1]:
logger.debug('歇息会')
time.sleep(15)
return live
class CallBack(object):
def __init__(self, event_manager, event):
self.event_manager = event_manager
self.event = event
def send(self, result):
# if result:
self.event.args = (result,)
self.event_manager.send_event(self.event)
def callback2(event_manager, result):
CallBack(event_manager, Event('to_modify')).send(result)
CallBack(event_manager, Event('upload')).send(result)
def modify(event_manager, live_m):
live_m, = live_m.args
live_d = {}
# global url_status
# print(live_m)
if live_m:
for live in live_m:
# print(live)
if Engine.url_status[live] == 1:
pass
# print('已开播正在下载')
else:
# print('刚刚开播,去下载')
name = find_name(live)
event_d = Event('download_upload')
event_d.args = (name, live, 'dl')
event_manager.send_event(event_d)
# self.__run(live)
live_d[live] = 1
Engine.url_status.update(live_d)
# url_status = {**url_status_base, **live_d}
else:
logger.debug('无人直播')
def process(name, url, mod):
try:
now = common.time_now()
if mod == 'dl':
download(name, url)
Upload(name).start(url, now)
elif mod == 'up':
Upload(name).start(url, now)
else:
return url
finally:
return url
def free(list_url):
status_num = list(map(lambda x: Engine.url_status.get(x), list_url))
# print(status_num)
if 1 in status_num or 2 in status_num:
return False
else:
return True
def free_upload(event_manager, urls):
# urls, = urls.args
# print(urlstatus)
# try:
logger.debug(urls)
for title, v in Engine.links_id.items():
# names = list(map(find_name, urls))
url = v[0]
# if title not in names and url_status[url] == 0 and Upload(title, url).filter_file():
if free(v) and Upload(title).filter_file():
event_d = Event('download_upload')
event_d.args = (title, url, 'up')
event_manager.send_event(event_d)
Engine.url_status[url] = 2
# print('up')
# Upload(title, url).start()
# except:
# logger.exception()
# print('寻找结束')
def revise(url):
# if type(url) is dict:
# url = url['result']
url, = url.args
if url:
# global url_status
# url_status = {**url_status, **{url: 0}}
Engine.url_status.update({url: 0})
# print('更新字典')
# print(url_status)
def find_name(url):
for name in Engine.links_id:
if url in Engine.links_id[name]:
return name
+3 -2
View File
@@ -4,7 +4,8 @@ import sys
import os
import time
import atexit
from Engine import main
from engine import main
from engine.handler import event_manager
logger = logging.getLogger('log01')
@@ -121,7 +122,7 @@ class Daemon(object):
@staticmethod
def _run():
""" run your fun"""
main()
main(event_manager)
# if __name__ == '__main__':
-25
View File
@@ -1,25 +0,0 @@
def singleton(cls):
instance = cls()
cls.__call__ = lambda self: instance
return instance
# 用来包装需要多进程的函数(多进程执行避免主进程阻塞)
class Service:
def __init__(self, pool, func, callback):
# 事件处理进程池
self.__pool = pool
self.__func = func
self.callback = callback
def __run(self, args):
self.__pool.apply_async(func=self.__func, args=args, callback=self.callback)
# self.__pool.apply(func=self.__func, args=args)
def start(self, event):
args = event.args
self.__run(args)
def stop(self):
self.__pool.close()
self.__pool.join()
+2 -2
View File
@@ -31,9 +31,9 @@ args=("ds_update.log", "W0", 1, 1)
keys=form01,form02
[formatter_form01]
format=%(asctime)s %(filename)s[line:%(lineno)d](Pid:%(process)s) %(levelname)s %(message)s
format=%(asctime)s %(filename)s[line:%(lineno)d](Pid:%(process)d Tid:%(thread)d) %(levelname)s %(message)s
[formatter_form02]
format=%(filename)s%(lineno)d[%(levelname)s]%(message)s
format=%(filename)s%(lineno)d[%(levelname)s]Tname:%(threadName)s %(message)s
+73 -3
View File
@@ -1,7 +1,10 @@
# encoding: UTF-8
# 系统模块
import inspect
from concurrent.futures.thread import ThreadPoolExecutor
from queue import Queue, Empty
from threading import *
import functools
class EventManager:
@@ -13,11 +16,17 @@ class EventManager:
self.__active = False
# 事件处理线程
self.__thread = Thread(target=self.__run)
# 事件处理线程池
self.__pool = ThreadPoolExecutor(3)
# 阻塞函数列表
self.__block = []
# 这里的__handlers是一个字典,用来保存对应的事件的响应函数
# 其中每个键对应的值是一个列表,列表中保存了对该事件监听的响应函数,一对多
self.__handlers = {}
self.__method = {}
def __run(self):
"""引擎运行"""
while self.__active is True:
@@ -34,7 +43,10 @@ class EventManager:
if event.type_ in self.__handlers:
# 若存在,则按顺序将事件传递给处理函数执行
for handler in self.__handlers[event.type_]:
handler(event)
if handler.__qualname__ in self.__block:
self.__pool.submit(handler, event)
else:
handler(event)
def start(self):
"""启动"""
@@ -47,9 +59,11 @@ class EventManager:
"""停止"""
# 将事件管理器设为停止
self.__active = False
self.__pool.shutdown()
# 等待事件处理线程退出
self.__thread.join()
def add_event_listener(self, type_, handler):
"""绑定事件和监听器处理函数"""
# 尝试获取该事件类型对应的处理函数列表,若无则创建
@@ -83,10 +97,66 @@ class EventManager:
"""发送事件,向事件队列中存入事件"""
self.__eventQueue.put(event)
def register(self, type_, block=False):
classname = inspect.getouterframes(inspect.currentframe())[1][3]
def callback(result):
if not result:
pass
elif isinstance(result, tuple):
for event in result:
self.send_event(event)
else:
self.send_event(result)
def appendblock(fc, blk):
if blk:
self.__block.append(fc.__qualname__)
if classname == '<module>':
def decorator(func):
appendblock(func, block)
@functools.wraps(func)
def wrapper(event):
_event = func(*event.args)
callback(_event)
return _event
self.add_event_listener(type_, wrapper)
return wrapper
else:
def decorator(func):
appendblock(func, block)
self.__method.setdefault(type_, [])
self.__method[type_].append(func.__name__)
@functools.wraps(func)
def wrapper(this, event):
_event = func(this, *event.args)
callback(_event)
return _event
return wrapper
return decorator
def server(self, *args):
def decorator(cls):
for type_ in self.__method:
for handler in self.__method[type_]:
self.add_event_listener(type_, getattr(cls(*args), handler))
self.__method = {}
return cls
return decorator
class Event:
"""事件对象"""
def __init__(self, type_=None):
self.type_ = type_ # 事件类型
self.dict = {} # 字典用于保存具体的事件数据
self.type_ = type_ # 事件类型
self.dict = {} # 字典用于保存具体的事件数据
self.args = ()
+2
View File
@@ -1,5 +1,7 @@
import threading
from common import logger
class Timer(object):
def __init__(self, func, args=(), kwargs=None, interval=15):
+52
View File
@@ -0,0 +1,52 @@
import yaml
from common.event import Event
from common.reload import autoreload
from common.timer import Timer
def getmany(_links_id):
_urls = []
urlstatus = {}
for k, v in _links_id.items():
_urls += v
for url in v:
urlstatus[url] = 0
return _urls, urlstatus, urlstatus.copy()
def find_name(url):
for name in links_id:
if url in links_id[name]:
return name
def main(event_manager):
# 初始化定时器
timer_ = Timer(func=event_manager.send_event, args=(Event(CHECK),), interval=40)
# 模块更新自动重启
autoreload(event_manager, timer_, interval=15)
event_manager.start()
timer_.start()
CHECK = 'check'
TO_MODIFY = 'to_modify'
DOWNLOAD_UPLOAD = 'download_upload'
BE_MODIFIED = 'be_modified'
UPLOAD = 'upload'
# def get_queue(q):
# process.q = q
with open(r'config.yaml', encoding='utf-8') as stream:
config = yaml.load(stream)
links_id = config['links_id']
user_name = config['user_name']
pass_word = config['pass_word']
chromedrive_path = config['chromedrive_path']
urls, url_status, url_status_base = getmany(links_id)
__all__ = ['downloader', 'upload', 'plugins', 'main',
'urls', 'url_status', 'url_status_base',
'CHECK', 'BE_MODIFIED', 'DOWNLOAD_UPLOAD', 'TO_MODIFY', 'UPLOAD']
+13 -13
View File
@@ -1,20 +1,20 @@
import pkgutil
import importlib
import re
import Engine.plugins.douyu
from Engine.plugins import general
from common.DesignPattern import singleton
import engine.plugins.douyu
from engine.plugins import general
# from common.DesignPattern import singleton
@singleton
# @singleton
class Extractor(object):
def __init__(self):
self.plugins = []
self.load_plugins(Engine.plugins.__path__[0])
self.load_plugins(engine.plugins.__path__[0])
def get_plugins(self):
# self.load_plugins(Engine.plugins.__path__[0])
return self.plugins
# def get_plugins(self):
# # self.load_plugins(engine.plugins.__path__[0])
# return self.plugins
def load_plugins(self, path):
"""Attempt to load plugins from the path specified.
@@ -24,7 +24,7 @@ class Extractor(object):
"""
for loader, name, ispkg in pkgutil.iter_modules([path]):
# set the full plugin module name
module_name = "Engine.plugins.{0}".format(name)
module_name = "engine.plugins.{0}".format(name)
# print(module_name)
self.load_plugin(module_name)
# print(self.plugins)
@@ -61,16 +61,16 @@ class Extractor(object):
if hasattr(plugin, signature):
batches.append(plugin.BatchCheck(plugin.__plugin__.url_list))
else:
onebyone.append(plugin)
onebyone.append(plugin.__plugin__)
general.__plugin__.url_list = curls
onebyone.append(general)
# onebyone.append(__import__('Engine.plugins.general', fromlist=['general',]))
onebyone.append(general.__plugin__)
# onebyone.append(__import__('engine.plugins.general', fromlist=['general',]))
return batches, onebyone
def download(fname, url):
extractor = Extractor()
plugins = extractor.get_plugins()
plugins = extractor.plugins
for plugin in plugins:
if hasattr(plugin, "VALID_URL_BASE"):
if re.match(plugin.VALID_URL_BASE, url):
+154
View File
@@ -0,0 +1,154 @@
import multiprocessing
import time
import requests
import engine
import common
from engine import CHECK, BE_MODIFIED, DOWNLOAD_UPLOAD, TO_MODIFY, UPLOAD, urls, url_status, url_status_base
from engine.downloader import download, Extractor
from engine.upload import Upload
from common import logger
from common.event import Event
# 初始化事件管理器
event_manager = common.event.EventManager()
@event_manager.register(CHECK, block=True)
def all_check():
batches, onebyone = Extractor().sorted_checker(urls)
live = []
try:
for batch in batches:
try:
res = batch.check()
if res:
live += res
except requests.exceptions.ReadTimeout as timeout:
logger.error(batch.__class__.__module__ + ',ReadTimeout:' + str(timeout))
except requests.exceptions.SSLError as sslerr:
logger.error(batch.__class__.__module__ + ',SSLError:' + str(sslerr))
except requests.exceptions.ConnectionError as connerr:
logger.error(batch.__class__.__module__ + ',ConnectionError:' + str(connerr))
except requests.exceptions.RequestException:
logger.exception(batch.__class__.__module__)
for one in onebyone:
for url in one.url_list:
try:
if one('检测' + url, url).check_stream():
live += [url]
except requests.exceptions.ReadTimeout as timeout:
logger.error(one.__plugin__.__module__ + ',ReadTimeout:' + str(timeout))
except requests.exceptions.ConnectTimeout as timeout:
logger.error(one.__plugin__.__module__ + ',ConnectTimeout:' + str(timeout))
except requests.exceptions.ConnectionError as connerr:
logger.error(one.__plugin__.__module__ + ',ConnectionError:' + str(connerr))
except requests.exceptions.ChunkedEncodingError as ceer:
logger.error(one.__plugin__.__module__ + ',ChunkedEncodingError:' + str(ceer))
except requests.exceptions.RequestException:
logger.exception(one.__plugin__.__module__)
if url != one.url_list[-1]:
logger.debug('歇息会')
time.sleep(15)
finally:
event_t = Event(TO_MODIFY)
event_t.args = (live,)
event_u = Event(UPLOAD)
event_u.args = (live,)
return event_u, event_t
@event_manager.register(DOWNLOAD_UPLOAD, block=True)
def process(name, url, mod):
try:
now = common.time_now()
if mod == 'dl':
p = multiprocessing.Process(target=download, args=(name, url))
p.start()
p.join()
# download(name, url)
Upload(name).start(url, now)
elif mod == 'up':
Upload(name).start(url, now)
else:
return url
finally:
event = Event(BE_MODIFIED)
event.args = (url,)
# return url
return event
@event_manager.server(urls, url_status, url_status_base)
class KernelFunc:
def __init__(self, _urls, _url_status, _url_status_base):
self.urls = _urls
self.url_status = _url_status
self.url_status_base = _url_status_base
@event_manager.register(engine.TO_MODIFY)
def modify(self, live_m):
live_d = {}
# print(live_m)
if live_m:
event = []
for live in live_m:
if self.url_status[live] == 1:
# 已开播正在下载
print('已开播正在下载')
pass
else:
name = engine.find_name(live)
logger.debug(name + '刚刚开播,去下载')
event_d = Event(DOWNLOAD_UPLOAD)
event_d.args = (name, live, 'dl')
event.append(event_d)
live_d[live] = 1
self.url_status.update(live_d)
# url_status = {**url_status_base, **live_d}
return tuple(event)
else:
logger.debug('无人直播')
def free(self, list_url):
status_num = list(map(lambda x: self.url_status.get(x), list_url))
# print(status_num)
if 1 in status_num or 2 in status_num:
return False
else:
return True
@event_manager.register(engine.UPLOAD)
def free_upload(self, _urls):
logger.debug(_urls)
event = []
for title, v in engine.links_id.items():
# names = list(map(find_name, urls))
url = v[0]
# if title not in names and url_status[url] == 0 and Upload(title, url).filter_file():
if self.free(v) and Upload(title).filter_file():
event_d = Event(DOWNLOAD_UPLOAD)
event_d.args = (title, url, 'up')
event.append(event_d)
# self.event_manager.send_event(event_d)
self.url_status[url] = 2
# print('up')
return tuple(event)
# Upload(title, url).start()
# except:
# logger.exception()
# print('寻找结束')
@event_manager.register(engine.BE_MODIFIED)
def revise(self, url):
if url:
# url_status = {**url_status, **{url: 0}}
self.url_status.update({url: 0})
# print('更新字典')
# print(url_status)
File renamed without changes.
@@ -3,8 +3,8 @@ import json
import re
import time
import requests
from Engine.plugins import FFmpegdl, match1
from Engine.plugins.twitch import headers
from engine.plugins import FFmpegdl, match1
from engine.plugins.twitch import headers
from common import logger
VALID_URL_BASE = r'(?:https?://)?(?:(?:www|m)\.)?douyu\.com'
@@ -1,4 +1,4 @@
from Engine.plugins import SDownload
from engine.plugins import SDownload
class Generic(SDownload):
@@ -1,9 +1,9 @@
import json
import requests
import Engine.plugins
import Engine.plugins.douyu
from Engine.plugins import FFmpegdl
import engine.plugins
import engine.plugins.douyu
from engine.plugins import FFmpegdl
from common import logger
VALID_URL_BASE = r'(?:https?://)?(?:(?:www|m)\.)?huya\.com'
@@ -21,7 +21,7 @@ class Huya(FFmpegdl):
res = requests.get(self.url, timeout=5, headers=user_agent)
res.close()
data = res.text
huya = Engine.plugins.match1(data, r'({"sCdnType":"TX".*?})')
huya = engine.plugins.match1(data, r'({"sCdnType":"TX".*?})')
if huya:
huyajson = json.loads(huya)
self.ydl_opts["absurl"] = huyajson["sFlvUrl"] + '/' + huyajson["sStreamName"] + '.' + \
@@ -1,5 +1,5 @@
import requests
from Engine.plugins import BatchCheckBase, SDownload
from engine.plugins import BatchCheckBase, SDownload
from common import logger
VALID_URL_BASE = r'(?:https?://)?(?:www\.)?panda\.tv/(?P<id>[0-9]+)'
@@ -1,7 +1,7 @@
# import json
# import re
import requests
from Engine.plugins import YDownload, BatchCheckBase
from engine.plugins import YDownload, BatchCheckBase
from common import logger
headers = {
@@ -16,38 +16,10 @@ class Twitch(YDownload):
def __init__(self, fname, url, suffix='mp4'):
YDownload.__init__(self, fname, url, suffix=suffix)
# def check_stream(self):
#
# check_url = re.sub(r'.*twitch.tv', 'https://api.twitch.tv/kraken/streams', self.url)
# try:
# res = requests.get(check_url, headers=headers)
# res.close()
# except requests.exceptions.SSLError:
# logger.error('获取流信息发生错误')
# logger.error(requests.exceptions.SSLError, exc_info=True)
# return None
# except requests.exceptions.ConnectionError:
# logger.exception('During handling of the above exception, another exception occurred:')
# return None
#
# try:
# s = json.loads(res.text)
# # s = res.json() https://api.twitch.tv/kraken/streams/
# except json.decoder.JSONDecodeError:
# logger.exception('Expecting value')
# return None
# print(self.fname)
# try:
# stream = s['stream']
# except KeyError:
# logger.error(KeyError, exc_info=True)
# return None
# return stream
def dl(self):
info_list = self.get_sinfo()
if self.fname in ['星际2ByuN武圣人族天梯第一视角', '星际2INnoVation吕布卫星人族天梯第一视角', '星际2Maru人族天梯第一视角']:
if self.fname not in ['星际2PartinG跳跳胖丁神族天梯第一视角']:
pass
elif '720p' in info_list:
self.ydl_opts['format'] = '720p'
@@ -57,6 +29,34 @@ class Twitch(YDownload):
super().dl()
# def check_stream(self):
#
# check_url = re.sub(r'.*twitch.tv', 'https://api.twitch.tv/kraken/streams', self.url)
# try:
# res = requests.get(check_url, headers=headers)
# res.close()
# except requests.exceptions.SSLError:
# logger.error('获取流信息发生错误')
# logger.error(requests.exceptions.SSLError, exc_info=True)
# return None
# except requests.exceptions.ConnectionError:
# logger.exception('During handling of the above exception, another exception occurred:')
# return None
#
# try:
# s = json.loads(res.text)
# # s = res.json() https://api.twitch.tv/kraken/streams/
# except json.decoder.JSONDecodeError:
# logger.exception('Expecting value')
# return None
# print(self.fname)
# try:
# stream = s['stream']
# except KeyError:
# logger.error(KeyError, exc_info=True)
# return None
# return stream
class BatchCheck(BatchCheckBase):
def __init__(self, urls):
BatchCheckBase.__init__(self, pattern_id=VALID_URL_BASE, urls=urls)
File renamed without changes.
+8 -8
View File
@@ -3,9 +3,9 @@ import os
from selenium import webdriver
import selenium.common
import time
import Engine
import Engine.kernel
from Engine.slider import slider_cracker
import engine
import engine.handler
from engine.slider import slider_cracker
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
@@ -24,7 +24,7 @@ class Upload(object):
# @property
# def file_name(self):
# now = Engine.work.time_now()
# now = engine.work.time_now()
# file_name = '%s%s' % (now, self.title)
# return file_name
@@ -86,7 +86,7 @@ class Upload(object):
def upload(self, title_, file_list, link):
filename = 'Engine/bilibili.cookie'
filename = 'engine/bilibili.cookie'
# title_ = self.r_title
videopath = self.assemble_videopath(file_list)
@@ -94,7 +94,7 @@ class Upload(object):
options = webdriver.ChromeOptions()
options.add_argument('headless')
driver = webdriver.Chrome(executable_path=Engine.chromedrive_path, chrome_options=options)
driver = webdriver.Chrome(executable_path=engine.chromedrive_path, chrome_options=options)
# service_log_path=service_log_path)
try:
# service_log_path = "{}/chromedriver.log".format('/home')
@@ -243,10 +243,10 @@ class Upload(object):
ec.presence_of_element_located((By.XPATH, r'//*[@id="login-username"]')))
username = driver.find_element_by_xpath(r'//*[@id="login-username"]')
username.send_keys(Engine.user_name)
username.send_keys(engine.user_name)
password = driver.find_element_by_xpath('//*[@id="login-passwd"]')
password.send_keys(Engine.pass_word)
password.send_keys(engine.pass_word)
# logger.info('第四步')
# try:
cracker = slider_cracker(driver)
+1 -1
View File
@@ -1,6 +1,6 @@
selenium==3.8.1
psutil==5.4.6
youtube_dl==2018.10.5
youtube_dl==2018.11.7
Pillow==5.2.0
Requests==2.20.0
PyYAML==3.12