delete dir
This commit is contained in:
1 parent
5c9ce5548f
commit
e2f17015fd
4 files changed
-817
No files matched your search
@@ -1,39 +0,0 @@
|
||||
[loggers]
|
||||
keys=root, log01
|
||||
|
||||
[logger_root]
|
||||
level=INFO
|
||||
handlers=handler01
|
||||
|
||||
[logger_log01]
|
||||
level=INFO
|
||||
handlers=handler02
|
||||
qualname=log01
|
||||
|
||||
|
||||
[handlers]
|
||||
keys=handler01,handler02
|
||||
|
||||
[handler_handler01]
|
||||
class=StreamHandler
|
||||
level=INFO
|
||||
formatter=form02
|
||||
args=(sys.stdout,)
|
||||
|
||||
[handler_handler02]
|
||||
class=work.SafeRotatingFileHandler
|
||||
level=INFO
|
||||
formatter=form01
|
||||
args=("ds_update.log", "W0", 1, 1)
|
||||
|
||||
|
||||
[formatters]
|
||||
keys=form01,form02
|
||||
|
||||
[formatter_form01]
|
||||
format=%(asctime)s %(filename)s[line:%(lineno)d](Pid:%(process)s) %(levelname)s %(message)s
|
||||
[formatter_form02]
|
||||
format=%(lineno)d[%(levelname)s]%(message)s
|
||||
|
||||
|
||||
|
||||
-229
@@ -1,229 +0,0 @@
|
||||
from upload import *
|
||||
import os
|
||||
import requests
|
||||
import json
|
||||
import time
|
||||
import youtube_dl
|
||||
|
||||
# logger = logging.getLogger('log01')
|
||||
|
||||
# links = ['www.twitch.tv/innovation_s2','www.panda.tv/1160340','www.twitch.tv/sc2soo','www.panda.tv/1150595','www.twitch.tv/kimdaeyeob3']
|
||||
|
||||
root_url = ['https://www.twitch.tv/', 'https://www.panda.tv/', 'https://api.twitch.tv/kraken/streams/']
|
||||
|
||||
links_id = {
|
||||
'星际2Innovation吕布卫星人族天梯第一视角': ['innovation_s2', '1160340'],
|
||||
'星际2soO输本虫族天梯第一视角': ['sc2soo', '1150595'],
|
||||
'星际2sOs狗哥神族天梯第一视角': ['', '1160930'],
|
||||
'星际2Stats拔本神族天梯第一视角': ['kimdaeyeob3'],
|
||||
'星际2Dark暗本虫族天梯第一视角': ['qkrfuddn0'],
|
||||
'星际2Scarlett噶姐虫族天梯第一视角': ['scarlettm'],
|
||||
'星际2GuMiho砸本人族天梯第一视角': ['gumiho'],
|
||||
'星际2Maru人族天梯第一视角': ['maru072'],
|
||||
'星际2TY全教主全太阳人族天梯第一视角': ['sc2tyty'],
|
||||
'星际2ByuN武圣人族天梯第一视角': ['byunprime'],
|
||||
'星际2小herO神族天梯第一视角': ['dmadkr0818'],
|
||||
'星际2Zest神族天梯第一视角': ['sc2_zest'],
|
||||
'星际2PartinG跳跳胖丁神族天梯第一视角':['partingthebigboy'],
|
||||
# '星际ForGG火车王人族天梯第一视角': ['forgg'],
|
||||
# '星际2NoRegreT莲弟虫族天梯第一视角': ['noregret_']
|
||||
# 'test':['expertmma','37229'],
|
||||
# 'test1':['byunprime','10003']
|
||||
}
|
||||
|
||||
headers = {
|
||||
'client-id': 'jzkbprff40iqj646a697cyrvl0zt2m6'
|
||||
}
|
||||
|
||||
|
||||
def get_twitch_stream(url, key):
|
||||
try:
|
||||
res = requests.get(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()
|
||||
except json.decoder.JSONDecodeError:
|
||||
logger.exception('Expecting value')
|
||||
return None
|
||||
print(key)
|
||||
try:
|
||||
stream = s['stream']
|
||||
except KeyError :
|
||||
logger.error(KeyError, exc_info = True)
|
||||
return None
|
||||
return stream
|
||||
|
||||
|
||||
def download_twitch_stream(dict, q, confirm_url, key_, url_, tfile_name_, value_=None):
|
||||
status_ = get_twitch_stream(confirm_url,key_)
|
||||
# print(status_)
|
||||
if str(status_) != 'None':
|
||||
if value_ is None:
|
||||
value_ = dict[key_]
|
||||
dict.pop(key_)
|
||||
else:
|
||||
logger.info('准备递归下载'+key_)
|
||||
print('开始下载twitch', key_)
|
||||
logger.info('开始下载twitch:' + key_)
|
||||
ydl_opts = {
|
||||
'outtmpl': tfile_name_,
|
||||
# 'format': '720p'
|
||||
# 'external_downloader_args':['-timeout', '5']
|
||||
# 'keep_fragments':True
|
||||
}
|
||||
list_info = []
|
||||
|
||||
with youtube_dl.YoutubeDL() as ydl:
|
||||
info = ydl.extract_info(url_, download=False)
|
||||
for i in info['formats']:
|
||||
list_info.append(i['format_id'])
|
||||
|
||||
if key_ in ['星际2ByuN武圣人族天梯第一视角', '星际2Innovation吕布卫星人族天梯第一视角', '星际2Maru人族天梯第一视角']:
|
||||
pass
|
||||
elif '720p' in list_info:
|
||||
ydl_opts['format'] = '720p'
|
||||
elif '720p60' in list_info:
|
||||
ydl_opts['format'] = '720p60'
|
||||
|
||||
|
||||
try:
|
||||
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
|
||||
|
||||
pid = os.getpid()
|
||||
q.put([pid, tfile_name_])
|
||||
|
||||
ydl.download([url_])
|
||||
|
||||
print('下载完成')
|
||||
logger.info('下载完成' + key_)
|
||||
|
||||
uploads(tfile_name_, url_)
|
||||
|
||||
except youtube_dl.utils.DownloadError:
|
||||
|
||||
# print('分段下载')
|
||||
try:
|
||||
os.rename(tfile_name_ + '.part', tfile_name_[:-4] + str(time.time())[:10] + tfile_name_[-4:])
|
||||
logger.info('更名{0}为{1}+时间'.format(tfile_name_ + '.part', tfile_name_))
|
||||
except FileExistsError:
|
||||
os.rename(tfile_name_ + '.part', tfile_name_[:-4] + str(time.time())[:10] + tfile_name_[-4:])
|
||||
logger.info('FileExistsError更名{0}为{1}'.format(tfile_name_ + '.part', tfile_name_))
|
||||
|
||||
download_twitch_stream(dict, q, confirm_url, key_, url_, tfile_name_, value_)
|
||||
|
||||
finally:
|
||||
dict[key_] = value_
|
||||
logger.info('退出下载')
|
||||
|
||||
elif len(dict[key_]) == 1:
|
||||
value_ = dict[key_]
|
||||
dict.pop(key_)
|
||||
|
||||
supplemental_upload(dict, tfile_name_, key_, url_, value_)
|
||||
|
||||
|
||||
def download_panda_stream(dict, q, key_, url_, pfile_name_, value_=None):
|
||||
if value_ is None:
|
||||
value_ = dict[key_]
|
||||
dict.pop(key_)
|
||||
else:
|
||||
logger.info('准备递归下载'+key_)
|
||||
list_info = []
|
||||
with youtube_dl.YoutubeDL() as ydl:
|
||||
try:
|
||||
info = ydl.extract_info(url_, download=False)
|
||||
for i in info['formats']:
|
||||
list_info.append(i['format_id'])
|
||||
except youtube_dl.utils.DownloadError:
|
||||
logger.debug('%s未开播或读取下载信息失败' % key_)
|
||||
|
||||
# logger.debug('准备补充上传'+key_)
|
||||
supplemental_upload(dict, pfile_name_, key_, url_, value_)
|
||||
return
|
||||
|
||||
ydl_opts = {
|
||||
'outtmpl': pfile_name_,
|
||||
# 'format': 'HD-flv',
|
||||
}
|
||||
|
||||
|
||||
# if 'HD-flv' in list_info:
|
||||
# ydl_opts = {
|
||||
# 'outtmpl': pfile_name_,
|
||||
# 'format': 'HD-flv',
|
||||
# }
|
||||
# else:
|
||||
# ydl_opts = {
|
||||
# 'outtmpl': pfile_name_,
|
||||
# 'format': 'SD-flv',
|
||||
# # 'keep_fragments':True
|
||||
# # 'postprocessors': [{
|
||||
# # 'key': 'FFmpegFixupM3u8',
|
||||
# # 'preferredcodec': 'mp3',
|
||||
# # 'preferredquality': '1900',
|
||||
# # }],
|
||||
# }
|
||||
try:
|
||||
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
|
||||
pid = os.getpid()
|
||||
# print(pid)
|
||||
q.put([pid, pfile_name_])
|
||||
|
||||
# if os.path.isfile(pfile_name_):
|
||||
# os.rename(pfile_name_, pfile_name_ + '.part')
|
||||
# logger.info('存在{0}更名为{1}'.format(pfile_name_, pfile_name_ + '.part'))
|
||||
|
||||
logger.info('开始下载pandaTV' + key_)
|
||||
ydl.download([url_])
|
||||
|
||||
print('下载完成')
|
||||
logger.info('下载完成' + key_)
|
||||
|
||||
with youtube_dl.YoutubeDL() as ydl:
|
||||
try:
|
||||
info = ydl.extract_info(url_, download=False)
|
||||
except youtube_dl.utils.DownloadError:
|
||||
|
||||
uploads(pfile_name_, url_)
|
||||
|
||||
return
|
||||
|
||||
logger.info('实际未下载完成' + key_)
|
||||
|
||||
if os.path.isfile(pfile_name_):
|
||||
os.rename(pfile_name_, pfile_name_[:-4] + str(time.time())[:10] + pfile_name_[-4:])
|
||||
logger.info('存在{0}更名为{1}'.format(pfile_name_, pfile_name_[:-4] + '时间' + pfile_name_[-4:]))
|
||||
|
||||
download_panda_stream(dict, q, key_, url_, pfile_name_, value_)
|
||||
except KeyboardInterrupt:
|
||||
# except youtube_dl.utils.DownloadError:
|
||||
try:
|
||||
# logger.info('更名{0}'.format(pfile_name_+ '.part'))
|
||||
os.rename(pfile_name_ + '.part', pfile_name_[:-4] + str(time.time())[:10] + pfile_name_[-4:])
|
||||
logger.info('下载进程发生KeyboardInterrupt更名{0}为{1}+时间'.format(pfile_name_ + '.part', pfile_name_))
|
||||
except FileExistsError:
|
||||
os.rename(pfile_name_ + '.part', pfile_name_[:-4] + str(time.time())[:10] + pfile_name_[-4:])
|
||||
logger.info('FileExistsError:更名{0}为{1}'.format(pfile_name_ + '.part', pfile_name_))
|
||||
download_panda_stream(dict, q, key_, url_, pfile_name_, value_)
|
||||
finally:
|
||||
dict[key_] = value_
|
||||
logger.info('退出下载')
|
||||
|
||||
|
||||
def download_stream(dict, q, confirm_url, key_, twitch_url_, panda_url_, tfile_name_, pfile_name_):
|
||||
# print('子进程id%s'%(os.getpid()))
|
||||
download_twitch_stream(dict, q, confirm_url, key_, twitch_url_, tfile_name_)
|
||||
download_panda_stream(dict, q, key_, panda_url_, pfile_name_)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
get_twitch_stream('https://api.twitch.tv/kraken/streams/1160340','233')
|
||||
@@ -1,372 +0,0 @@
|
||||
import json
|
||||
import os
|
||||
from selenium import webdriver
|
||||
import selenium
|
||||
import time
|
||||
from bin.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
|
||||
from selenium.webdriver.common.keys import Keys
|
||||
import logging
|
||||
|
||||
|
||||
# 10800 18000 4110
|
||||
|
||||
|
||||
logger = logging.getLogger('log01')
|
||||
|
||||
def get_file(filename):
|
||||
file_list = []
|
||||
for file_name in os.listdir():
|
||||
if filename[:-15] in file_name:
|
||||
file_list.append(file_name)
|
||||
return sorted(file_list)
|
||||
|
||||
|
||||
def remove_filelist(file_list):
|
||||
for r in file_list:
|
||||
os.remove(r)
|
||||
logger.info('删除-' + r)
|
||||
|
||||
def filter_file(file_list):
|
||||
for r in file_list:
|
||||
file_size = os.path.getsize(r) / 1024 / 1024 / 1024
|
||||
if file_size <= 0.1:
|
||||
os.remove(r)
|
||||
logger.info('过滤删除-' + r)
|
||||
|
||||
|
||||
def is_element_exist(driver, xpath):
|
||||
s = driver.find_elements_by_xpath(xpath=xpath)
|
||||
if len(s) == 0:
|
||||
print("元素未找到:%s"%xpath)
|
||||
return False
|
||||
elif len(s) == 1:
|
||||
return True
|
||||
else:
|
||||
print("找到%s个元素:%s"%(len(s),xpath))
|
||||
return False
|
||||
|
||||
def upload(video_list, link, title_):
|
||||
|
||||
filename = 'bin/bilibili.cookie'
|
||||
user_name = ''
|
||||
pass_word = ''
|
||||
|
||||
video_path = assemble_videopath(video_list)
|
||||
|
||||
service_log_path = "{}/chromedriver.log".format('/home')
|
||||
options = webdriver.ChromeOptions()
|
||||
|
||||
options.add_argument('headless')
|
||||
driver = webdriver.Chrome(executable_path='/usr/bin/chromedriver', chrome_options=options,
|
||||
service_log_path=service_log_path)
|
||||
try:
|
||||
# service_log_path = "{}/chromedriver.log".format('/home')
|
||||
# service_log_path = "{}\\chromedriver.log".format('D:\\bilibiliupload')
|
||||
|
||||
|
||||
# video_path = '/home/wardiii.mp4'
|
||||
# video_path = 'D:\\p2.flv\nD:\\p1.flv\nD:\\享受星际!!!看会比赛.flv'
|
||||
# link = 'https://www.panda.tv/1160340'
|
||||
|
||||
# options = webdriver.ChromeOptions()
|
||||
#
|
||||
# options.add_argument('headless')
|
||||
|
||||
# options.add_argument('no-sandbox')
|
||||
# options.binary_location = '/usr/bin/google-chrome-stable'
|
||||
|
||||
|
||||
# driver = webdriver.Chrome(executable_path='/usr/bin/chromedriver', chrome_options=options,
|
||||
# service_log_path=service_log_path)
|
||||
# driver = webdriver.Chrome(executable_path=r'D:\bilibiliupload\chromedriver.exe',service_log_path=service_log_path)
|
||||
driver.get("https://www.bilibili.com")
|
||||
# driver.delete_all_cookies()
|
||||
# cookies = [
|
||||
# {'domain': '.bilibili.com', 'expiry': 1611825707.027044, 'httpOnly': False, 'name': 'buvid3', 'path': '/',
|
||||
# 'secure': False, 'value': 'A558A031-653B-4890-917D-C205F81B84F93220infoc'},
|
||||
# {'domain': '.bilibili.com', 'expiry': 1611825706, 'httpOnly': False, 'name': 'fts', 'path': '/',
|
||||
# 'secure': False, 'value': '1517217707'},
|
||||
# {'domain': '.bilibili.com', 'expiry': 1519809706, 'httpOnly': False, 'name': 'finger', 'path': '/',
|
||||
# 'secure': False, 'value': 'edc6ecda'},
|
||||
# {'domain': '.bilibili.com', 'expiry': 1519809723.74952, 'httpOnly': False, 'name': 'DedeUserID',
|
||||
# 'path': '/', 'secure': False, 'value': '274986200'},
|
||||
# {'domain': '.bilibili.com', 'expiry': 1548753707.683233, 'httpOnly': False, 'name': 'sid', 'path': '/',
|
||||
# 'secure': False, 'value': 'llkelw0h'},
|
||||
# {'domain': '.bilibili.com', 'expiry': 1519809723.749743, 'httpOnly': False, 'name': 'bili_jct', 'path': '/',
|
||||
# 'secure': False, 'value': 'af58729164b6a192b07cd720ded677a5'},
|
||||
# {'domain': '.bilibili.com', 'expiry': 1519809723.749621, 'httpOnly': False, 'name': 'DedeUserID__ckMd5',
|
||||
# 'path': '/', 'secure': False, 'value': '1206e39bc044fe98'},
|
||||
# {'domain': '.bilibili.com', 'expiry': 1519809723.749689, 'httpOnly': True, 'name': 'SESSDATA', 'path': '/',
|
||||
# 'secure': False, 'value': '3e02f3d0%2C1519809723%2C3ee58d91'},
|
||||
# {'domain': '.bilibili.com', 'expiry': 2177452800.339961, 'httpOnly': False, 'name': 'LIVE_BUVID',
|
||||
# 'path': '/', 'secure': False, 'value': 'AUTO7015172177246979'},
|
||||
# {'domain': '.bilibili.com', 'expiry': 1517221325.776721, 'httpOnly': True, 'name': '_dfcaptcha',
|
||||
# 'path': '/', 'secure': False, 'value': 'a32213f1be85682d37cde24aedc2d135'}]
|
||||
|
||||
with open(filename) as f:
|
||||
new_cookie = json.load(f)
|
||||
|
||||
for cookie in new_cookie:
|
||||
# print(cookie)
|
||||
driver.add_cookie(cookie)
|
||||
|
||||
# cookie = driver.get_cookies()
|
||||
# print(cookie)
|
||||
# driver.get("https://www.bilibili.com")
|
||||
|
||||
driver.get("https://member.bilibili.com/video/upload.html")
|
||||
|
||||
# print(driver.title)
|
||||
WebDriverWait(driver, 20).until(
|
||||
EC.presence_of_element_located((By.NAME, 'file')))
|
||||
upload = driver.find_element_by_name('file')
|
||||
|
||||
print(driver.title)
|
||||
|
||||
cookie = driver.get_cookies()
|
||||
#
|
||||
with open(filename, "w") as f:
|
||||
json.dump(cookie, f)
|
||||
|
||||
# logger.info(driver.title)
|
||||
logger.info('开始上传' + title_)
|
||||
upload.send_keys(video_path) # send_keys
|
||||
# sb = driver.find_element_by_xpath(r'//*[@id="app"]/div[3]/div/div/div/div/div')
|
||||
# sb.click()
|
||||
# with open('bilibili.html', 'w', encoding='utf-8') as f:
|
||||
# f.write(driver.page_source) # 保存网页到本地
|
||||
# print('截图')
|
||||
# screen_shot = driver.save_screenshot('bin/1.png')
|
||||
# time.sleep(20)
|
||||
# screen_shot = driver.save_screenshot('bin/0.png')
|
||||
# print('截图')
|
||||
# print(upload.get_attribute('value')) # check value
|
||||
|
||||
time.sleep(1)
|
||||
if is_element_exist(driver, r'//*[@id="app"]/div[3]/div/div/div/div/div'):
|
||||
# # sb = driver.find_element_by_xpath(r'//*[@id="app"]/div[3]/div/div/div/div/div')
|
||||
js = "var q=document.getElementsByClassName('new-feature-guide-container')[0].style.display='none';"
|
||||
driver.execute_script(js)
|
||||
# sb.click()
|
||||
|
||||
while True:
|
||||
info = driver.find_elements_by_xpath('//*[@id="item"]/div/div[2]/div[3]/div[1]/div[1]/div/div/div[2]/div[1]/div[3]')
|
||||
# print(info)
|
||||
for t in info:
|
||||
# print(t)
|
||||
if t.text != '':
|
||||
print(t.text)
|
||||
# else:
|
||||
# print('出问题啦')
|
||||
time.sleep(10)
|
||||
text = driver.find_elements_by_xpath('//*[@id="item"]/div/div[2]/div[3]/div[1]/div[1]/div/div/div[2]/div[1]/div[2]')
|
||||
aggregate = set()
|
||||
for s in text:
|
||||
print(s.text)
|
||||
aggregate.add(s.text)
|
||||
# if text == 'Upload complete' or text == '上传完成':
|
||||
# break
|
||||
|
||||
if len(aggregate) == 1 and ('Upload complete' in aggregate or '上传完成' in aggregate):
|
||||
break
|
||||
logger.info('上传%s\n个数%s' % (title_, len(info)))
|
||||
|
||||
|
||||
# print(text)
|
||||
# pageSource = driver.page_source
|
||||
# print(pageSource)
|
||||
# hid = driver.find_element_by_xpath('//*[@id="app"]/div[2]/div[2]/div/div[2]/div[2]/div[2]/div[1]/div[1]/div/div[1]/label[1]/div')
|
||||
# driver.execute_script('arguments[0].style.display="none";',hid)
|
||||
# hid_1 = driver.find_element_by_xpath('//*[@id="app"]/div[2]/div[2]/div/div[2]/div[2]/div[2]/div[1]/div[1]/div/div[1]/label[1]')
|
||||
# driver.execute_script('arguments[0].style.display="none";',hid_1)
|
||||
|
||||
js = "var q=document.getElementsByClassName('content-header-right')[0].scrollIntoView();"
|
||||
driver.execute_script(js)
|
||||
|
||||
# screen_shot = driver.save_screenshot('bin/0.png')
|
||||
# print('截图')
|
||||
# 点击模板
|
||||
driver.find_element_by_xpath(r'//*[@id="item"]/div/div[2]/div[3]/div[2]/div[1]/div[2]/div[1]').click()
|
||||
driver.find_element_by_xpath(r'//*[@id="item"]/div/div[2]/div[3]/div[2]/div[1]/div[3]/div[1]').click()
|
||||
# 点击转载
|
||||
# click = driver.find_element_by_xpath(
|
||||
# '//*[@id="item"]/div/div[2]/div[3]/div[2]/div[2]/div[1]/div[1]/div[2]/div[2]/div')
|
||||
#
|
||||
# click.click()
|
||||
|
||||
# 输入转载来源
|
||||
Input = driver.find_element_by_xpath(
|
||||
'//*[@id="item"]/div/div[2]/div[3]/div[2]/div[2]/div[1]/div[1]/div[3]/div/div[1]/div/input')
|
||||
Input.send_keys(link)
|
||||
# 点击游戏
|
||||
# driver.find_element_by_xpath(
|
||||
# '//*[@id="item"]/div/div[2]/div[3]/div[2]/div[2]/div[1]/div[2]/div[2]/div[1]/div[3]/div').click()
|
||||
# 点击电子竞技
|
||||
# print('第1步')
|
||||
# driver.find_element_by_xpath(
|
||||
# '//*[@id="item"]/div/div[2]/div[3]/div[2]/div[2]/div[1]/div[2]/div[2]/div[1]/div[3]/div[2]/div[6]/span[1]').click()
|
||||
# print('第2步')
|
||||
# 稿件标题
|
||||
title = driver.find_element_by_xpath(
|
||||
'//*[@id="item"]/div/div[2]/div[3]/div[2]/div[2]/div[1]/div[3]/div[2]/div[1]/div/input')
|
||||
title.send_keys(Keys.CONTROL + 'a')
|
||||
title.send_keys(Keys.BACKSPACE)
|
||||
title.send_keys(title_)
|
||||
# WebDriverWait(driver, 10).until(
|
||||
# EC.presence_of_element_located((By.XPATH, '//*[@id="app"]/div[2]/div[2]/div/div[2]/div[2]/div[2]/div[1]/div[4]/div[2]/div[2]/div[2]/div[last()]/div/input')))
|
||||
# //*[@id="app"]/div[2]/div[2]/div/div[2]/div[2]/div[2]/div[1]/div[4]/div[2]/div[2]/div[2]/div[last()]/div/input
|
||||
# //*[@id="item"]/div/div[2]/div[3]/div[2]/div[2]/div[1]/div[4]/div[2]/div/div[2]/div[2]/div[1]/input
|
||||
# //*[@id="item"]/div/div[2]/div[3]/div[2]/div[2]/div[1]/div[4]/div[2]/div/div[2]/div[2]/div[last()]/input
|
||||
# //*[@id="item"]/div/div[2]/div[3]/div[2]/div[2]/div[1]/div[4]/div[2]/div/div[2]/div[2]/div[1]/input
|
||||
|
||||
# text = driver.find_element_by_xpath(
|
||||
# '//*[@id="item"]/div/div[2]/div[3]/div[2]/div[2]/div[1]/div[4]/div[2]/div/div[2]/div[2]/div[1]/input')
|
||||
# text.send_keys('星际争霸2')
|
||||
# text.send_keys(Keys.ENTER)
|
||||
# time.sleep(0.5)
|
||||
# text.send_keys('第一视角')
|
||||
# text.send_keys(Keys.ENTER)
|
||||
# time.sleep(0.5)
|
||||
# text.send_keys('职业选手')
|
||||
# text.send_keys(Keys.ENTER)
|
||||
# time.sleep(0.5)
|
||||
#
|
||||
# text.send_keys(Keys.CONTROL + 'a')
|
||||
#
|
||||
# text.send_keys('虚空之遗')
|
||||
# text.send_keys(Keys.ENTER)
|
||||
# time.sleep(0.5)
|
||||
|
||||
# 输入相关游戏
|
||||
text_1 = driver.find_element_by_xpath(
|
||||
'//*[@id="item"]/div/div[2]/div[3]/div[2]/div[2]/div[1]/div[5]/div/div/div[1]/div[2]/div/div/input')
|
||||
text_1.send_keys('星际争霸2')
|
||||
# 简介
|
||||
text_2 = driver.find_element_by_xpath(
|
||||
'//*[@id="item"]/div/div[2]/div[3]/div[2]/div[2]/div[1]/div[5]/div/div/div[2]/div[2]/div[1]/textarea')
|
||||
text_2.send_keys('职业选手直播第一视角录像。\n欢迎加入星际交流群一起玩耍,群号:178459358')
|
||||
|
||||
driver.find_element_by_xpath('//*[@id="item"]/div/div[2]/div[3]/div[2]/div[3]/div[1]').click()
|
||||
# screen_shot = driver.save_screenshot('bin/1.png')
|
||||
# print('截图')
|
||||
time.sleep(1)
|
||||
upload_success = driver.find_element_by_xpath(r'//*[@id="item"]/div/div[3]/p[1]').text
|
||||
logger.info(upload_success)
|
||||
# print('稿件提交完成!')
|
||||
logger.info('%s提交完成!' % title_)
|
||||
remove_filelist(video_list)
|
||||
except selenium.common.exceptions.NoSuchElementException:
|
||||
logger.exception('发生错误')
|
||||
# except selenium.common.exceptions.TimeoutException:
|
||||
# logger.exception('超时')
|
||||
except selenium.common.exceptions.TimeoutException:
|
||||
logger.info('准备更新cookie')
|
||||
# screen_shot = driver.save_screenshot('bin/1.png')
|
||||
WebDriverWait(driver, 10).until(
|
||||
EC.presence_of_element_located((By.XPATH, r'//*[@id="login-username"]')))
|
||||
|
||||
username = driver.find_element_by_xpath(r'//*[@id="login-username"]')
|
||||
username.send_keys(user_name)
|
||||
|
||||
password = driver.find_element_by_xpath('//*[@id="login-passwd"]')
|
||||
password.send_keys(pass_word)
|
||||
# logger.info('第四步')
|
||||
cracker = slider_cracker(driver)
|
||||
|
||||
cracker.crack()
|
||||
|
||||
time.sleep(5)
|
||||
if driver.title == '投稿 - 哔哩哔哩弹幕视频网 - ( ゜- ゜)つロ 乾杯~ - bilibili':
|
||||
cookie = driver.get_cookies()
|
||||
print(cookie)
|
||||
with open(filename, "w") as f:
|
||||
json.dump(cookie, f)
|
||||
logger.info('更新cookie成功')
|
||||
else:
|
||||
logger.info('更新cookie失败')
|
||||
except:
|
||||
logger.exception('未知错误')
|
||||
finally:
|
||||
driver.quit()
|
||||
logger.info('浏览器驱动退出')
|
||||
|
||||
|
||||
def assemble_videopath(file_list):
|
||||
videopath = ''
|
||||
root = os.getcwd()
|
||||
for i in range(len(file_list)):
|
||||
file = file_list[i]
|
||||
videopath += root + '/' + file + '\n'
|
||||
videopath = videopath.rstrip()
|
||||
return videopath
|
||||
|
||||
def uploads(file_name_, url_):
|
||||
|
||||
logger.info('准备上传' + file_name_[:-4])
|
||||
if os.path.isfile(file_name_):
|
||||
os.rename(file_name_, file_name_[:-4] + str(time.time())[:10] + file_name_[-4:])
|
||||
file_list = get_file(file_name_)
|
||||
filter_file(file_list)
|
||||
file_list = get_file(file_name_)
|
||||
logger.debug('获取%s文件列表' % file_name_[:-4])
|
||||
# videopath = ''
|
||||
# root = os.getcwd()
|
||||
# for i in range(len(file_list)):
|
||||
# file = file_list[i]
|
||||
# videopath += root + '/' + file + '\n'
|
||||
# videopath = videopath.rstrip()
|
||||
upload(video_list=file_list, link=url_, title_=file_name_[:-4])
|
||||
|
||||
# for r in file_list:
|
||||
# os.remove(r)
|
||||
# logger.info('删除-' + r)
|
||||
|
||||
|
||||
def supplemental_upload(dict, file_name_, key_, url_, value_):
|
||||
try:
|
||||
for f in os.listdir():
|
||||
if file_name_[:-15] in f:
|
||||
try:
|
||||
# os.rename(file_name_ + '.part', file_name_[:-4] + str(time.time())[:10] + file_name_[-4:])
|
||||
os.rename(file_name_[:-4] + '.mp4' + '.part',
|
||||
file_name_[:-4] + str(time.time())[:10] + '.mp4')
|
||||
logger.info('%s存在已更名' % (file_name_[:-4] + '.mp4' + '.part'))
|
||||
except FileNotFoundError:
|
||||
# logger.info('%s不存在' % (file_name_ + '.part'))
|
||||
# logger.info('%s不存在' % (file_name_[:-4] + '.mp4' + '.part'))
|
||||
pass
|
||||
try:
|
||||
os.rename(file_name_[:-4] + '.flv' + '.part',
|
||||
file_name_[:-4] + str(time.time())[:10] + '.flv')
|
||||
logger.info('%s存在已更名' % (file_name_[:-4] + '.flv' + '.part'))
|
||||
except FileNotFoundError:
|
||||
# logger.info('%s不存在' % (file_name_[:-4] + '.flv' + '.part'))
|
||||
pass
|
||||
logger.info('补充上传' + key_)
|
||||
uploads(file_name_, url_)
|
||||
break
|
||||
finally:
|
||||
dict[key_] = value_
|
||||
# os._exit(0)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
# upload('D:\\p2.flv','5','k')
|
||||
# file_list = get_file('星际2soo输本虫族天梯第一视角.mp4')
|
||||
# videopath = ''
|
||||
# root = os.getcwd()
|
||||
# for i in range(len(file_list)):
|
||||
# file = file_list[i]
|
||||
# videopath += root + '/' + file + '\n'
|
||||
# # videopath += 'test2018年01月22日.mp4'
|
||||
# print(file_list)
|
||||
# print(videopath)
|
||||
# upload(videopath.rstrip(), '5', 'k')
|
||||
# for i in range(1):
|
||||
# print(i)
|
||||
pass
|
||||
|
||||
|
||||
@@ -1,177 +0,0 @@
|
||||
import logging
|
||||
import signal
|
||||
from logging.handlers import TimedRotatingFileHandler
|
||||
from multiprocessing import Process
|
||||
import time
|
||||
import os
|
||||
import errno
|
||||
import psutil
|
||||
|
||||
# log_fmt = '%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s'
|
||||
# formatter = logging.Formatter(log_fmt)
|
||||
# log_file_handler = TimedRotatingFileHandler(filename="ds_update.log", when="D", interval=1, backupCount=2)
|
||||
# # log_file_handler.suffix = "%Y-%m-%d.log"
|
||||
# # log_file_handler.extMatch = re.compile(r"^\d{4}-\d{2}-\d{2}.log$")
|
||||
# log_file_handler.setFormatter(formatter)
|
||||
# logging.basicConfig(level=logging.INFO)
|
||||
# logger = logging.getLogger(__name__)
|
||||
# logger.addHandler(log_file_handler)
|
||||
logger = logging.getLogger('log01')
|
||||
|
||||
|
||||
def wait_child(signum, frame):
|
||||
logger.debug('receive SIGCHLD')
|
||||
try:
|
||||
while True:
|
||||
# -1 表示任意子进程
|
||||
# os.WNOHANG 表示如果没有可用的需要 wait 退出状态的子进程,立即返回不阻塞
|
||||
cpid, status = os.waitpid(-1, os.WNOHANG)
|
||||
if cpid == 0:
|
||||
logger.debug('no child process was immediately available')
|
||||
break
|
||||
exitcode = status >> 8
|
||||
logger.debug('child process %s exit with exitcode %s', cpid, exitcode)
|
||||
except OSError as e:
|
||||
if e.errno == errno.ECHILD:
|
||||
logger.error('current process has no existing unwaited-for child processes.')
|
||||
else:
|
||||
raise
|
||||
logger.debug('handle SIGCHLD end')
|
||||
|
||||
|
||||
def kill_child_processes(parent_pid, file_name_, sig=signal.SIGINT):
|
||||
file_name_ = file_name_ + '.part'
|
||||
last_file_size = 0.0
|
||||
while True:
|
||||
time.sleep(15)
|
||||
if os.path.isfile(file_name_):
|
||||
file_size = os.path.getsize(file_name_) / 1024 / 1024 / 1024
|
||||
file_sizes = os.path.getsize(file_name_)
|
||||
if float(file_sizes) == last_file_size:
|
||||
try:
|
||||
parent = psutil.Process(parent_pid)
|
||||
except psutil.NoSuchProcess:
|
||||
return
|
||||
children = parent.children(recursive=True)
|
||||
if len(children) == 0:
|
||||
parent.send_signal(sig)
|
||||
logger.info('下载卡死pandaTV' + file_name_)
|
||||
else:
|
||||
for process in children:
|
||||
# print(process)
|
||||
process.send_signal(sig)
|
||||
logger.info('下载卡死' + file_name_)
|
||||
# time.sleep(1)
|
||||
if os.path.isfile(file_name_):
|
||||
logger.info('卡死下载进程可能未成功退出')
|
||||
continue
|
||||
else:
|
||||
logger.info('卡死下载进程成功退出')
|
||||
break
|
||||
|
||||
last_file_size = file_sizes
|
||||
|
||||
if float(file_size) >= 3.5:
|
||||
try:
|
||||
parent = psutil.Process(parent_pid)
|
||||
except psutil.NoSuchProcess:
|
||||
return
|
||||
children = parent.children(recursive=True)
|
||||
if len(children) == 0:
|
||||
parent.send_signal(sig)
|
||||
logger.info('分段下载pandatv' + file_name_)
|
||||
else:
|
||||
for process in children:
|
||||
# print(process)
|
||||
process.send_signal(sig)
|
||||
print('分段下载twitch')
|
||||
logger.info('分段下载twitch' + file_name_)
|
||||
break
|
||||
else:
|
||||
logger.info('退出监控进程')
|
||||
return
|
||||
# os._exit(0)
|
||||
logger.info('退出监控进程')
|
||||
|
||||
|
||||
def monitoring(q):
|
||||
signal.signal(signal.SIGCHLD, wait_child)
|
||||
while True:
|
||||
# print('开始监测')
|
||||
pid, file_name = q.get()
|
||||
time.sleep(5)
|
||||
logger.info('获取到{0},{1}'.format(pid,file_name))
|
||||
p = Process(target=kill_child_processes, args=(pid, file_name))
|
||||
p.start()
|
||||
|
||||
|
||||
def new_hook(t, v, tb):
|
||||
logger.error("Uncaught exception:", exc_info=(t, v, tb))
|
||||
|
||||
|
||||
class SafeRotatingFileHandler(TimedRotatingFileHandler):
|
||||
def __init__(self, filename, when='h', interval=1, backupCount=0, encoding=None, delay=False, utc=False):
|
||||
TimedRotatingFileHandler.__init__(self, filename, when, interval, backupCount, encoding, delay, utc)
|
||||
|
||||
"""
|
||||
Override doRollover
|
||||
lines commanded by "##" is changed by cc
|
||||
"""
|
||||
|
||||
def doRollover(self):
|
||||
"""
|
||||
do a rollover; in this case, a date/time stamp is appended to the filename
|
||||
when the rollover happens. However, you want the file to be named for the
|
||||
start of the interval, not the current time. If there is a backup count,
|
||||
then we have to get a list of matching filenames, sort them and remove
|
||||
the one with the oldest suffix.
|
||||
|
||||
Override, 1. if dfn not exist then do rename
|
||||
2. _open with "a" model
|
||||
"""
|
||||
if self.stream:
|
||||
self.stream.close()
|
||||
self.stream = None
|
||||
# get the time that this sequence started at and make it a TimeTuple
|
||||
currentTime = int(time.time())
|
||||
dstNow = time.localtime(currentTime)[-1]
|
||||
t = self.rolloverAt - self.interval
|
||||
if self.utc:
|
||||
timeTuple = time.gmtime(t)
|
||||
else:
|
||||
timeTuple = time.localtime(t)
|
||||
dstThen = timeTuple[-1]
|
||||
if dstNow != dstThen:
|
||||
if dstNow:
|
||||
addend = 3600
|
||||
else:
|
||||
addend = -3600
|
||||
timeTuple = time.localtime(t + addend)
|
||||
dfn = self.baseFilename + "." + time.strftime(self.suffix, timeTuple)
|
||||
## if os.path.exists(dfn):
|
||||
## os.remove(dfn)
|
||||
|
||||
# Issue 18940: A file may not have been created if delay is True.
|
||||
## if os.path.exists(self.baseFilename):
|
||||
if not os.path.exists(dfn) and os.path.exists(self.baseFilename):
|
||||
os.rename(self.baseFilename, dfn)
|
||||
if self.backupCount > 0:
|
||||
for s in self.getFilesToDelete():
|
||||
os.remove(s)
|
||||
if not self.delay:
|
||||
self.mode = "a"
|
||||
self.stream = self._open()
|
||||
newRolloverAt = self.computeRollover(currentTime)
|
||||
while newRolloverAt <= currentTime:
|
||||
newRolloverAt = newRolloverAt + self.interval
|
||||
# If DST changes and midnight or weekly rollover, adjust for this.
|
||||
if (self.when == 'MIDNIGHT' or self.when.startswith('W')) and not self.utc:
|
||||
dstAtRollover = time.localtime(newRolloverAt)[-1]
|
||||
if dstNow != dstAtRollover:
|
||||
if not dstNow: # DST kicks in before next rollover, so we need to deduct an hour
|
||||
addend = -3600
|
||||
else: # DST bows out before next rollover, so we need to add an hour
|
||||
addend = 3600
|
||||
newRolloverAt += addend
|
||||
self.rolloverAt = newRolloverAt
|
||||
|
||||
Reference in new issue
Block a user