用python给女神刷赞会发生什么?

会被博主发到博客里啦, 笨蛋.

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# code=utf-8

from selenium.webdriver.chrome.options import Options
from selenium import webdriver
import time

chrome_options = Options()
# 如果是无界面的浏览
# chrome_options.add_argument('--headless')
chrome = webdriver.Chrome(chrome_options=chrome_options) #浏览器驱动

you_qq_number = 1348651580 # 你的QQ号
you_qq_password = "JXU2MjREJXU0RTBEJXU0RjFBJXU1NDRBJXU4QkM5JXU0RjYwJXU1QkM2JXU3ODAxJXU1NDYy" #你的密码
friends_qq_number = 123 # 你想给点赞的好友的qq号
number_of_like = 0 # 记录点了多少赞

# 将find_element_by_xpath()方法封装, 作用是可以反复查找那些因为加载延迟而无法定位的元素, 避免因为这些情况导致程序崩溃
def locate(xpath):
times = 1
while True:
try:
return chrome.find_element_by_xpath(xpath)
except:
print("第"+str(times)+"次定位"+xpath+"失败")
times = times + 1
time.sleep(1)

# 将视角锁定到这个元素上, 不然可能无法点击
def view_to_element(element):
chrome.execute_script("arguments[0].scrollIntoView();",element)

# 模拟点赞
def click_like(number):
xpath = "//*[@id='host_home_feeds']/li["+str(number)+"]"
view_to_element(locate(xpath))
if number==1 and locate(xpath+"/div[1]").get_attribute("class") == 'f-single-top':
# 存在置顶说说时
xpath += "/div[4]/div[1]/p/a[3]"
else:
xpath += "/div[3]/div[1]/p/a[3]"
if locate(xpath).get_attribute('data-clicklog') == "like":
locate(xpath+"/i").click()
global number_of_like
number_of_like += 1
print("the number of clicking like is : "+str(number_of_like))

# 初始化
def initial():
# 开启页面
chrome.get("https://user.qzone.qq.com/"+str(you_qq_number) +"/main")
chrome.maximize_window()
chrome.implicitly_wait(30)

# 帐号密码登陆
chrome.switch_to.frame("login_frame")
chrome.find_element_by_link_text("帐号密码登录").click()

chrome.find_element_by_id("u").send_keys(you_qq_number)
chrome.find_element_by_id("p").send_keys(you_qq_password)
chrome.find_element_by_id("login_button").click()

time.sleep(5)
locate("//*[@id='id_photowall_closetips']/s").click()
locate("//a[//*[@id='qz_notification']/a[2]]").click()

chrome.get("https://user.qzone.qq.com/"+str(friends_qq_number) +"/main")
time.sleep(5)
if you_qq_number != friends_qq_number:
# 关掉烦人的弹窗
chrome.find_element_by_xpath("//*[@id='friendship_promote_layer']/table/tbody/tr[1]/td[2]/a").click()
chrome.switch_to.frame(locate("//*[@id='QM_Feeds_Iframe']"))


# 遍历说说, 并且下拉加载更多
def start_to_like(number):
# 尝试定位置顶说说
for x in range(number):
try:
chrome.find_element_by_xpath("//*[@id='host_home_feeds']/li["+str(x+1)+"]")
except:
view_to_element(locate("//*[@id='ICFeedsTipMsg']"))
click_like(x+1)
# 主函数
def main():
initial()
start_to_like(100)
print("click like complete")
time.sleep(30)
# chrome.quit()

if __name__ == "__main__":
main()

一时兴起的产物, 还不赖吧…

效果

你看, 女神见了都说好

优缺点

  • 优点:
    可以基本自动化的给女神的QQ空间点赞.
    让她上来自己动.
  • 缺点:
    1. 需要你安装chrome浏览器和对应的驱动, 虽然也可以是其它浏览器, 但需要稍微修改一些代码, 不够通用.
    2. 因为qq空间的说说是4个或者8个一组加载的, 本脚本在这些地方是基于报错来下拉加载新的说说, 比较不稳定, 有时会卡顿比较多的时间, 需要人为下拉.
    3. 例如这个

      这种说说, 会干扰脚本的定位, 需要手动删除一下下

其实缺点2和3是可以克服的, 但是我已经懒得改了, ojbk
或者点击下方为我打赏, 鼓励我写出更优质的脚本吧(手动滑稽)