selenium自动化携带cookie模拟登录头歌实践平台并爬取数据

举报
开心星人 发表于 2022/06/29 23:36:25 2022/06/29
【摘要】 😄需求 爬取白页中全部内容,爬取所有测试集输入输出。 😆 分析 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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。