背景介绍

  • 我是二房东(整租下一套房子), 现欲将其中的房间分租出去,以分担房租, 所以会在豆瓣网等平台发帖子, 发帖子是个寻找和发现的过程还可以接受,在脚本上,可以看到我已经发了16个帖子了,脚本的主要功能是:更新帖子内容或顶帖到前面展示, 这是个很无聊很机械的动作, 所以写了这个脚本来解决更新顶帖的问题

收益

  • 比手动操作快
  • 成就感很强, 哈哈

使用说明

  • 以下代码经过win10, python3.6 测试通过验证
  • 由于其中涉及到个人登录, 隐去了登录相关的信息
  • 网站的xpath路径在目前测试通过, 若源网站修改, 则不能及时更新
  • 发贴标题和内容严重简化,不保证可以通过豆瓣平台的验证, 请参考豆瓣网的发贴规则,这里不做介绍的

中间的坑

  • chrome.exe是谷歌的浏览器, 和chromedrive.exe是谷歌浏览器的接口,这是两个文件, 两个都要下载到电脑本地,且版本要一致, 怎么选? 参考这个文章
  • 若出现验证码 我没有进行识别, 需要手动进行输入,在每个可能需要出现验证码的地方,都给出了10秒或20秒的倒计时.

整个脚本如下:

# -*- coding: utf-8 -*-
# -*- coding=gbk -*-
from time import sleep
import random
from selenium import webdriver# 标题list
title_list = [
'有房出租',
]
# 内容list
content_list = ['''有房出租,不限男女'''
]
# 回应内容list,
message = ['up, up....'
]
# 以上三个全部为list,目的在于,你可以多写几个, 发贴时从中随机取出一个写入平台# 登录模块的xpath
login_xpath = {'login_url': "https://www.douban.com/accounts/login?source=group",  # 登录网站'user': "//input[@id='email']",  # 用户名框'pwd': "//input[@id='password']",  # 密码框'ver_code': '//*[@id="captcha_image"]',  # 验证码,未用到'ver_code_input': '//*[@id="captcha_field"]',  # 验证码框, 未用到'login': "//input[@class='btn-submit']",
}# 这是写贴页面的三个要素:标题,内容,提交
douban_seeds = {'title_input': "//textarea[@class='group-editor-input']",'content_input': "//div[@class='notranslate public-DraftEditor-content']",'submit': "//div[@class='group-editor-submit-group']/a[2]",
}# 这是顶贴页面的多个要素
respond_xpath = {'group': "//div[@class='global-nav-items']/ul/li[6]",'my_send': "//div[@class='info']/p/a[1]",'blog_list': "//table[@class='olt']/tbody/tr[{i}]/td[@class='title']/a",'edit': "//span[@class='fleft']/a",'my_answer': "//textarea[@id='last']",'submit': "//span[@class='bn-flat-hot rr js-verify-account']/input",
}class RespondMessage:def __init__(self, *args, **kwargs):self.user = kwargs.get('user')self.pwd = kwargs.get('pwd')self.title_list = title_listself.content_list = content_listself.message = messageself.login_xpath = login_xpathself.respond_xpath = respond_xpathself.douban_seeds = douban_seeds# 尤其要注意这个路径的问题self.driver_path = 'D:\\chromedriver.exe'self.browser = webdriver.Chrome(self.driver_path)def get_rand(self):"""随机取出标题和内容"""title = random.choice(self.title_list)content = random.choice(self.content_list)return title, contentdef _login(self):"""登录页面"""self.browser.get(self.login_xpath.get('login_url'))self.browser.find_element_by_xpath(self.login_xpath.get('user')).send_keys(self.user)sleep(1)self.browser.find_element_by_xpath(self.login_xpath.get('pwd')).send_keys(self.pwd)# 下面的20秒倒计时是为了让你有时间去写入验证码,若没有出现验证码,则无视就好,不用注释掉, 除了时间方面, 其它不影响代码执行for i in reversed(range(20)):print(i+1)sleep(1)self.browser.find_element_by_xpath(self.login_xpath.get('login')).click()return self.browserdef respond_message(self, is_refresh=1):"""is_refresh = 1 为顶贴模式is_refresh = 0 为更新贴子内容模式"""# 获取登录的页面browser = self._login()# 跳转到指定的页面browser.find_element_by_xpath(self.respond_xpath.get('group')).click()browser.find_element_by_xpath(self.respond_xpath.get('my_send')).click()# 到达指定的列表面for i in range(1, 16):browser.find_element_by_xpath(self.respond_xpath.get('blog_list').format(i=i)).click()if is_refresh == 0:browser.find_element_by_xpath(self.respond_xpath.get('edit')).click()self.update_blog()elif is_refresh == 1:self.writer_message()browser.back()self.close()def update_blog(self):"""更新贴子逻辑"""title, content = self.get_rand()title_input = self.browser.find_element_by_xpath(self.douban_seeds.get('title_input'))title_input.clear()title_input.send_keys(title)content_input = self.browser.find_element_by_xpath(self.douban_seeds.get('content_input'))content_input.clear()content_input.send_keys(content)for i in reversed(range(10)):print(i+1)sleep(1)submit = self.browser.find_element_by_xpath(self.douban_seeds.get('submit')).click()sleep(3)self.browser.back()def writer_message(self):"""顶贴逻辑"""mes = random.choice(self.message)self.browser.find_element_by_xpath(self.respond_xpath.get('my_answer')).send_keys(mes)for i in reversed(range(10)):print(i+1)sleep(1)submit = self.browser.find_element_by_xpath(self.respond_xpath.get('submit')).click()sleep(3)self.browser.back()def close(self):"""关闭窗口"""self.browser.close()if __name__ == "__main__":user = 'user'pwd = 'pwd'res_message = RespondMessage(user=user, pwd=pwd)res_message.respond_message(is_refresh=1)

