目录
互粉多是一件美事,但手动回关,总是不够及时,显得我们没有诚意,而且,懒惰是程序猿的优秀品质,为了将这种精神发扬光大,我写了如下一篇脚本。
总体功能描述:
- 登录后查看新关注自己的好友(打开脚本后需要手动扫码登录,暂时还没有解决csdn用chromedriver 登录时滑动验证码不通过的问题,手动滑动也会验证失败如果你知道怎么解决请务必,私信我指教一下我!!!)
- 对新增粉丝列表中的UU进行回关:
如果是已经关注就跳过,未关注就点击回关。并且打开这位朋友的主页,给第一篇文章点一个赞,(虽然没有看文章,但是咱的人情最起码是送到了)
- 挂在后台,持续扫描新增粉丝列表,并实时回关点赞。(关注我,我秒回,hhh,看到这里是不是想关注我试试看呢?,如果你有服务器的话,可以挂在服务器上24小时不间断的运行了)
环境配置:
- chrome浏览器以及chrome driver,需要版本一致。话不多说,上链接:
chrome driver下载地址:
CNPM Binaries Mirrorhttps://registry.npmmirror.com/binary.html?path=chromedriver/
建议将谷歌浏览器更新到最新版,并且下载最新的chrome driver。
2.配置charom driver环境变量:
将exe文件的地址复制,加在这理
3,python 环境
这里就不多说了,可以自行百度
代码简述
这里是用到的模块,灰色是因为没有破解滑动验证码,删掉了自动登录的部分。后续补充。
主要是selenium,可以定位到浏览器中的元素,并进行操作。
这部分是在新增好友界面,查看是否有新关注的好友。
这部分是进入关注自己的UU的界面,对他的文章行get like。
这里是一个等待用户扫码登录的逻辑,用户扫码后会跳出循环。
这里是登录后跳转到新增列表,并且保存相关链接,用于再次回到此界面。以及每隔20秒刷新查看有无新增关注。
总代码:
import random
from selenium import webdriver # 用来驱动浏览器的
from selenium.webdriver import ActionChains # 破解滑动验证码的时候用的 可以拖动图片
from selenium.webdriver.common.by import By # 按照什么方式查找,By.ID,By.CSS_SELECTOR
from selenium.webdriver.common.keys import Keys # 键盘按键操作
from selenium.webdriver.support import expected_conditions as EC # 和下面WebDriverWait一起用的
from selenium.webdriver.support.wait import WebDriverWait # 等待页面加载某些元素
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
import time
import datetime
import sys
def care_new(num):
# 寻找新增粉丝,默认num个
for i in range(num - 1):
try:
care_button = browser.find_element(By.CSS_SELECTOR,
f"ul[class='list']>li:nth-child({i + 1})>div:nth-child(3)> :nth-child(1)")
fan = browser.find_element(By.CSS_SELECTOR,
f"ul[class = 'list']>li:nth-child({i + 1})> :nth-child(2)> :nth-child(1) :nth-child(1)")
finally:
pass
print("tag" + care_button.text)
if care_button.text == "回关":
care_button.click()
print("你回关了" + fan.text + " ----" + datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
name = str(fan.text)
# 进入关注者主页
# fan.click()
time.sleep(2)
print(fan.get_attribute("href"))
browser.get(fan.get_attribute("href"))
time.sleep(2)
give_like(name)
else:
print("你已经关注过" + fan.text + "了,无需再次关注")
return
def give_like(name):
# 给他一个赞 title = browser.find_element(By.XPATH, '//*[@id="userSkin"]/div[2]/div/div[2]/div/div[2]/div/div/div[
# 1]/article/a')
# title = browser.find_element(By.CSS_SELECTOR,
# "div[class = 'mainContent']>div:nth-child(1)> :nth-child(1)> :nth-child(1) :nth-child(1) :nth-child(1)")
print("kaisidianzan")
try:
title = browser.find_element(By.CSS_SELECTOR, "article > :nth-child(1)")
except:
print("没找到" + name + "的文章")
else:
time.sleep(1)
print("href" + title.get_attribute("href"))
browser.get(title.get_attribute("href"))
time.sleep(1.5)
try:
islike = browser.find_element(By.ID, 'is-like')
# // *[ @ id = "is-like"] / a
time.sleep(1.5)
except:
print("没找到点赞按钮")
else:
islike.click()
print("你点赞了" + name + "的文章")
time.sleep(1)
finally:
pass
finally:
pass
try:
title = browser.find_element(By.TAG_NAME, "")
time.sleep(1)
print("tag2" + title.tag_name)
except:
print("meizhaodao")
else:
time.sleep(1)
print("tag1" + title.tag_name)
finally:
# 回到关注列表
browser.get(fans_link)
time.sleep(3)
return
if __name__ == '__main__':
fans_link = ""
browser = webdriver.Chrome() # 括号中填写chromedriver驱动的路径
browser.maximize_window()
try:
# 加载CSDN 登录地址
browser.get("https://passport.csdn.net/login?code=applets")
# 等待扫码登录
ok = True
while ok:
try:
isok = browser.find_element(By.XPATH, '//*[@id="csdn-toolbar"]/div/div/div[3]/div/div[1]/a')
except:
ok = False
else:
try:
# print(isok.text)
if isok.text == "登录/注册":
ok = True
else:
ok = False
except:
ok = False
time.sleep(0.5)
time.sleep(2)
# 登陆成功
mess = browser.find_element(By.ID, "toolbar-remind")
time.sleep(1)
# 点击进入消息
mess.click()
# 进入新增粉丝页面
new_fans = browser.find_element(By.XPATH, '// *[ @ id = "app"] / div / div[1] / ul / li[2] / a / span')
fans_link = browser.find_element(By.XPATH, '// *[ @ id = "app"] / div / div[1] / ul / li[2] / a').get_attribute(
"href")
new_fans.click()
time.sleep(1)
# 查看前十个
first = True
care_new(8)
while True:
if first:
care_new(8)
# 20s查看一次
browser.get(fans_link)
time.sleep(20)
finally:
print("完了,报错了")
坑:
*进入新的界面后一定要尽量用get(url)的方式,这样只是在当前页面刷新,而不是新建标签页,click跳转界面后很容易出现定位不到UI元素的情况。
*预留足够的时间,进行页面加载。
项目文件:
链接:https://pan.baidu.com/s/17a07JnLZjSvsarED0lRn2A?pwd=z3x4
提取码:z3x4
*项目使用说明:
解压文件后记得添加chormdriver 路径到 系统环境变量path
Automessage\Autocsdn\dist下的exe文件可以直接运行,如果报错请检查环境变量以及chrom浏览器版本,这是我的版本。(在chrom浏览器地址栏输入,chrome://version/ 可以显示类似下图版本信息。
欢迎各位大佬留言私信,指点不足。后续部署到服务器端,欢迎来关注验证。