82 lines
3.3 KiB
Python
82 lines
3.3 KiB
Python
from DrissionPage import Chromium, ChromiumOptions
|
||
from DrissionPage.errors import ElementNotFoundError
|
||
|
||
from database.tcontentdispatch.model import TContentDispatch
|
||
from log.log_manager import log
|
||
|
||
|
||
class Toutiao:
|
||
def __init__(self, article: TContentDispatch):
|
||
self.article = article
|
||
co = ChromiumOptions().auto_port() # auto_port后需要重新登录账号
|
||
# co = ChromiumOptions()
|
||
self.browser = Chromium(addr_or_opts=co)
|
||
self.tab = self.browser.latest_tab
|
||
self.tab.get('https://mp.toutiao.com/')
|
||
|
||
def need_login(self):
|
||
self.tab.wait(5)
|
||
try:
|
||
login_dialog = self.tab.ele('.login-wrap')
|
||
log(login_dialog.html)
|
||
return True
|
||
except ElementNotFoundError:
|
||
return False
|
||
|
||
def login_with_password(self):
|
||
try:
|
||
# 1. 点击‘密码登录’按钮,切换到密码登录界面
|
||
password_login_btn = self.tab.ele('.web-login-other-login-method__list__item__icon web-login-other-login-method__list__item__icon__account_pwd')
|
||
password_login_btn.click()
|
||
# 2. 输入账号
|
||
username_input_box = self.tab.ele('.web-login-normal-input__input')
|
||
username_input_box.input('17704081680')
|
||
# 3. 输入密码
|
||
password_input_box = self.tab.ele('.web-login-button-input__input')
|
||
password_input_box.input('G*9dkvm834;.,[')
|
||
# 4. 勾选同意协议
|
||
agree_checkbox = self.tab.ele('.web-login-confirm-info__checkbox')
|
||
agree_checkbox.click()
|
||
# 5. 点击登录按钮
|
||
login_btn = self.tab.ele('.web-login-button')
|
||
login_btn.click()
|
||
except ElementNotFoundError:
|
||
log('尝试进行账号登录,但登录界面元素未找到')
|
||
|
||
|
||
def publish(self):
|
||
try:
|
||
# 1. 处理登录
|
||
if self.need_login():
|
||
self.login_with_password()
|
||
# 2. 新建文章
|
||
new_article_btn = self.tab.ele('.byte-menu-inline base_creation_tab').ele('.byte-menu-item')
|
||
new_article_btn.click()
|
||
# 3. 输入标题
|
||
title_input_box = self.tab.ele('.editor-title autofit-textarea-wrapper').ele('tag:textarea')
|
||
title_input_box.input(self.article.title)
|
||
# 4. 输入正文
|
||
content_input_area = self.tab.ele('.ProseMirror')
|
||
if self.article.ai_content:
|
||
content_input_area.input(self.article.ai_content)
|
||
else:
|
||
content_input_area.input(self.article.content)
|
||
# 5. 等待10秒,文章会自动保存到草稿箱
|
||
self.tab.wait(10)
|
||
except (ElementNotFoundError, AttributeError):
|
||
log('发布文章出现异常')
|
||
finally:
|
||
# 6. 结束
|
||
self.finish()
|
||
|
||
def finish(self):
|
||
# 关闭浏览器
|
||
self.browser.quit()
|
||
|
||
|
||
if __name__ == '__main__':
|
||
article = TContentDispatch()
|
||
article.title = '今日新鲜事'
|
||
article.content = '当地时间29日,阿塞拜疆总统阿利耶夫称,阿克套空难原因系飞机“遭受来自地面的攻击受损”,飞机在俄境内格罗兹尼附近尾部遭地面射击严重破坏且失去控制。'
|
||
toutiao = Toutiao(article)
|
||
toutiao.publish() |