数据采集实战:如何自动化运营微博?

【项目目标】

1.掌握 Selenium 自动化测试工具,以及元素定位的方法

2.学会编写微博自动化功能模块:加关注,写评论,发微博

【Selenium 自动化测试工具】

1.通过 id 定位:我们可以使用 find_element_by_id() 函数。比如我们想定位 id=loginName 的元素,就可以使用 browser.find_element_by_id(“loginName”)。

2.通过 name 定位:我们可以使用 find_element_by_name() 函数,比如我们想要对 name=key_word 的元素进行定位,就可以使用 browser.find_element_by_name(“key_word”)。

3.通过 class 定位:可以使用 find_element_by_class_name() 函数。

4.通过 tag 定位:使用 find_element_by_tag_name() 函数。

5.通过 link 上的完整文本定位:使用 find_element_by_link_text() 函数。

6.通过 link 上的部分文本定位:使用 find_element_by_partial_link_text() 函数。有时候超链接上的文本很长,我们通过查找部分文本内容就可以定位。

7.通过 XPath 定位:使用 find_element_by_xpath() 函数。使用 XPath 定位的通用性比较好,因为当 id、name、class 为多个,或者元素没有这些属性值的时候,XPath 定位可以帮我们完成任务。

8.通过 CSS 定位:使用 find_element_by_css_selector() 函数。CSS 定位也是常用的定位方法,相比于 XPath 来说更简洁。

在我们获取某个元素之后,就可以对这个元素进行操作了,对元素进行的操作包括:

1.清空输入框的内容:使用 clear() 函数;

2.在输入框中输入内容:使用 send_keys(content) 函数传入要输入的文本;

3.点击按钮:使用 click() 函数,如果元素是个按钮或者链接的时候,可以点击操作;

4.提交表单:使用 submit() 函数,元素对象为一个表单的时候,可以提交表单;

 【代码实现】

# 登录微博
def weibo_login(username, password):
    # 打开微博登录页
    browser.get('https://passport.weibo.cn/signin/login')
    browser.implicitly_wait(5)
    time.sleep(1)
    # 填写登录信息:用户名、密码
    browser.find_element_by_id("loginName").send_keys(username)
    browser.find_element_by_id("loginPassword").send_keys(password)
    time.sleep(1)
    # 点击登录按钮
    browser.find_element_by_id("loginAction").click()
    time.sleep(1)
    # 获取短信验证
    browser.find_element_by_xpath("//div[@class='my-btn-box']/a").click()
    time.sleep(1)
    ver_code = int(input("请输入验证码:"))
    browser.find_element_by_xpath("//div[@class='m-td']/span/input").send_keys(ver_code)
    time.sleep(1)
    browser.find_element_by_xpath("//div[@class='my-btn-box']/a").click()
    time.sleep(1)

需要说明的是,你需要填写自己的微博用户名和密码(对应 username 和 password)。

【微博自动化运营:加关注,写评论,发微博】

# 关注用户
def add_follow(uid):
    browser.get('https://m.weibo.cn/u/' + uid)
    time.sleep(1)
    browser.find_element_by_xpath("//div[@callback='follow()']").click()
    time.sleep(1)
    # 选择分组
    browser.find_element_by_xpath("//a[@class='m-btn m-btn-white m-btn-text-black']").click()
    time.sleep(1)

1.如何找到用户的 UID

点击任何一个微博用户,查看他的 URL 链接,比如链接是https://weibo.com/u/5020181423 ,那么 u 后面的数字 5020181423 即为用户的 UID

2.使用 XPath 定位元素定位

如何找到“关注”这个按钮的元素标识?在 Chrome 浏览器中,在“关注”按钮用鼠标右键点击,选择“检查”查看这个元素对应的代码。

然后在选择分组时,点击取消按钮

 

# 发微博
def post_weibo(content):
    # 跳转到用户的首页
    browser.get('https://m.weibo.cn/')
    browser.implicitly_wait(5)
    # 点击右上角的发布按钮
    browser.find_element_by_xpath("//div[@class='lite-iconf lite-iconf-releas']").click()
    # 在弹出的文本框中输入内容
    browser.find_element_by_xpath("//span[@class='m-wz-def']/textarea").send_keys(content)
    time.sleep(1)
    # 点击发布按钮
    browser.find_element_by_xpath("//a[@class='m-send-btn']").click()
    time.sleep(1)


# 评论微博
def add_comment(weibo_url, content):
    browser.get(weibo_url)
    browser.implicitly_wait(5)
    # 点击评论区
    browser.find_element_by_xpath("//div[@class='box-left m-box-col m-box-center-a']").click()
    time.sleep(1)
    # 写评论
    browser.find_element_by_xpath("//div[@class='textarea-box']/textarea[1]").send_keys(content)
    time.sleep(2)
    # 点击发送按钮
    browser.find_element_by_xpath("//button[@class='btn-send']").click()
    time.sleep(1)

【项目总结】

通过实战对使用 Selenium WebDriver 更有了解,包括如何定位指定的元素,对元素进行各种操作等。同时使用了 implicitly_wait 函数以及 time.sleep() 函数让浏览器和程序等待一段时间,完成数据加载之后再进行后续的操作,这样就避免了数据没有加载完,导致获取不到指定元素的情况。通过三个模块(加关注、写评论、发微博)的编写,了解如何使用工具完成自动化的操作。

 

posted @ 2020-11-17 22:21  止一  阅读(204)  评论(0编辑  收藏  举报