基于selenium的QQ空间自动点赞功能(2020年7月版)

准备工作

简介:
selenium是一个基于java开发的自动化浏览器处理器,它更像是浏览器驱动的代理。
配置:
它本身没有配置浏览器,因此需要配合本机上面安装的浏览器驱动一同使用。例如:Firefox、Chrome、Safari、Ie等等。
大多数情况下,我们会选择Chrome浏览器,然而,使用Chrome作为时selenium的被驱动浏览器。
还需要下载相应的驱动文件webdriver。而不同的webdriver驱动对应着不同的浏览器的不同版本。
除此以外,还可以使用无头浏览器PhantomJS来作为被驱动的浏览器,但是PhantomJS已经停止更新了,可能原因是因为Chrome与FireFox都相继推出了无头浏览器。
PhantomJS下载地址:

https://npm.taobao.org/dist/phantomjs/

功能实现

功能介绍:
项目实现的基本功能,对QQ空间中,个人主页的前几条说说进行点赞。
由于网页内容总是在不停的更新,所以时间长了之后可能就不适用了

难点分析:
难点1:使用selenium进行元素查找时,登录界面的窗口是以iFrame展示的,其真正的内容存放在另一个网址上,因此需要进行iFrame跳转操作。

难点2:在进行查找点赞元素时,需要对已点赞的说说与未点赞的说说进行区分。

难点3:在使用class进行查询时,如果class的值中存在空格,代表其中拥有多个class对其进行了修饰,即class值中存在空格,此时推荐使用xpath来定位到元素。

难点4:对个人主页中的javascript进行处理,请求出更多的说说出来。

难点5:在使用元素点击click()在这里插入代码片有时候会报错,报错原因可能是点击元素被遮挡或者尚且未加载完成。
程序代码实现:

import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
"""
关于使用selenium来实现对qq空间自动点赞功能的实现:

"""

account = input("输入QQ账号:")
password = input("输入QQ密码:")
opt = webdriver.ChromeOptions()
driver = webdriver.Chrome(options=opt)
driver.get("https://qzone.qq.com")
time.sleep(4)
print("Loading  QQ空间")
# 使用iframe将元素隐藏
driver.switch_to.frame(driver.find_element_by_xpath("//iframe[@id='login_frame']"))
btn1 = driver.find_element_by_xpath("//a[@id='switcher_plogin']")

btn1.click()
input1 = driver.find_element_by_class_name("inputstyle")
input1.send_keys(account)
input2 = driver.find_element_by_id("p")

input2.send_keys(password)
btn2 = driver.find_element_by_id("login_button")
btn2.click()
driver.switch_to.default_content()
time.sleep(2)
print("点击个人主页")
btn3 = driver.find_element_by_id("aIcenter")
btn3.click()
time.sleep(3)
print("查找点赞按钮")

# 第一次点赞,对前几个说说进行点赞
time.sleep(3)
praise1 = driver.find_elements_by_xpath('//a[@class="item qz_like_btn_v3 "]/i')
for p in praise1:
    try:
        driver.execute_script("arguments[0].click();", p)
        print("点赞成功")
    except:
        print("点赞失败")

# 下滑操作
js = "var q=document.documentElement.scrollTop=100000"
driver.execute_script(js)

driver.execute_script(js)
time.sleep(3)

# 使用xpath检索未被点赞的说说
"""
item qz_like_btn_v3           表示未获赞的a标签的class属性
item qz_like_btn_v3 item-on   表示已经获赞的a标签的class属性

"""
# 第二次点赞,对之后的JavaScript请求出来的说说进行点赞
praise2 = driver.find_elements_by_xpath('//a[@class="item qz_like_btn_v3 "]/i')

# 进行点击
for p in praise2:
    try:
        driver.execute_script("arguments[0].click();", p)
        print("点赞成功")
    except:
        print("点赞失败")




总结与分析

1、针对selenium的find_element()函数的缺陷,只能在当前窗口或框架中进行元素的查找,因此当网页中写有iFrame标签时,直接使用find_element()就会显示找不到。此时需要使用switch_to.frame()来移动到指定的窗口,并进行元素查找。
2、对于element.click()点击操作的缺陷,可以使用如下代码进行解决:

driver.execute_script(“arguments[0].click();”, p)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值