700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > selenium实现QQ空间和b站这些网站的模拟登录

selenium实现QQ空间和b站这些网站的模拟登录

时间:2019-06-01 04:36:20

相关推荐

selenium实现QQ空间和b站这些网站的模拟登录

干了一晚上,对于我这个新手来说太不友好了,要哭了,终于成功了,加油加油,冲冲冲,发布一下给自己留个纪念

我们先说一下思路,我们在使用selenium自动化的时候,其实和你本人打开网站区别是不大的,那么为什么你打开那个网站就可以登录上,因为你携带了cookie,cookie会保存你的登录信息,在你退出网页后再次点击仍然可以登录上,最重要的是,cookie在比较长一段时间类都是不会变化的,如果发生变化了,多半是你的cookie获取的不对。那么根据这点,我们只要拿到正确的cookie然后在我们给网页发送请求的时候携带上去就可以轻松实现登录。

然后我们着手开始准备代码,第一个我们要获取我们的cookie,这里我们需要安装一个插件,Cookie Editor,非常的好用,可以完美的获得cookie,但是因为是第三方的不知道安不安全,如果觉得不咋安全可以去设置里面找到cookie的管理,然后打开所有的cookie保存网页,这样麻烦很多这里就不介绍了,主要讲这个第三方插件

首先进入我们浏览器的扩展部分,edge浏览器的扩展网址:edge://extensions/

进入以后找到获取扩展的那个,然后搜索去获取,获取成功以后这里有一个提示的,可以大概看看

我设置的快捷键是CTRL加上Y,因为这个我不怎么使用,可以设置自己舒服的快捷键,也可以去浏览器右上角打开,也很好

我们登录一个网页以后,然后打开我们的插件,获取我们的cookie

获取完了以后开始思考我们的代码如何写,这里先提供一下我写的

# 实现模拟登录的一个第三方库,完美成功,非常的牛逼,selenium基本上可以解决所有的登录from pymongo import MongoClientimport timeimport requestsimport sys''' 进行模拟登录,需要的参数是url,和cookies_str,一个可以复制,另一个在浏览器上面的插件可以获取,然后轻松登录,最后为了增强它的可移植性,我们增加了driver参数cookies_str这个在浏览器上面ctr+y便可以复制了,然后变成我们的字符串参数'''# 技术点1:给类传递参数class Mndl(object):# 给这个类增加三个参数,记住奥# url和cookies的字符串,后面还需要还要加一个driver,不然可移植性比较差,登录作用不大def __init__(self, *var):try:self.url = var[0]except IndexError:print("错误!!!你没有输入url,cookies_str和driver,请输入它们!!!")# 关闭python所有进程,包括我们的selenium自动化这些sys.exit(0)try:self.cookies_str = var[1]except IndexError:print("错误!!!你没有输入cookies_str和driver,请输入它们!!!")sys.exit(0)try:self.driver = var[2]except IndexError:print("错误!!!你没有输入driver,请输入它!!!")sys.exit(0)# 主要运行的函数,会登录上去,然后面的话我们并不会关闭页面,会继续让你进行其他的操作,只是达到登录的效果def run(self):# 我们自己的报错手段,告诉你哪里有问题,不然你是找不出来的try:cookies_list = self.help_cookies()except Exception as e:print("请输入正确的cookies_str!!!你的都不可以转换,是不是搞错了")print("系统报错点,给你看看", e)sys.exit(0)try:requests.get(self.url)except Exception as e:print("错误!!!确保你输入的url可以被访问!!!")print("系统报错点,给你看看", e)sys.exit(0)try:self.driver.get(self.url)except Exception as e:print("错误!!!你的参数不是自动化的实例!!!请输入正确的driver!!!")print("系统报错点:", e)sys.exit(0)# 删除原有的所有参数,不然就会检测出来这是一个爬虫,因为有些参数多加了,也登录不上self.driver.delete_all_cookies()'''对于一些大厂来说,他们会想办法阻止你一次性提交所有的cookie,让你报错然后提交不了所有的cookie这些我们增加一个try,然后刷新,差不多就可以解决这个问题了'''# 技术点5,解决大厂报错不让你一次性提交cookie的问题for i in cookies_list:# 有些它的url是在不断变化的,也就是说,提交以后是需要刷新的,不然就会告诉你域名不匹配,所以要使用try,保证我们所有的cookie可以提交上去try:self.driver.add_cookie(i)except:# 刷新一下是和get那个url不一样的,刷新它会指定url,然后域名就会不同,靠这个防止自动化,所以我们需要刷新self.driver.refresh()time.sleep(0.5)self.driver.add_cookie(i)time.sleep(3)# 页面刷新self.driver.refresh()# 技术点2,本函数把导入的cookies_str变成一个完美的列表,里面内容都是字典,并且是python格式的# 他还会把这些数据写道我们的数据库里面去,方便我们观察def help_cookies(self):# 因为我们的str里面有一些python无法解析的字符,所以要这样变成一个完美的列表cookies_list = eval(self.cookies_str.replace("false", "False").replace("true", "True"))client = MongoClient("localhost", 27017)db = client["python"]# 这是一个关于cookies的集合,后面去Mongodb里面看看col = db["cookies"]# 删除所有数据先,不然加上之前的数据没法看col.delete_many({})# 写入数据,为什么要这么做呢,因为让它变得有可扩展性,写入以后就可以提取然后换个地方面登录,也不知道有没有用col.insert_many(cookies_list)for cookie in cookies_list:# 技术点3,因为我们的sameSite的值是python无法解析的,所以删掉或者替换变成其他的# 技术点4,我们提交mongodb以后它会增加一些东西,需要删掉del cookie['sameSite'], cookie["_id"]return cookies_list'''学习到的一些技术eval()的使用,之前老师讲过现在终于想起来了,很厉害的用法,没有它基本上就失败了向一个类传递参数,然后使用这些参数'''

