带Cookies信息操作页面(Selenium)

这篇具有很好参考价值的文章主要介绍了带Cookies信息操作页面(Selenium)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、Cookie介绍

通常在发起请求登入之后,再次发起请求又恢复为未登入状态,即第一次请求的登入信息不会保存至第二次请求中,如果要在第二次请求中共使用第一次的登入信息,这里就需要使用到Cookie。Cookie是用来让服务端记录客户端的相关状态。session可以进行请求的发送,如果请求产生了Cookie,则该Cookie会被自动存储在该session中

二、使用Selenium获取Cookies信息(登入)

selenium可以对页面进行自动化操作,在碰到需要登入信息的时候,一般开始自动化时没有登入信息,可以使用selenium模块提前将登入的相关信息打印出来或者使用文件保存起来,在下一次使用的时候,读取使用该信息,加入进去,在selenium对网页发起请求时,就已经包含了账户信息,具体的操作如下

首先,我们写入一段程序,获取登入信息,这里一般是直接请求到登入界面,使用扫码或某种方式登入,操作完成之后将获取的信息打印出来,或者将信息保存为文件,在下一次使用的时候将读取其文件。这里注意,在打印登入信息之前(Cookies)一定要给定足够的延时,以足够你完成登入操作,如果没有延时或者延时过短,打印信息时可能还是未登入的信息(Cookies)。(很多网站为了安全,获得的Cookies登入信息一般都有一定的时效性,一般不会长期有效

from selenium import webdriver
from selenium.webdriver.common.by import By
import time


browser = webdriver.Chrome()
# 需要请求的网址,这里一般可以直接请求登入界面,接着发出get请求
url = 'https://www.xxx.cn/resources/login.html'
browser.get(url)

# 此时,就是看你怎么登入,要么输入信息登入,要么跳转至某界面扫码登入,这个自行解决
# 我选择扫码登入,此处使用Xpath定位查找点击跳转至扫码登入界面,然后click函数自动点击,就会跳转至Xpath界面,这里直接手动点入跳转也可
login = browser.find_element(By.XPATH, '//*[@id="toolbar_Div"]/div[2]/div[2]/ul/li[2]/a')
login.click()
# 注:此处一定要留够充足的时间,以足够完成登入操作,确保后面获取的Cookies登入信息为登入信息是登入状态的,如果没有下面延时或者延时不充足,可能导致获取的Cookies信息还是未登入的状态,影响后期使用
time.sleep(10)

# 获取登入信息(Cookies),将其打印出来,或者保存为文件
cookies = browser.get_cookies()
print(cookies)

如果将其界面化,这个可以封装为一个函数,将某个按钮绑定该函数,点击时,即可触发,然后完成操作,将登入信息保存为全局变量,在界面上做其他操作时,可使用该全局变量。

三、带Cookies操作页面(Selenium)

这里将上面获取的Cookies信息复制过滤,赋值给下面cookies变量,然后使用add_cookie将其加入,如果操作时切换到了新的窗口,则需要使用switch_to.window切换至新的界面,如果网站随机使用两种方案,可以使用try except使用两种方案进行解析

import selenium.common.exceptions
from selenium import webdriver
from selenium.webdriver.common.by import By
import time


# 首先正常创建对象,对某网址发起请求,这里的请求不包含登入信息
q = webdriver.Chrome()
q.get('https://www.xxx.cn/index.html')
time.sleep(1)

# 这里将上面打印的用户信息(Cookies)复制过来,是一个列的格式,列表里面为字典,使用for循环将cookies一项一项的加入进入
cookies = []
for cookie in cookies:
    q.add_cookie(cookie)
time.sleep(1)

# 接着对需要请求的网站发起请求,此处的请求已经包含了登入信息
q.get('https://www.xxx.cn')

# 接着对该网站操作(如输入、清除、单击等)
star = q.find_element(By.XPATH, '//*[@id="fromStationText"]')   # 定位输入框(此处为Xpath)
star.clear()                                                    # 对定位的输入框清除原有内容
star.send_keys("hello")                                         # 此处对查找到的输入框进行输入hello
runsta = q.find_element(By.XPATH, '//*[@id="search_one"]')      # 定位按钮(此处为Xpath)
runsta.click()                                                  # 对定位的按钮进行单击操作
time.sleep(1)

# 这里如果跳转弹出了新窗口,需要进行如下操作,切换至当前窗口进行操作,否则将会查找不到元素
# 如果在原来的窗口跳转至新的网址,则不需要进行如下操作
currentWin = q.current_window_handle
handles = q.window_handles
for i in handles:
    if currentWin == i:
        continue
    else:
        q.switch_to.window(i)
time.sleep(1)

# 如果要对网址进行批量操作(如获取网址显示的为列表,获取其信息),可以使用for循环
# 部分网站会存在两种方案,反复进入网页对元素进行定位,会发现有两种解析格式,这里可以使用try方式
for i in range(1, 1000, 2):
    # 这里两种不同的解析方案
    try:
        # 方案一
        # 使用XPath定位获取信息并打印
        a = q.find_element(By.XPATH, '/html/body/div[1]/div[9]/div[12]/table/tbody/tr[{}]/td[1]/div/div[1]/div/a'.format(i))
        b = q.find_element(By.XPATH, '/html/body/div[1]/div[9]/div[12]/table/tbody/tr[{}]/td[4]'.format(i))
        print(a.text, b.text)
    except selenium.common.exceptions.NoSuchElementException as e:
        # 方案二
        # 使用XPath定位获取信息并打印
        a = q.find_element(By.XPATH, '/html/body/div[2]/div[8]/div[12]/table/tbody/tr[{}]/td[1]/div/div[1]/div/a'.format(i))
        b = q.find_element(By.XPATH, '/html/body/div[2]/div[8]/div[12]/table/tbody/tr[{}]/td[4]'.format(i))
        print(a.text, b.text)

这里的一系列操作可以封装为函数绑定某个按钮,点击按钮即可触发,cookies使用全局变量,即上面登入时获取的cookies信息

更多selenium操作详情请看https://blog.csdn.net/weixin_46287157/article/details/129149265

四、带Cookies操做页面(session)

可以使用信息直接使用session登入

# 登入的URL
login_url = ''
# 登入带入的参数,如email为账户,pwd为密码,code为验证码
# 这种参数具体的得根据具体的网址,一般会通过一些加密,需要反向解析
data = {
    'email': '',
    'pwd': '',
    'code': ''
}
# 抓取登入后的页面,使用session进行POST请求的发送,session中获取了Cookie
login_page_text = session.post(url=login_url, headers=headers, data=data)

在这也可以使用上面使用selenium获取的Cookies信息,加入到session中,发起请求时已经包含了登入信息

import requests


# selenium获取的Cookies复制过来
cookies = []
# 创建对象并将Cookies信息加入,具体那些键值对得根据具体网址来
session = requests.session()
for cookie in cookies:
    session.cookies.set(cookie['name'], cookie['value'])

# 发起请求,获取网址文件
page = session.get(browser.current_url)
page.encoding = "utf-8"
html = page.text
# 保存源码
with open('./a.html', 'w', encoding='utf-8') as fp:
    fp.write(page.text)

五、自动登入(验证处理)

上面为了方便,登入操作都是手动,也可以将登入操作自动化,只不过一些大网址会比较麻烦,比如需要图片验证码、手机验证码或其他什么方式验证,有些验证可以借助于第三方工具,比如超级鹰等其他第三方平台

1、超级鹰(图片验证码)

超级鹰的基本用法:www.chaojiying.com/about.html
以登入某网站为例,为保证请求页面的验证码和登入的一样,不能做两次请求,可以借助于截图的方式,将页面进行截图,然后截取验证码部分,利用第三方工具进行处理,获取信息或操作后进行登入操作。这里采用的是截图裁剪方式文章来源地址https://www.toymoban.com/news/detail-832541.html

from PIL import Image

# 请求页面全局截图且保存
bro.save_screenshot('a.png')
# 确定验证码坐标(裁剪区域)
code_img_ele = bro.find_element('') # 图片标签
location = code_img_ele.location # 验证码左上角坐标 x y
size = code_img_ele.size # 宽度
# 左上角和右下角位子
rangle = (int(location['x']), int(location['y']), int(location['x']+size['width']), int(location['y']+size['height']))
# 图片裁剪
i = Image.Open('./a.png')
frame = i.crop(rangle)
frame.save('code.png')

到了这里,关于带Cookies信息操作页面(Selenium)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python爬虫——selenium_访问元素信息

    获取元素属性 获取标签名 获取元素文本

    2024年02月13日
    浏览(35)
  • Python爬虫入门系列之Selenium实现动态页面爬取

    在前一篇博客中,我们学习了如何使用多线程优化爬虫程序。但是,如果要爬取的网页是动态生成的或者包含大量JavaScript代码,单纯的静态页面爬取就不足够了。为了解决这个问题,我们可以使用Selenium库来模拟真实的浏览器行为,从而实现动态页面的爬取。 Selenium是一个用

    2024年02月11日
    浏览(59)
  • Python爬虫(二十三)_selenium案例:动态模拟页面点击

    本篇主要介绍使用selenium模拟点击下一页,更多内容请参考:Python学习指南 分享一份Python的学习资料,但由于篇幅有限,完整文档可以扫码免费领取!!! 1)Python所有方向的学习路线(新版) 总结的Python爬虫和数据分析等各个方向应该学习的技术栈。 比如说爬虫这一块,很

    2024年02月04日
    浏览(61)
  • Python爬虫技术之Selenium自动化测试及模拟点击页面爬虫最全知识

    Selenium是一套Web网站的程序自动化操作解决方案(比如点击界面按钮,在文本框中输入文字等操作) Selenium的自动化原理如下 3.1 下载selenium库的命令 3.2 下载谷歌浏览器Chrome对应的驱动 驱动库网址:http://chromedriver.storage.googleapis.com/index.html 注意:根据自己的Chrome版本进行选择

    2024年01月16日
    浏览(75)
  • python网络爬虫selenium打开多窗口与切换页面,附详细答案解析

    time.sleep(2) win2 = driver.window_handles[1] driver.switch_to.window(win2) print(driver.current_url) 关于句柄在列表中的顺序, 建议一般最好只额外打开一个网页,不建议打开更多的网页进行切换。当打开的网页数量超过两个时,句柄列表中的元素分别代表哪个网页,其顺序是不太好确定的。以下

    2024年04月09日
    浏览(79)
  • Python爬虫(4)-Selenium模拟鼠标操作

    在Selenium4.2以后的版本里面鼠标的操作方法都封装在了ActionChains中需要时直接取即可。 使用方法就是调用ActionChains然后传入你需要点击的按钮的位置即可 ActionChains(driver).double_click(f1).perform() perform()的意思就是执行所有ActionChains中的动作 具体的操作方法如下 鼠标单击就是直接

    2024年01月19日
    浏览(52)
  • python爬虫selenium操作下拉框详解

    使用python爬虫的selenium操作网页的下拉框。 以该网站为例:https://www.17sucai.com/pins/demo-show?id=5926 该网页下存在多个可供测试的下拉框。 基本脚手架代码: 定位下拉框(以第一个下拉框为例) Select()方法 不推荐这样定位 选中下拉框,点击 第一个下拉框的可选值如图所示 选择

    2024年02月11日
    浏览(50)
  • 【Python】selenium把cookies传递给requests

    转自:https://www.cnblogs.com/luckiness/p/13406932.html

    2024年02月20日
    浏览(45)
  • python爬虫selenium页面滑动案例,作为一个Python程序员你还不会JetPack

    def up_page(self): time.sleep(1) self.driver.find_element(By.XPATH,‘//*[text()=“下一页”]’).click() def save_page(self, n=1): time.sleep(2) with open(f’第{n}页.html’, ‘w’, encoding=‘utf-8’) as f: f.write(self.driver.page_source) def run(self): try: self.save_page() # 第一页 for n in range(2, 6): # 第二三四五页 self.scroll() s

    2024年04月22日
    浏览(50)
  • 〖Python网络爬虫实战㉛〗- Selenium 的其他操作使用

    订阅:新手可以订阅我的其他专栏。免费阶段订阅量1000+                 python项目实战                  Python编程基础教程系列(零基础小白搬砖逆袭) 说明:本专栏持续更新中,目前专栏免费订阅,在转为付费专栏前订阅本专栏的,可以免费订阅付费专栏,

    2024年02月16日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包