selenium自动化携带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()

需要手动登录,获取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('')

参考博客 这一篇,非常感谢这位大佬

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: 好的,以下是一个简单的示例代码: ```python from selenium import webdriver from selenium.webdriver.common.keys import Keys import time # 设置浏览器驱动路径 driver_path = "chromedriver.exe" # 创建 Chrome 浏览器对象 driver = webdriver.Chrome(driver_path) # 打开网页 url = "https://www.example.com/login" driver.get(url) # 找到用户名和密码输入框,并输入信息 username = driver.find_element_by_id("username") password = driver.find_element_by_id("password") username.send_keys("your_username") password.send_keys("your_password") # 模拟点击登录按钮 login_button = driver.find_element_by_id("login_button") login_button.click() # 等待 5 秒钟,等待页面加载完成 time.sleep(5) # 打开用户列表页面 user_list_url = "https://www.example.com/userlist" driver.get(user_list_url) # 获取所有用户信息 user_list = driver.find_elements_by_xpath("//div[@class='user-info']") # 输出用户信息 for user in user_list: print(user.text) # 关闭浏览器 driver.quit() ``` 请注意,这只是一个示例代码,实际应用中可能需要根据具体情况进行修改。同时,为了保护网站和用户隐私,建议在实际使用中遵守网站的规定,并确保自己的行为合法合规。 ### 回答2: Python编写Selenium自动化测试代码可以实现模拟登录爬取用户列表信息。首先,我们需要安装Selenium库,并确保浏览器驱动已安装并配置好。 首先,创建一个Python脚本,导入必要的库和模块。 ``` from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC ``` 接下来,设置浏览器驱动路径并实例化webdriver对象。 ``` driver_path = "/path/to/chromedriver" # 根据实际驱动路径进行更改 driver = webdriver.Chrome(driver_path) ``` 通过webdriver对象可以进行各种页面操作,例如打开登录页面。 ``` driver.get("https://example.com/login") # 替换为实际的登录页面链接 ``` 输入用户名和密码,并点击登录按钮。 ``` username_input = driver.find_element_by_name("username") # 替换为实际的用户名输入框元素 password_input = driver.find_element_by_name("password") # 替换为实际的密码输入框元素 login_button = driver.find_element_by_id("login-button") # 替换为实际的登录按钮元素 # 输入用户名和密码 username_input.send_keys("your_username") # 替换为实际的用户名 password_input.send_keys("your_password") # 替换为实际的密码 # 点击登录按钮 login_button.click() ``` 接下来,等待页面加载完毕,并找到用户列表所在的元素。 ``` # 等待页面加载完毕 wait = WebDriverWait(driver, 10) user_list = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "ul.user-list"))) # 替换为实际的用户列表元素选择器 ``` 最后,通过用户列表元素获取所有用户信息。 ``` users = user_list.find_elements(By.CSS_SELECTOR, "li.user") # 替换为实际的用户元素选择器 # 遍历用户列表并打印用户信息 for user in users: username = user.find_element(By.CSS_SELECTOR, "span.username").text # 替换为实际的用户名元素选择器 email = user.find_element(By.CSS_SELECTOR, "span.email").text # 替换为实际的邮箱元素选择器 print(f"Username: {username}, Email: {email}") ``` 这样,就完成了使用Python编写Selenium自动化测试代码实现模拟登录爬取用户列表信息的过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

开心星人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值