虽然写得比较拉跨,还有点小骄傲,但是还是得讲讲我的一个思路。这个可以根据自己的使用环境进行修改的,因为要同时登录两个网站,而且都是url加上cookie的使用,url就是它的登录界面,cookie就是我们携带的登录参数,那么如果我可以对于每一个网站都只输入url加上cookie是不是就可以都实现登录了,非常的轻松,而且理论上是成立的,那么要达到这样的效果,于是我写了一个第三方辅助文件,只要把参数输入进去了,基本上就可以登录上了。

讲解一下我这个第三方文件,我们登录以后肯定是希望能去做一些事情的,而不是啥也干不了,为了增强它的作用性,我们增加一个参数而不是直接在第三方文件里面写代码,那就是driver,selenium的基本用法里面有的,然后我们在我们自己的文件上面创建一个浏览器的实例,然后命名输入,欸嘿,登录以后也可以进行操作了,就很舒服,然后为了增强代码的可扩展性,我打算把它写进mongodb里面去,后面有需要了别人也可以访问到这个cookies,也可以实现模拟登录,但是这样就要多写一些代码,比较麻烦,没有下载pymongo和学习mongodb的好兄弟就修改一下代码,具体就是去掉2,81-88行代码,还有92行代码里面的cookie["_id"],也是可以使用的

这些东西搞好了以后,在同等目录下新建一个文档,然后把url和cookie搞上去,我们就可以开始实现啦,这边是我的一个代码块,可以看看

