两种思路,第一种是selenium模仿用户登录然后发布文章
先看第一种思路的代码,以下代码全是chatgpt3.5提供
直接上代码
代码语言:javascript复制pip install selenium
然后是脚本:
代码语言:javascript复制from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
import time
# 配置浏览器驱动路径
driver_path = 'your_driver_path'
# 打开浏览器
driver = webdriver.Chrome(driver_path)
# 打开微信公众号平台登录页面
driver.get('https://mp.weixin.qq.com/')
# 等待页面加载完成
time.sleep(5)
# 输入账号密码并登录
driver.find_element_by_name('account').send_keys('your_account')
driver.find_element_by_name('password').send_keys('your_password')
driver.find_element_by_class_name('btn_login').click()
# 等待登录成功后跳转
time.sleep(10)
# 进入发布文章页面
driver.get('https://mp.weixin.qq.com/cgi-bin/appmsg?t=media/appmsg_edit_v2&action=edit&isNew=1&type=10&token=your_token&lang=zh_CN')
time.sleep(5)
# 填写文章标题
title = 'Your Article Title'
driver.find_element_by_name('title').send_keys(title)
# 切换到正文编辑框
iframe = driver.find_element_by_xpath('//iframe[@class="ueditor_iframe"]')
driver.switch_to.frame(iframe)
# 填写文章正文
content = 'Your article content here'
body = driver.find_element_by_xpath('//body[@class="view"]')
ActionChains(driver).move_to_element(body).send_keys(content).perform()
# 切换回主页面
driver.switch_to.default_content()
# 点击发布按钮
driver.find_element_by_xpath('//div[contains(text(),"发布")]').click()
# 等待发布成功
time.sleep(10)
# 关闭浏览器
driver.quit()
可以看到这个代码里还是有很多的注释的,然后chatgpt也给了一部分的代码解释:
这个脚本首先打开Chrome浏览器,然后打开微信公众号平台登录页面。在登录后,它会跳转到发布文章页面,填写文章标题和正文,并点击发布按钮。最后,它会等待一段时间以确保文章发布成功,然后关闭浏览器。
需要注意的是,这个脚本中需要替换一些变量的值,包括驱动路径、账号密码、文章标题、文章正文和token等。其中,token可以通过在浏览器中登录微信公众号平台并查看cookie中的token值来获取。
另外,需要注意的是,使用自动化脚本发布文章可能会违反微信公众号平台的规定,可能会导致账号被禁用。因此,在使用这个脚本之前,需要先仔细阅读微信公众号平台的规定,并确保自己的操作符合规定。
第二种方法:
先用selenium登录获取cookie然后再使用request直接发布,这样的好处是方便以后使用,直接上代码:
代码语言:javascript复制import requests
# 配置登录信息和文章信息
account = 'your_account'
password = 'your_password'
title = 'Your Article Title'
content = 'Your article content here'
# 登录获取cookie
login_url = 'https://mp.weixin.qq.com/cgi-bin/bizlogin?action=startlogin'
login_data = {
'username': account,
'pwd': password,
'imgcode': '',
'f': 'json',
'userlang': 'zh_CN',
'redirect_url': '',
'token': '',
'lang': 'zh_CN',
'ajax': '1'
}
login_resp = requests.post(login_url, data=login_data)
login_resp_json = login_resp.json()
if login_resp_json['base_resp']['ret'] != 0:
print('登录失败')
exit()
cookie = login_resp.cookies.get_dict()
# 获取token和cookie
token_url = 'https://mp.weixin.qq.com/'
token_resp = requests.get抱歉,我在之前的回答中由于网络问题漏掉了一部分代码。以下是完整的使用requests库发布微信公众号文章的示例代码:
```python
import requests
# 配置登录信息和文章信息
account = 'your_account'
password = 'your_password'
title = 'Your Article Title'
content = 'Your article content here'
# 登录获取cookie
login_url = 'https://mp.weixin.qq.com/cgi-bin/bizlogin?action=startlogin'
login_data = {
'username': account,
'pwd': password,
'imgcode': '',
'f': 'json',
'userlang': 'zh_CN',
'redirect_url': '',
'token': '',
'lang': 'zh_CN',
'ajax': '1'
}
login_resp = requests.post(login_url, data=login_data)
login_resp_json = login_resp.json()
if login_resp_json['base_resp']['ret'] != 0:
print('登录失败')
exit()
cookie = login_resp.cookies.get_dict()
# 获取token和cookie
token_url = 'https://mp.weixin.qq.com/'
token_resp = requests.get(token_url, cookies=cookie)
token = token_resp.text.split('token=')[1].split('&')[0]
# 发布文章
publish_url = 'https://mp.weixin.qq.com/cgi-bin/appmsg'
publish_data = {
'token': token,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1',
'random': '0.2921642645551266',
'url': '',
'title': title,
'content': content,
'digest': '',
'author': '',
'fileid': '',
'sourceurl': '',
'cdnthumburl': '',
'musicid': '',
'video_id': '',
'show_cover_pic': '0',
'shortvideofileid': '',
'shortvideomd5': '',
'shortvideofilesize': '',
'play_length': '',
'is_fans': '0',
'fee': '0',
'voteid': '',
'is_pay_subscribe': '0',
'pay_subscribe_fee': '',
'related_video': '',
'video_cdn_fileid': '',
'video_cdnthumburl': '',
'video_md5': '',
'video_size': '',
'video_playurl': '',
'video_title': '',
'video_sourceurl': '',
'video_duration': '',
'video_tp_flag': '',
'video_tp_authkey': '',
'video_tp_authorid': '',
'video_tp_appid': '',
'video_tp_orderid': '',
'video_tp_sign': '',
'video_tp_videoid': '',
'video_tp_providerid': '',
'video_tp_mmid': '',
'video_tp_mmtitle': '',
'video_tp_subtitle': '',
'video_tp_mmappid': '',
'video_tp_mmencrypt': '',
'video_tp_encryptkey': '',
'video_tp_cdnduration': '',
'video_tp_thumbmd5': '',
'video_tp_thumbcdnurl': '',
'video_tp_mmreserve1': '',
'video_tp_mmreserve2': '',
'video_tp_mmreserve3': '',
'video_tp_mmreserve4': '',
'video_tp_mmreserve5': '',
'video_tp_mmreserve6': '',
'video_tp_mmreserve7': '',
'video_tp_mmreserve8': '',
'video_tp_mmreserve9': '',
'video_tp_mmreserve10': '',
'is_original': '0',
'original_article_type': '0',
'need_open_comment': '0',
'only_fans_can_comment': '0',
'reward_total_count': '',
'reward_wording': '',
'need_reward': '0',
'template_id': '0',
'third_title': '',
'third_url': '',
'need_article_ad': '0',
'is_reward': '0',
'reward_uin_count': '',
'is_original_home': '0',
'template_info': '',
'is_limit_user': '0',
'is_private_reply': '0',
'need_pay': '0',
'pay_confirm_url': '',
'pay_confirm_wording': '',
'pay_scene': '',
'fee_type': '',
'ori_white_list': '',
'city': '',
'province': '',
'country': '',
'is_multi': '0',
'multi_app_msg_item_list': '',
'multi_info': '',
'multi_item': '',
'multi_share_end_time': '',
'multi_share_start_time': '',
'multi_title': '',
'share_page_desc': '',
'share_page_title': '',
'appmsg_type': '10',
'error': 'false'
}
publish_resp = requests.post(publish_url, data=publish_data, cookies=cookie)
publish_resp_json = publish_resp.json()
if publish_resp_json['base_resp']['ret'] != 0:
print('发布失败')
else:
print('发布成功')