selenium滑块拖动验证

  • 1.前言
  • 2.环境
  • 3.代码
  • 谢谢你的浏览(End)

1.前言

实验网站:网易云(https://music.163.com/)
本次实验主要用于练习cookie的使用

2.环境

python 3.8.7
selenium 3.141.0

3.代码

导入库

import json
import os
import re
import time
import pymysql
from selenium.webdriver import Chrome, ChromeOptions

输入账号密码

print("******欢迎使用tzh的程序,输入网易云账号密码自动获取近一周常听歌单******")
user = input("输入账号:")
passw = input("输入密码:")

设置等待时间

driver.implicitly_wait(20)

初始化谷歌驱动

def init_chrome():# 读取驱动driver_path = r"chromedriver.exe"# 浏览器exe路径(如果使用的是chrome内核的浏览器而不是chrome,则这行代码一定不能忽略)broswer_path = r"C:\Program Files\Google\Chrome\Application\chrome.exe"Options = ChromeOptions()Options.binary_location = broswer_path# 更换头部,防止被网站识别Options.add_argument('user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) ""AppleWebKit/537.36 ''(KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36"')# 后台运行seleniumOptions.add_argument('headless')# 启动chromedriver,根据浏览器路径启动浏览器return Chrome(options=Options, executable_path=driver_path)

登录操作

def login(username, password):# 登录获取cookiedriver = init_chrome()driver.implicitly_wait(30)driver.get("https://music.163.com/")driver.delete_all_cookies()driver.maximize_window()driver.find_element_by_xpath('/html/body/div[1]/div[1]/div/div[1]/a').click()driver.find_element_by_xpath('//a[@class="u-btn2 other"]').click()driver.find_element_by_xpath('//*[@id="j-official-terms"]').click()driver.find_element_by_xpath('/html/body/div[6]/div[2]/div/div[1]/div[1]/div[1]/div[2]/a').click()driver.find_element_by_xpath('/html/body/div[6]/div[2]/div/div[1]/div[3]/div[3]/a').click()driver.find_element_by_xpath('/html/body/div[6]/div[2]/div/div[1]/div[1]/div/div/input').send_keys(username)driver.find_element_by_xpath('/html/body/div[6]/div[2]/div/div[1]/div[2]/div[1]/input').send_keys(password)driver.find_element_by_xpath('/html/body/div[6]/div[2]/div/div[1]/div[4]/a').click()time.sleep(1)cookie = driver.get_cookies()with open("./user_cookies/" + str(user) + ".txt", "w+", encoding="utf-8") as f:f.write(json.dumps(cookie))driver.close()print("获取cookie成功")

进入榜单页面

def get_hobby(username):# 此函数用于验证cookie是否可用driver = init_chrome()driver.implicitly_wait(20)driver.get("https://music.163.com/#")driver.delete_all_cookies()with open("./user_cookies/" + username + ".txt", "r")as f:for line in json.loads(f.read()):driver.add_cookie(line)driver.get("https://music.163.com/#")driver.maximize_window()with open("./user_html/" + str(user) + "_html.txt", "w+", encoding="utf-8") as f:f.write(driver.page_source)if len(re.findall("动态", driver.page_source)) == 1:print("fail")else:print("success")get_top10(driver)

获取本周歌单播放量前十并写入数据库(数据库操作可自行删除省略)

def get_top10(driver):# 获取自己听歌排行前十driver.switch_to.window(driver.window_handles[-1])# /html/body/div[4]/div[2]/div[1]/div/ul/li[1]/aid = re.findall(r'GUser={userId:(.*?),nickname:"KeepppGoing",avatarUrl', driver.page_source)if len(id) == 1:id = id[0]driver.get('https://music.163.com/#/user/home?id=' + id)driver.switch_to.window(driver.window_handles[-1])driver.switch_to.frame('g_iframe')time.sleep(1)song_name = re.findall('<b title="(.*?)">', driver.page_source)singer_name = re.findall('<span title="(.*?)">', driver.page_source)listen_time = re.findall('<span class="times f-ff2">(.*?)次</span>', driver.page_source)if len(song_name) == len(singer_name) == len(listen_time):for i in range(10):connect = pymysql.connect(user="", password="",database="", host="",port=)cursor = connect.cursor()cursor.execute("""CREATE TABLE IF NOT EXISTS `wyymusic` (`username` varchar(50) NOT NULL,`password` varchar(50) NOT NULL,`song_name` varchar(50) NOT NULL,`singer_name` varchar(50) NOT NULL,`listen_time` varchar(50) NOT NULL,`select_time` varchar(50) NOT NULL) """)connect.commit()cursor.execute('insert into wyymusic values (%s,%s,%s,%s,%s,%s)',(user, passw, song_name[i], singer_name[i], listen_time[i],str(time.asctime(time.localtime(time.time())))))print("歌名:" + song_name[i] + "歌手名::" + singer_name[i] + "听歌次数:" + listen_time[i])connect.commit()cursor.close()connect.close()driver.close()

定义一个运行自检的function

def judge_exist(username, password):# 存在用户cookie则直接执行 否则自动登录获取if username + '.txt' in list(os.walk(r"./user_cookies"))[0][2]:print("用户cookie存在")try:print(get_hobby(username))except Exception as e:print(e)print("cookie失效")login(username, password)get_hobby(username)finally:print("运行完毕")else:print("无用户cookie")try:login(username, password)get_hobby(username)except Exception as e:print(e)print("获取cookie失败")finally:print("运行完毕")

调用函数

if __name__ == '__main__':judge_exist(user, passw)

完整代码

import json
import os
import re
import time
import pymysql
from selenium.webdriver import Chrome, ChromeOptionsprint("******欢迎使用tzh的程序,输入网易云账号密码自动获取近一周常听歌单******")
user = input("输入账号:")
passw = input("输入密码:")def init_chrome():# 读取驱动driver_path = r"chromedriver.exe"# 浏览器exe路径(如果使用的是chrome内核的浏览器而不是chrome,则这行代码一定不能忽略)broswer_path = r"C:\Program Files\Google\Chrome\Application\chrome.exe"Options = ChromeOptions()Options.binary_location = broswer_path# 更换头部,防止被网站识别Options.add_argument('user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) ""AppleWebKit/537.36 ''(KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36"')# 后台运行seleniumOptions.add_argument('headless')# 启动chromedriver,根据浏览器路径启动浏览器return Chrome(options=Options, executable_path=driver_path)def login(username, password):# 登录获取cookiedriver = init_chrome()driver.implicitly_wait(30)driver.get("https://music.163.com/")driver.delete_all_cookies()driver.maximize_window()driver.find_element_by_xpath('/html/body/div[1]/div[1]/div/div[1]/a').click()driver.find_element_by_xpath('//a[@class="u-btn2 other"]').click()driver.find_element_by_xpath('//*[@id="j-official-terms"]').click()driver.find_element_by_xpath('/html/body/div[6]/div[2]/div/div[1]/div[1]/div[1]/div[2]/a').click()driver.find_element_by_xpath('/html/body/div[6]/div[2]/div/div[1]/div[3]/div[3]/a').click()driver.find_element_by_xpath('/html/body/div[6]/div[2]/div/div[1]/div[1]/div/div/input').send_keys(username)driver.find_element_by_xpath('/html/body/div[6]/div[2]/div/div[1]/div[2]/div[1]/input').send_keys(password)driver.find_element_by_xpath('/html/body/div[6]/div[2]/div/div[1]/div[4]/a').click()time.sleep(1)cookie = driver.get_cookies()with open("./user_cookies/" + str(user) + ".txt", "w+", encoding="utf-8") as f:f.write(json.dumps(cookie))driver.close()print("获取cookie成功")def get_hobby(username):# 此函数用于验证cookie是否可用driver = init_chrome()driver.implicitly_wait(20)driver.get("https://music.163.com/#")driver.delete_all_cookies()with open("./user_cookies/" + username + ".txt", "r")as f:for line in json.loads(f.read()):driver.add_cookie(line)driver.get("https://music.163.com/#")driver.maximize_window()with open("./user_html/" + str(user) + "_html.txt", "w+", encoding="utf-8") as f:f.write(driver.page_source)if len(re.findall("动态", driver.page_source)) == 1:print("fail")else:print("success")get_top10(driver)def get_top10(driver):# 获取自己听歌排行前十driver.switch_to.window(driver.window_handles[-1])# /html/body/div[4]/div[2]/div[1]/div/ul/li[1]/aid = re.findall(r'GUser={userId:(.*?),nickname:"KeepppGoing",avatarUrl', driver.page_source)if len(id) == 1:id = id[0]driver.get('https://music.163.com/#/user/home?id=' + id)driver.switch_to.window(driver.window_handles[-1])driver.switch_to.frame('g_iframe')time.sleep(1)song_name = re.findall('<b title="(.*?)">', driver.page_source)singer_name = re.findall('<span title="(.*?)">', driver.page_source)listen_time = re.findall('<span class="times f-ff2">(.*?)次</span>', driver.page_source)if len(song_name) == len(singer_name) == len(listen_time):for i in range(10):connect = pymysql.connect(user="", password="",database="", host="",port=)cursor = connect.cursor()cursor.execute("""CREATE TABLE IF NOT EXISTS `wyymusic` (`username` varchar(50) NOT NULL,`password` varchar(50) NOT NULL,`song_name` varchar(50) NOT NULL,`singer_name` varchar(50) NOT NULL,`listen_time` varchar(50) NOT NULL,`select_time` varchar(50) NOT NULL) """)connect.commit()cursor.execute('insert into wyymusic values (%s,%s,%s,%s,%s,%s)',(user, passw, song_name[i], singer_name[i], listen_time[i],str(time.asctime(time.localtime(time.time())))))print("歌名:" + song_name[i] + "歌手名::" + singer_name[i] + "听歌次数:" + listen_time[i])connect.commit()cursor.close()connect.close()driver.close()def judge_exist(username, password):# 存在用户cookie则直接执行 否则自动登录获取if username + '.txt' in list(os.walk(r"./user_cookies"))[0][2]:print("用户cookie存在")try:print(get_hobby(username))except Exception as e:print(e)print("cookie失效")login(username, password)get_hobby(username)finally:print("运行完毕")else:print("无用户cookie")try:login(username, password)get_hobby(username)except Exception as e:print(e)print("获取cookie失败")finally:print("运行完毕")if __name__ == '__main__':judge_exist(user, passw)

运行结果↓


目录结构

更多功能可自行拓展

谢谢你的浏览(End)

自动登录网易云获取近一周常听歌单相关推荐

  1. python3爬虫进阶之自动登录网易云音乐并爬取指定歌曲评论

    ** python3爬虫进阶之自动登录网易云音乐并爬取指定歌曲评论 ** 一.访问网易云首页,找到所需元素的位置 用浏览器打开网易云首页https://music.163.com/之后,发现我们要找的 ...

  2. Java 使用HttpURLConnection获取网易云(我喜欢的音乐)歌单内歌曲

    Java 使用HttpURLConnection获取网易云(我喜欢的音乐)歌单歌单内歌曲 1.HttpURLConnection简介 2.前期准备 2.1 目标url 2.2 歌曲ID获得 2.3 u ...

  3. Python网络爬虫实践(1):爬取网易云音乐播放量大于1000万的歌单

    Python网络爬虫实践(1) 一.需求分析 爬取网易云音乐播放量大于1000万的歌单. 二.实施步骤 1.安装selenium selenium是一个用于Web应用自动化程序测试的工具,测试直接运行 ...

  4. 你们要的歌单:网易云音乐收藏量前100的歌单

    网易云音乐收藏量前100的歌单,这下不怕不够循环了, 纯音乐居多,国外音乐也多,特别小众的音乐还得靠自己发现. 温暖的假日下午,你手握咖啡看着书,听着轻音乐,多么惬意. 按照收藏量降序排序 90334 ...

  5. 获取网易云音乐开放接口api的推荐歌单

    网易云音乐开放api接口 网址:https://binaryify.github.io/NeteaseCloudMusicApi/#/?id=neteasecloudmusicapi 项目地址:htt ...

  6. 【python】爬虫入门:爬取网易云音乐的歌曲评论、用户歌单、用户听歌记录等

    目录 一.概述 二.爬取流程 1.爬取评论 1.1.资源定位 1.2.爬取准备 1.3.代码实现 2.爬取听歌记录 2.1.资源定位 2.2.爬取准备 2.3.js劫持 三.总结 一.概述 第一次学爬 ...

  7. 使用Puppeteer轻松爬取网易云音乐、QQ音乐的精品歌单

    背景 最近在学习Puppeteer进行自动化操作,另一方面为了防止上班时间被打扰,是时候爬点歌单在上班的时候,用来抵抗外界的干扰了. 地址 项目完整代码地址:github.com/BingKui/We ...

  8. 网页歌单html制作,网页内嵌网易云插件全程(包括生成自己歌单的外链)

    网页内嵌网易云插件全程(包括生成自己歌单的外链) 1.首先附图,网易云官网教程.(music.163.com) 2.实例操作, 首先第一步在网页版网易云,随便打开一个歌单,点击生成外链播放器. 3.你 ...

  9. Python分析网易云音乐近5年热门歌单

    專 欄 ❈作者:瑶妹妹先生,知乎专栏:折数,关于网络编程.数据挖掘,数据可视化,摄影后期等. ❈ 网易云音乐几乎是我唯一的听歌消遣的平台了,平时剪辑寻找BGM时也上云村.它的特点就是体验.视角效果都很 ...

最新文章

  1. Atitit.论垃圾文件的识别与清理 文档类型垃圾文件 与api概要设计pa6.doc
  2. wpf在异步中给前台赋值
  3. pip show pip可以查看pip的版本以及升级pip到最新版本
  4. 【2019.09.15】2019icpc上海网络赛
  5. adb java_ADB - javalzy - 博客园
  6. 微信小程序背景图片设置问题
  7. DSP芯片的基本结构
  8. Frank Pfenning
  9. QuickTime文件格式
  10. html自动汉字转拼音,输入汉字转换成拼音首字母js代码
  11. html背景音乐教程pdf,HTML插入背景音乐方法【全】
  12. Elasticsearch 索引别名应用
  13. 用Altium Designer打开Protel文件的方法
  14. RocketMQ:The producer group has been created before, specify another name please.
  15. SpringCloud 学习笔记(2 / 3)
  16. kaggle比赛【Riiid! Answer Correctness Prediction】
  17. 数据库保存表情符号(emoji)
  18. matlab中imagesc函数基本学习
  19. SitePoint Podcast#49:Buzz Kill
  20. Python之城市旅游数据分析

热门文章

  1. oracle查询字段当中有空格,oracle 空格字符查询与处理
  2. 未来鸿蒙能搭载oppo手机吗,【喂你播】华为下周发布鸿蒙手机系统;OPPO联合蔚来完成CCC2.0标准数字车钥匙开发...
  3. QT for Android环境搭建与配置
  4. update pods
  5. Yii1.x 国际化三步走
  6. 2022年二级建造师机电工程常用材料及工程设备测试题及答案
  7. python樱花绽放_武汉加油!武大本科生用Python敲出樱花绽放,满屏春天太浪漫
  8. 微服务 —— 消息服务中间件 JMS
  9. Vue 源码之手写Vue Router
  10. linux传递数组到awk,awk从放弃到入门(9):awk数组详解