# 第一次使用自己写的第三方库,模拟登录b站,QQ空间也尝试了一下,成功了import time# 导入我们的第三方库from get_help import Mndlfrom selenium import webdrivercookies_str = '''[{"domain": ".","expirationDate": 1675669981,"hostOnly": false,"httpOnly": false,"name": "_uuid","path": "/","sameSite": "unspecified","secure": false,"session": false,"storeId": "0","value": "A75779EB-4585-5878-3E43-6D32A3D55C1681507infoc","id": 1},{"domain": ".","hostOnly": false,"httpOnly": false,"name": "b_lsid","path": "/","sameSite": "unspecified","secure": false,"session": true,"storeId": "0","value": "81B856C10_17EFE7419A2","id": 2},{"domain": ".","expirationDate": 1675677272,"hostOnly": false,"httpOnly": false,"name": "b_ut","path": "/","sameSite": "unspecified","secure": false,"session": false,"storeId": "0","value": "5","id": 3},{"domain": ".","expirationDate": 1659689909,"hostOnly": false,"httpOnly": false,"name": "bili_jct","path": "/","sameSite": "unspecified","secure": false,"session": false,"storeId": "0","value": "a3b2fd3a87c83edcd60706d0e065a388","id": 4},{"domain": ".","expirationDate": 1676361767,"hostOnly": false,"httpOnly": false,"name": "blackside_state","path": "/","sameSite": "unspecified","secure": false,"session": false,"storeId": "0","value": "1","id": 5},{"domain": ".","expirationDate": 1647533178,"hostOnly": false,"httpOnly": false,"name": "bp_video_offset_1886803835","path": "/","sameSite": "unspecified","secure": false,"session": false,"storeId": "0","value": "627486273749365200","id": 6},{"domain": ".","expirationDate": 1738746918,"hostOnly": false,"httpOnly": false,"name": "buvid_fp","path": "/","sameSite": "unspecified","secure": false,"session": false,"storeId": "0","value": "1c8c7dbd98c2c133528a0cc10c550eda","id": 7},{"domain": ".","expirationDate": 1675674879,"hostOnly": false,"httpOnly": false,"name": "buvid_fp_plain","path": "/","sameSite": "unspecified","secure": false,"session": false,"storeId": "0","value": "undefined","id": 8},{"domain": ".","expirationDate": 1675669979,"hostOnly": false,"httpOnly": false,"name": "buvid3","path": "/","sameSite": "unspecified","secure": false,"session": false,"storeId": "0","value": "A95BACD3-53CB-3603-68EE-66D2B733716B80619infoc","id": 9},{"domain": ".","expirationDate": 1738741987,"hostOnly": false,"httpOnly": false,"name": "buvid4","path": "/","sameSite": "unspecified","secure": false,"session": false,"storeId": "0","value": "02D5CC9B-3352-A632-5E86-31182806CC8587874-02615-B1501ZPp4rPBpvbG1w4m6Q%3D%3D","id": 10},{"domain": ".","expirationDate": 1676368449,"hostOnly": false,"httpOnly": false,"name": "CURRENT_BLACKGAP","path": "/","sameSite": "unspecified","secure": false,"session": false,"storeId": "0","value": "0","id": 11},{"domain": ".","expirationDate": 1676476538,"hostOnly": false,"httpOnly": false,"name": "CURRENT_FNVAL","path": "/","sameSite": "unspecified","secure": false,"session": false,"storeId": "0","value": "4048","id": 12},{"domain": ".","expirationDate": 1659689909,"hostOnly": false,"httpOnly": false,"name": "DedeUserID","path": "/","sameSite": "unspecified","secure": false,"session": false,"storeId": "0","value": "1886803835","id": 13},{"domain": ".","expirationDate": 1659689909,"hostOnly": false,"httpOnly": false,"name": "DedeUserID__ckMd5","path": "/","sameSite": "unspecified","secure": false,"session": false,"storeId": "0","value": "685099826b0c2de5","id": 14},{"domain": ".","expirationDate": 1675674878,"hostOnly": false,"httpOnly": false,"name": "fingerprint","path": "/","sameSite": "unspecified","secure": false,"session": false,"storeId": "0","value": "1c8c7dbd98c2c133528a0cc10c550eda","id": 15}]'''url = "/"driver = webdriver.Edge(executable_path="D:/python/学习/selenium自动化学习/msedgedriver")mndl = Mndl(url, cookies_str, driver)mndl.run()time.sleep(10)

cookies_str就是我复制下来的cookie,是不是特别多,不过特别好用。主要奥,要加上三引号,这样就不会报错啦,你们看到的这个我修改过了一些值,然后你们就登录不了我的b站啦,要登录QQ空间也是这样,把url和cookie_str换了就可以。我在我的第三方文件里面写了很多的注释来方便理解,也方便我自己回忆

基本一些网站都可以模拟登录上了,非常的不容易,大家有兴趣也可以一起交流交流,说实在的,我现在还不知道爬虫爬取视频是怎么弄的,获取响应下载以后就是无法播放,而且好多视频都是断断续续的,不知道怎么办,you-get库试过了,但是报错,估计得后面自己修改一下里面的一些代码了,哎,加油加油,致敬每一个不甘平凡的自己。

冲冲冲!!!

“原谅我这一生放荡不羁爱自由,也会怕有一天会跌倒~~~,背弃了理想,谁人都阔以,也会怕哪天只你共我~~~”

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。