def upload_video(self): try: # 视频上传开始 WebDriverWait(self.browser, 10).until( EC.presence_of_element_located(( By.XPATH, "//div[@class='article-write_video-container-upload-local']" ))).click() time.sleep(1) Utils.upload(self.video_path) time.sleep(2) # try: # Utils.upload(self.video_path) # except Exception as e: # print(e) # print("第二次打视频地址") # ---- end ----- WebDriverWait(self.browser, 180).until( EC.presence_of_element_located( (By.XPATH, "//p[contains(string(), '视频上传成功,处理中')]"))) time.sleep(2) up_number = int( self.browser.find_element_by_xpath( '/html/body/div[1]/div[4]/div/div[2]/div/div/div[2]/div/div[2]/span' ).text()) if up_number == 0: self.msg = "上传数量不足" return True # self.up_num = up_number except Exception as e: self.msg = str(e) + "视频打开上传失败,请通知技术人员,并重新上传" self.returned_status() return True
def upload_img(self): try: WebDriverWait(self.browser, 10).until( EC.presence_of_element_located(( By.XPATH, "//div[@class='widgets-selects_select_container']/a[contains(string(), '{}')]" .format(self.video_type)))).click() image_div = self.browser.find_element_by_xpath( "//div[@class='article-write_box-form-coverImg']") self.browser.execute_script( "window.scrollTo(0, document.body.scrollHeight)") ActionChains(self.browser).move_to_element(image_div).perform() ActionChains(self.browser).move_to_element(image_div).perform() ActionChains(self.browser).move_to_element(image_div).perform() ActionChains(self.browser).move_to_element(image_div).perform() time.sleep(0.1) image_div.find_element_by_xpath( "//button[contains(string(), '从本地选择')]").click() time.sleep(0.5) print(self.image_path) Utils.upload(self.image_path) print("打图片地址上去") # Utils.upload(self.image_path) # print("丢图片地址异常") # time.sleep(2) WebDriverWait(self.browser, 10).until( EC.presence_of_element_located(( By.XPATH, "//div[@class='article-material-image-dialog_btn']//button[contains(string(), '保存') and not(@disabled)]" ))).click() time.sleep(2) except Exception as e: logger.error("上传封面失败,失败信息{}".format(e)) self.msg = "上传失败,重新提交" return True
def go(self): user_type = self.account.split('@') self.browser.maximize_window() if len(user_type) > 1: self.browser.get("https://mp.dayu.com/") time.sleep(3) iframe = self.browser.find_element_by_tag_name("iframe") self.browser.switch_to.frame(iframe) self.browser.find_element_by_xpath("//input[@id='login_name']").send_keys(self.account) self.browser.find_element_by_xpath("//input[@id='password']").send_keys(self.password) slide = self.browser.find_element_by_xpath("//span[@id='nc_1_n1z']") action_chain = self.action_list(300) ActionChains(self.browser).click_and_hold(slide).perform() for action in action_chain: time.sleep(0.1) ActionChains(self.browser).move_by_offset(xoffset=action, yoffset=0).perform() ActionChains(self.browser).release().perform() WebDriverWait(self.browser, 10).until( EC.presence_of_element_located((By.XPATH, "//b[contains(string(), '验证通过')]"))) self.browser.find_element_by_xpath("//input[@id='submit_btn']").click() else: self.browser.get('https://account.youku.com/partnerLogin.htm?pid=20170512PLF000867&callback=https%3A%2F%2Fmp.dayu.com%2Fyt-login-callback%3Fredirect_url%3D') time.sleep(3) self.browser.find_element_by_xpath('//*[@id="YT-ytaccount"]').send_keys(self.account) self.browser.find_element_by_xpath('//*[@id="YT-ytpassword"]').send_keys(self.password) self.browser.find_element_by_xpath('//*[@id="YT-nloginSubmit"]').click() time.sleep(3) try: self.browser.find_element_by_xpath('/html/body/div[2]/div/div[2]/div/div/button[1]').click() time.sleep(2) except Exception: pass self.browser.maximize_window() self.cookies = self.get_cookies() # 切换视频上传页面 time.sleep(1) self.browser.implicitly_wait(30) WebDriverWait(self.browser, 10).until( EC.presence_of_element_located((By.XPATH, "//a[@id='w-menu-']"))).click() time.sleep(2) WebDriverWait(self.browser, 10).until( EC.presence_of_element_located((By.XPATH, "//a[@data-path='/dashboard/video/write']"))).click() time.sleep(1) # ----- end ----- try: # 切换视频上传页面 time.sleep(1) self.browser.implicitly_wait(30) WebDriverWait(self.browser, 10).until( EC.presence_of_element_located((By.XPATH, "//a[@id='w-menu-']"))).click() time.sleep(2) WebDriverWait(self.browser, 10).until( EC.presence_of_element_located((By.XPATH, "//a[@data-path='/dashboard/video/write']"))).click() time.sleep(1) # ----- end ----- except Exception as e: pass # 视频上传开始 WebDriverWait(self.browser, 10).until( EC.presence_of_element_located((By.XPATH, "//div[@class='article-write_video-container-upload-local']"))).click() time.sleep(1) Utils.upload(self.video_path) time.sleep(2) try: Utils.upload(self.video_path) except Exception as e: print(e) print("第二次打视频地址") if int(self.browser.find_element_by_xpath( '/html/body/div[1]/div[4]/div/div[2]/div/div/div[2]/div/div[2]/span').text) == 0: self.msg = "次数不足" return # ---- end ----- WebDriverWait(self.browser, 180).until( EC.presence_of_element_located((By.XPATH, "//p[contains(string(), '视频上传成功,处理中')]"))) time.sleep(2) WebDriverWait(self.browser, 10).until( EC.presence_of_element_located((By.XPATH, "//div[@class='w-form-field-content']/input"))).clear() self.browser.find_element_by_xpath("//div[@class='w-form-field-content']/input").clear() time.sleep(0.1) self.browser.find_element_by_xpath("//div[@class='w-form-field-content']/input").send_keys([Keys.BACKSPACE for i in range(1, 100)] + [i for i in self.title]) time.sleep(0.1) try: js = "var q=document.documentElement.scrollTop=100000" self.browser.execute_script(js) except Exception as e: print(e) print("滑动至底部失败") self.browser.find_element_by_xpath("//div[@class='w-form-field-content']/textarea").clear() time.sleep(0.1) self.browser.find_element_by_xpath("//div[@class='w-form-field-content']/textarea").send_keys([Keys.BACKSPACE for i in range(1, 100)] + [i for i in self.title]) time.sleep(0.1) self.build_tags(self.tags) try: js = "var q=document.documentElement.scrollTop=100000" self.browser.execute_script(js) except Exception as e: print(e) print("滑动至底部失败") #选择分类 try: self.browser.find_element_by_xpath("//div[@class='widgets-selects_container']").click() except Exception as e: print("选择分类失败") # try: # self.browser.find_element_by_xpath('/html/body/div[1]/div[4]/div/div[2]/div/div/div[1]/div[7]/div/div/div[1]/i').click() # except Exception as e: # print(e) # print("第二次选择分分类失败") # self.browser.find_element_by_xpath("//div[@class='widgets-selects_container']").click() WebDriverWait(self.browser, 10).until( EC.presence_of_element_located((By.XPATH, "//div[@class='widgets-selects_select_container']/a[contains(string(), '{}')]".format(self.video_type)))).click() image_div = self.browser.find_element_by_xpath("//div[@class='article-write_box-form-coverImg']") self.browser.execute_script("window.scrollTo(0, document.body.scrollHeight)") ActionChains(self.browser).move_to_element(image_div).perform() try: ActionChains(self.browser).move_to_element(image_div).perform() ActionChains(self.browser).move_to_element(image_div).perform() ActionChains(self.browser).move_to_element(image_div).perform() except Exception as e: print("这是去点击上传封面图片的框,") time.sleep(0.1) image_div.find_element_by_xpath("//button[contains(string(), '从本地选择')]").click() time.sleep(0.5) print(self.image_path) Utils.upload(self.image_path) print("打图片地址上去") try: Utils.upload(self.image_path) except Exception as e: print("丢图片地址异常") time.sleep(2) WebDriverWait(self.browser, 30).until( EC.presence_of_element_located((By.XPATH, "//div[@class='article-material-image-dialog_btn']//button[contains(string(), '保存') and not(@disabled)]"))).click() time.sleep(2) # try: # WebDriverWait(self.browser, 2).until( # EC.presence_of_element_located((By.XPATH, "//div[@class='w-radio w-radio_checked iconfont wm-icon-yes']"))).click() # except TimeoutException: # pass time.sleep(5) WebDriverWait(self.browser, 30).until( EC.presence_of_element_located((By.XPATH, "//button[contains(string(), '发表')]"))).click() time.sleep(1) #判断是否标题党 try: WebDriverWait(self.browser, 3).until( EC.text_to_be_present_in_element((By.XPATH, "/html/body/div[4]/div/div[2]/div/div[1]"), '平台') ) self.msg = "标题党嫌疑,请再改改" return except Exception as e: print("暂无标题党嫌疑") try: WebDriverWait(self.browser, 4).until( EC.element_to_be_clickable((By.XPATH, '/html/body/div[4]/div/div[2]/div/div[2]/div/button[1]')) ) self.msg = "标题党嫌疑,请你改下,并重新提交" return except Exception as e: logger.info("无标题党嫌疑") # ---- end ---- # 确认发布 time.sleep(2) WebDriverWait(self.browser, 10).until( EC.presence_of_element_located((By.XPATH, "//button[contains(string(), '确认发表')]"))).click() # ---- end ---- # 获取视频信息 time.sleep(2) WebDriverWait(self.browser, 10).until( EC.presence_of_element_located((By.XPATH, "//ul[@class='w-list']/li[1]//div[@class='w-list-item-content-detail']/h3/a"))).click() self.status = True time.sleep(2) ahref = self.browser.find_element_by_xpath("//div[@class='contents-publish-article-preview']/iframe").get_attribute("src") info_frame = self.browser.find_element_by_xpath("//div[@class='contents-publish-article-preview']/iframe") self.browser.switch_to.frame(info_frame) vhref = self.browser.find_element_by_xpath("//div[@class='article-content simple-ui']//iframe").get_attribute("src") self.aid = self.get_aid(ahref) self.vid = self.get_vid(vhref)
def go(self): self.browser.get("https://mp.qutoutiao.net/login") # 登录开始 WebDriverWait(self.browser, 10).until( EC.presence_of_element_located( (By.XPATH, "//i[@class='login-icon']/following-sibling::input[1]"))).send_keys(self.account) WebDriverWait(self.browser, 10).until( EC.presence_of_element_located((By.XPATH, "//i[@class='pwd-icon']/following-sibling::input[1]"))).send_keys( self.password) WebDriverWait(self.browser, 10).until( EC.presence_of_element_located((By.XPATH, "//button[@id='submit-login']"))).click() # 登录结束 time.sleep(2) self.browser.maximize_window() # 跳转发布开始 WebDriverWait(self.browser, 10).until( EC.presence_of_element_located((By.XPATH, "//span[contains(string(), '发布内容')]"))).click() WebDriverWait(self.browser, 10).until( EC.presence_of_element_located((By.XPATH, "//p[contains(string(), '发布视频')]"))).click() #手机验证码 try: WebDriverWait(self.browser, 10).until( EC.element_to_be_clickable((By.XPATH, '//*[@id="app"]/div[2]/div[2]/div/div[2]/div/div[2]/div/div[3]/div/div[3]/span/button[1]/span')) ) self.msg = '需要手机验证码,请延时提交' return except Exception: pass # *** 处理发文规范弹窗 *** WebDriverWait(self.browser, 10).until( EC.presence_of_element_located((By.XPATH, "//i[@class='el-message-box__close el-icon-close']"))).click() time.sleep(1) # 跳转发布结束 # 开始发视频 WebDriverWait(self.browser, 10).until( EC.presence_of_element_located((By.XPATH, "//input[@id='inp-video-file']"))).click() time.sleep(1) # 等待上传框体加载 Utils.upload(self.video_path) WebDriverWait(self.browser, 100).until( EC.presence_of_element_located((By.XPATH, "//span[contains(string(), '上传成功')]"))) WebDriverWait(self.browser, 10).until( EC.presence_of_element_located( (By.XPATH, "//form[@class='el-form el-form--label-left']/div[1]//input"))).send_keys( [Keys.BACKSPACE for i in range(1, 100)] + [i for i in self.title]) # 发送标题 WebDriverWait(self.browser, 10).until( EC.presence_of_element_located((By.XPATH, "//textarea[@class='el-textarea__inner']"))).send_keys( self.content) # 发送描述 WebDriverWait(self.browser, 10).until( EC.presence_of_element_located((By.XPATH, "//input[@placeholder='请选择分类']"))).click() time.sleep(1) # 等待分类加载 WebDriverWait(self.browser, 10).until( EC.presence_of_element_located((By.XPATH, "//dd[contains(string(), '{}')]".format(self.video_type)))).click() time.sleep(1) self.build_tag(self.tags) time.sleep(0.5) # -- 选择封面开始 WebDriverWait(self.browser, 10).until( EC.presence_of_element_located((By.XPATH, "//div[@class='el-upload']"))).click() time.sleep(1) # 等待封面框体加载 WebDriverWait(self.browser, 10).until( EC.presence_of_element_located((By.XPATH, "//p[contains(string(), '自定义封面')]"))).click() WebDriverWait(self.browser, 10).until( EC.presence_of_element_located((By.XPATH, "//span[contains(string(), '选择图片')]"))).click() time.sleep(1) # 等待上传框体加载 Utils.upload(self.image_path) time.sleep(3) # 等待图片上传完成 # TODO 待处理 WebDriverWait(self.browser, 10).until( EC.presence_of_element_located((By.XPATH, "//div[@class='el-dialog__wrapper dialog-img-cropper']//span[contains(string(), '确 定')]"))) time.sleep(1) self.browser.find_element_by_xpath("//div[@class='el-dialog__wrapper dialog-img-cropper']//span[contains(string(), '确 定')]").click() # 封面选择结束 # 视频信息构造结束 time.sleep(3) WebDriverWait(self.browser, 10).until( EC.presence_of_element_located( (By.XPATH, "//button[@class='el-button el-button--primary']//span[contains(string(), '发布')]"))).click() try: WebDriverWait(self.browser, 3).until( EC.presence_of_element_located((By.XPATH, "//div[@class='el-message-box__message']"))) time.sleep(2) self.msg = self.browser.find_element_by_xpath("//div[@class='el-message-box__message']").text if self.msg: return except TimeoutException: pass WebDriverWait(self.browser, 10).until(EC.presence_of_element_located((By.XPATH, "//button[@class='el-button el-button--primary el-button--medium']//span[contains(string(), '确认发布')]"))) # TODO time.sleep(1) self.browser.find_element_by_xpath("//button[@class='el-button el-button--primary el-button--medium']//span[contains(string(), '确认发布')]").click() time.sleep(2) self.status = True
def go(self): # 登录 self.browser.get("https://sso.toutiao.com/login/?service=https://mp.toutiao.com/sso_confirm/?redirect_url=JTJG") self.browser.implicitly_wait(30) self.browser.find_element_by_xpath("//div[@id='login-type-account']").click() time.sleep(2) self.browser.find_element_by_xpath("//input[@id='user-name']").send_keys(self.account) self.browser.find_element_by_xpath("//input[@id='password']").send_keys(self.password) time.sleep(0.1) self.browser.find_element_by_xpath("//button[@id='bytedance-login-submit']").click() self.handler_slider_verify() # 处理滑块 time.sleep(2) self.browser.maximize_window() # --- 登录结束 ---- self.cookies = self.get_cookies() WebDriverWait(self.browser, 10).until( EC.presence_of_element_located((By.XPATH, "//span[contains(string(), '西瓜视频')]"))).click() self.browser.implicitly_wait(20) # 跳转视屏上传页面 self.browser.get("https://mp.toutiao.com/profile_v3/xigua/upload-video") # 视屏上传开始 WebDriverWait(self.browser, 10).until( EC.presence_of_element_located((By.XPATH, "//div[@class='undefined upload-handler ']"))).click() time.sleep(1) # 等待上传框体加载 Utils.upload(self.video_path) WebDriverWait(self.browser, 10).until( EC.presence_of_element_located((By.XPATH, "//span[contains(string(), '上传成功')]"))) # 等待视频上传完成 WebDriverWait(self.browser, 10).until( EC.presence_of_element_located((By.XPATH, "//div[@class='article-title-wrap-new']/input"))).clear() self.browser.find_element_by_xpath("//div[@class='article-title-wrap-new']/input").send_keys([Keys.BACKSPACE for i in range(1, 100)] + [i for i in self.title]) WebDriverWait(self.browser, 10).until( EC.presence_of_element_located((By.XPATH, "//span[@class='tui-input-wrapper']/textarea"))).clear() self.browser.find_element_by_xpath("//span[@class='tui-input-wrapper']/textarea").send_keys([Keys.BACKSPACE for i in range(1, 100)] + [i for i in self.content]) if self.is_origin: # 是否原创 # WebDriverWait(Browser, 10).until( # EC.presence_of_element_located((By.XPATH, "//div[@class='edit-cell-new add-origin']//div[@class='tui2-radio']/input"))).click() WebDriverWait(self.browser, 10).until( EC.presence_of_element_located( (By.XPATH, "//span[@class='tui2-radio-text' and contains(string(), '声明原创')]/..//input"))).click() WebDriverWait(self.browser, 10).until( EC.presence_of_element_located((By.XPATH, "//button[contains(string(.), '确 定')]"))).click() WebDriverWait(self.browser, 10).until( EC.presence_of_element_located( (By.XPATH, "//span[@class='tui2-radio-text' and contains(string(), '非独家')]/..//input"))).click() if self.is_first: # 是否首发 WebDriverWait(self.browser, 10).until( EC.presence_of_element_located( (By.XPATH, "//span[@class='tui2-radio-text' and contains(string(), '非首发')]/..//input"))).click() WebDriverWait(self.browser, 10).until( EC.presence_of_element_located( (By.XPATH, "//div[@class='m-video-first']/div[@class='edit-cell-new'][1]//input"))).send_keys(self.first_url) WebDriverWait(self.browser, 10).until( EC.presence_of_element_located( (By.XPATH, "//div[@class='m-video-first']/div[@class='edit-cell-new'][2]//input"))).send_keys(self.first_platform) WebDriverWait(self.browser, 10).until( EC.presence_of_element_located( (By.XPATH, "//div[@class='m-video-first']/div[@class='edit-cell-new'][3]//input"))).send_keys(self.first_uname) else: WebDriverWait(self.browser, 10).until( EC.presence_of_element_located( (By.XPATH, "//span[@class='tui2-radio-text' and contains(string(), '首发')]/..//input"))).click() else: WebDriverWait(self.browser, 10).until( EC.presence_of_element_located( (By.XPATH, "//span[@class='tui2-radio-text' and contains(string(), '非原创')]/..//input"))).click() # 原创结束 self.build_tags(self.tags) # self.browser.find_element_by_xpath("//div[@class='edit-cell-new video-tag show-short']//input").send_keys("gsdfg") # self.browser.find_element_by_xpath("//div[@class='edit-cell-new video-tag show-short']//input").send_keys(Keys.ENTER) WebDriverWait(self.browser, 10).until( EC.presence_of_element_located( (By.XPATH, "//div[@class='Select tui-select Select--single']/div[@class='Select-control']"))).click() time.sleep(0.1) WebDriverWait(self.browser, 10).until( EC.presence_of_element_located((By.XPATH, "//div[@aria-label='{}']".format(self.video_type)))).click() WebDriverWait(self.browser, 10).until( EC.presence_of_element_located((By.XPATH, "//div[@class='submit btn ']"))).click() WebDriverWait(self.browser, 10).until( EC.presence_of_element_located((By.XPATH, "//div[@class='m-pgc-video-manage']"))) self.status = True # self.browser.close() # 获取信息开始 WebDriverWait(self.browser, 10).until( EC.presence_of_element_located((By.XPATH, "//div[@class='m-articles no-count']"))) # 确认视频列表加载 href = WebDriverWait(self.browser, 10).until( EC.presence_of_element_located((By.XPATH, "//div[@class='m-articles no-count']/div[1]//a[@class='title-wrap']"))).get_attribute("href") self.aid = self.get_aid(href) self.vid = self.get_vid(href)