刷新两天后, 房子租出去了,哈哈

python selenium批量在豆瓣租房上 发帖子相关推荐

  1. 【爬虫】应用Python爬虫爬取豆瓣租房上的帖子信息

    GitHub项目地址:https://github.com/Donvink/Spider.BC 哔哩哔哩代码讲解:https://b23.tv/waSfUa CSDN博客地址:https://blog ...

  2. 如何使用python批量下载-使用 Python + Selenium 批量下载素材

    原文首发于CSDN,略有增删 使用 Python + Selenium 批量下载素材 本文简单介绍使用 Python + Selenium 从ManyPixels线上图库批量下载素材的方法.截止到现在 ...

  3. 利用python+selenium爬取derwent数据库上的patents

    利用python+selenium爬取derwent数据库上的patents 需求: 登陆web of science,并进入derwent数据库,按照公司excel列表依次进行搜索,并将所有搜索道德 ...

  4. 使用python selenium 代码在豆瓣发回复顶贴

    文章目录 写在前面的话: 直接上码 总结技术点: 写在前面的话: 之前写过在豆瓣上更新旧贴和回复顶贴的脚本. 毕竟已经是几年前的事情了, 一方面N多功能不能用了.,另一方面看当时的代码就跟一砣那啥似的 ...

  5. python + selenium +win32gui + winspy 实现图片上传

    过程:模拟点击上传按钮,打开Windows对话框,编辑栏输入文件路径(或网址)点击确定.网上随便找了一个进行测试. 点击后出现Windows上传对话框 用 winspy 来检测窗口的句柄 python ...

  6. Python+Selenium学习笔记10 - send_keys上传文件

    在火狐浏览器上传文件 上传前,同一个HTML文件在火狐和Edge浏览器显示有些不同 这是Firefox浏览器的显示 这是Edge浏览器 上传后 1 # coding = utf-8 2 3 from ...

  7. python爬取豆瓣读书_用python+selenium抓取豆瓣读书中最受关注图书并按照评分排序...

    抓取豆瓣读书中的(http://book.douban.com/)最受关注图书,按照评分排序,并保存至txt文件中,需要抓取书籍的名称,作者,评分,体裁和一句话评论 方法一:#coding=utf-8 ...

  8. 用python+selenium抓取豆瓣电影中的正在热映前12部电影并按评分排序

    抓取豆瓣电影(http://movie.douban.com/nowplaying/chengdu/)中的正在热映前12部电影,并按照评分排序,保存至txt文件 1 #coding=utf-8 2 f ...

  9. python selenium 实现在火狐浏览器上下载文件(涉及firefox下载文件相关的配置)

    在这个案例中最重要也是我花了主要精力解决的问题就是火狐浏览器下载文件时会自动弹出下载弹框的这个问题. 解决这个问题可以参照以下步骤(本次案例中要下载的文件格式为dotx文件,如果有其他格式的文件要修改 ...

最新文章

  1. 2021年大数据Hadoop(二十五):YARN通俗介绍和基本架构
  2. sublime_text配置php调试环境,SublimeText2配置PHP调试环境(在windows环境下)
  3. 【bzoj1565】[NOI2009]植物大战僵尸 拓扑排序+最大权闭合图
  4. idea14创建java项目_使用IntelliJ IDEA 14和Maven创建java web项目
  5. 获取一组radio按钮选中的值Value
  6. 面试题59 - II. 队列的最大值
  7. 瑞幸咖啡股价再创新低,App 反冲 TOP 1
  8. asp.net应用程序无法连接oracle数据库,2020:ASP连接Oracle数据库问题的解决过程
  9. MySQL巧妙利用help_topic表把以逗号分隔的字符串转换成行
  10. 添加源代码到你的sdk中
  11. 在线获取今天是今年的第周几
  12. AcWing 1750. 救生员(差分+暴力枚举)
  13. java与c++比较
  14. spss主成分综合得分_权重赋值之“主成分分析法”
  15. DVWA之SQL注入代码审计
  16. 软件系统分析-分账系统
  17. html图片的title,图片标签IMG内alt和title属性
  18. torch.Tensor
  19. Java代码调试(jer的问题)
  20. C#筛选DataTable的数据

热门文章

  1. 总是做不好需求管理?这6款必备工具送给你
  2. FreeSWITCH 对接阿里SDM(MRCP-SERVER)
  3. ST、SC、FC光纤接头区别
  4. Linux中搭建Redis集群及redis集群配置常见问题总结
  5. 用python画apc图_Python开发GUI实战:图片转换素描画工具!
  6. 支持直接外链的最佳网络硬盘OpenDrive
  7. 微信公众号找不到模板消息
  8. Vue + gojs 绘制鱼骨图
  9. VirtualBox开机后黑屏
  10. python 传智播客_使用Python自动播客发布