selenium自动化携带cookie模拟登录头歌实践平台并爬取数据
【摘要】
😄需求 爬取白页中全部内容,爬取所有测试集输入输出。
😆 分析
selenium简单向页面发起请求,发现会跳转到登录界面。
所以先需要手动登录一下,获取cookie。然后携带cookie向...
😄需求
爬取白页中全部内容,爬取所有测试集输入输出。
😆 分析
selenium简单向页面发起请求,发现会跳转到登录界面。
所以先需要手动登录一下,获取cookie。然后携带cookie向页面发起请求。
😳 代码+说明
getcookie.py
from selenium import webdriver
import time
import json
# 填写webdriver的保存目录
driver = webdriver.Chrome("..\chromedriver.exe")
# 记得写完整的url 包括http和https
driver.get('https://www.educoder.net/tasks/fctupil8smqo')
# 程序打开网页后20秒内 “手动登陆账户”
time.sleep(20)
with open('cookies.txt','w') as f:
# 将cookies保存为json格式
f.write(json.dumps(driver.get_cookies()))
driver.close()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
需要手动登录,获取cookie,并保存到cookie.txt中
spider.py
import json
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from time import sleep
from lxml import etree
from selenium.webdriver.chrome.options import Options
driver = webdriver.Chrome("..\chromedriver.exe")
driver.get('https://www.educoder.net/tasks/fctupil8smqo')
# 首先清除由于浏览器打开已有的cookies
driver.delete_all_cookies()
with open('cookies.txt','r') as f:
# 使用json读取cookies 注意读取的是文件 所以用load而不是loads
cookies_list = json.load(f)
#将expiry类型变为int
for cookie in cookies_list:
# 并不是所有cookie都含有expiry 所以要用dict的get方法来获取
if isinstance(cookie.get('expiry'), float):
cookie['expiry'] = int(cookie['expiry'])
driver.add_cookie(cookie)
#重新发送请求(这步是非常必要的,要不然携带完cookie之后仍然在登录界面)
driver.get('https://www.educoder.net/tasks/fctupil8smqo')
#sleep等待页面完全加载出来,这一步很关键
sleep(5)
page_text=driver.page_source
tree=etree.HTML(page_text)
#title为文件名称
title=tree.xpath('//*[@id="root"]/div/div/div/div[2]/section[1]/div[1]/h3/@title')[0]
fileName=title+'.txt'
#将任务要求写入文件中
x=tree.xpath('//*[@id="root"]/div/div/div/div[2]/section[1]/div[2]/div[1]//text()')
with open(fileName,'w',encoding='utf-8') as f:
for i in x:
f.write(i)
f.write('\n\n测试集:\n')
#将测试集写入文件中
with open(fileName,'a',encoding='utf-8') as f:
try:
all=tree.xpath('//*[@class="test-case-list"]//ins/text()')
for j in all:
f.write(j+'\n\n')
f.write('\n\n\n')
except:
print('')
- 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
参考博客 这一篇,非常感谢这位大佬
文章来源: blog.csdn.net,作者:开心星人,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/qq_55675216/article/details/122687204
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)