def upload(self, file_list): filename = self.persistence_path videopath = self.assemble_videopath(file_list) # service_log_path = "{}/chromedriver.log".format('/home') options = webdriver.ChromeOptions() options.add_argument('headless') self.driver = webdriver.Chrome(executable_path=engine.config.get('chromedriver_path'), chrome_options=options) # service_log_path=service_log_path) try: self.driver.get("https://www.bilibili.com") # driver.delete_all_cookies() if os.path.isfile(filename): with open(filename) as f: new_cookie = json.load(f) for cookie in new_cookie: if isinstance(cookie.get("expiry"), float): cookie["expiry"] = int(cookie["expiry"]) self.driver.add_cookie(cookie) self.driver.get("https://member.bilibili.com/video/upload.html") # print(driver.title) self.add_videos(videopath) # js = "var q=document.getElementsByClassName('content-header-right')[0].scrollIntoView();" # driver.execute_script(js) cookie = self.driver.get_cookies() with open(filename, "w") as f: json.dump(cookie, f) self.add_information() self.driver.find_element_by_xpath('//*[@class="upload-v2-container"]/div[2]/div[3]/div[5]/span[1]').click() # screen_shot = driver.save_screenshot('bin/1.png') # print('截图') time.sleep(3) upload_success = self.driver.find_element_by_xpath(r'//*[@id="app"]/div/div[3]/h3').text if upload_success == '': self.driver.save_screenshot('err.png') logger.info('稿件提交失败,截图记录') return else: logger.info(upload_success) # logger.info('%s提交完成!' % title_) self.remove_filelist(file_list) except selenium.common.exceptions.NoSuchElementException: logger.exception('发生错误') # except selenium.common.exceptions.TimeoutException: # logger.exception('超时') except selenium.common.exceptions.TimeoutException: self.login(filename) finally: self.driver.quit() logger.info('浏览器驱动退出')
def load(self): try: with open(self.persistence_path) as f: self.cookies = json.load(f) self.access_token = self.cookies['access_token'] except (JSONDecodeError, KeyError): logger.exception('加载cookie出错')
def add_videos(self, videopath): formate_title = self.data["format_title"] WebDriverWait(self.driver, 20).until( ec.presence_of_element_located((By.NAME, 'buploader'))) upload = self.driver.find_element_by_name('buploader') # logger.info(driver.title) upload.send_keys(videopath) # send_keys logger.info('开始上传' + formate_title) time.sleep(2) button = r'//*[@class="new-feature-guide-v2-container"]/div/div/div/div/div[1]' if self.is_element_exist(self.driver, button): sb = self.driver.find_element_by_xpath(button) sb.click() sb.click() sb.click() logger.debug('点击') while True: try: info = self.driver.find_elements_by_class_name(r'item-upload-info') for t in info: if t.text != '': print(t.text) time.sleep(10) text = self.driver.find_elements_by_xpath(r'//*[@class="item-upload-info"]/span') aggregate = set() for s in text: if s.text != '': aggregate.add(s.text) print(s.text) if len(aggregate) == 1 and ('Upload complete' in aggregate or '上传完成' in aggregate): break except selenium.common.exceptions.StaleElementReferenceException: logger.exception("selenium.common.exceptions.StaleElementReferenceException") logger.info('上传%s个数%s' % (formate_title, len(info)))
def login(self, persistence_path, user): self.persistence_path = persistence_path if os.path.isfile(persistence_path): print('使用持久化内容上传') self.load() if not self.cookies and user.get('cookies'): self.cookies = user['cookies'] if self.cookies: try: self.login_by_cookies(self.cookies) except: logger.exception('login error') self.login_by_password(**user['account']) else: self.login_by_password(**user['account']) self.store()