python-selenium-动作链拖拽;cookies处理

2023-11-13

1:动作链拖拽

导入动作链需要的包

from selenium.webdriver import ActionChains

具体步骤

    #1:创建动作链对象,并绑定给浏览器
    action = ActionChains(driver)
    # 2:点击并长按指定标签
    action.click_and_hold(div)
    # perform:使动作链对象立即执行  move_by_offset(x,y)->方向坐标,传入像素
    action.move_by_offset(260, 1).perform()
    # 释放鼠标
    ActionChains(driver).release().perform()

具体代码

from selenium import webdriver
import time
from selenium.webdriver.common.by import By
# 动作链
from selenium.webdriver import ActionChains

driver = webdriver.Chrome()
driver.get("https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable")
driver.implicitly_wait(30)
# 要定位的元素在iframe里面,所以要先进去iframe里
# 进入框架
driver.switch_to.frame(driver.find_element(By.ID, 'iframeResult'))
div = driver.find_element(By.XPATH, '//*[@id="draggable"]')  # 原位置
"""开始动作链---滑动"""


def demo_01():
    """方法1"""
    # 方法1:方法一移动滑块,此方法一瞬间移动过去,不建议使用
    # 执行拖动或者时滑动操作,基于动作链的实现

    # 1:创建动作链对象,并绑定给浏览器
    action = ActionChains(driver)
    # 2:点击并长按指定标签
    action.click_and_hold(div)
    # perform:使动作链对象立即执行  move_by_offset(x,y)->方向坐标,传入像素
    action.move_by_offset(260, 1).perform()
    # #释放动作链对象
    # action.release()
    # 释放鼠标
    ActionChains(driver).release().perform()
    # 切换到弹窗视角
    alert = driver.switch_to.alert
    print(f"弹窗的title是:{alert.text}")
    # 点击确定
    alert.accept()


def demo_02():
    """方法二"""
    # 方法二:按照偏移量进行移动,此刻移动滑块是水平向右移动
    # 创建动作链对象, 并绑定给浏览器,点击并长按指定标签,perform:使动作链对象立即执行
    ActionChains(driver).click_and_hold(div).perform()
    # 偏移量的计算是目标位置x轴的值减去要移动的滑块的x轴的值
    Target = driver.find_element(By.XPATH, '//*[@id="droppable"]')  # 目标值
    source = driver.find_element(By.XPATH, '//*[@id="draggable"]')  # 原位置
    offset = Target.location["x"] - source.location["x"]
    i = 0
    # 模拟缓慢的滑动
    while i <= offset:
        #time.sleep(0.1)   #x的像素不能传的太大,否则补捉不到了
        ActionChains(driver).move_by_offset(10, 0).perform()
        i += 10
    # 释放鼠标
    ActionChains(driver).release().perform()
    # 切换到弹窗视角
    alert = driver.switch_to.alert
    print(f"弹窗的title是:{alert.text}")
    # 点击确定
    alert.accept()
demo_02()
time.sleep(100)




2:selenium关于cookies的处理     

有时候网站需要检查我们的cookies,在遇到了cookies是变化的,复杂的我们不像使用js逆向来处理.

这时候selenium是一个不错的选择

1:我们需要先点击浏览器的开发者工具

 2:name是cookies的键;value是cookies的值

 3:通过的方式来获取cookies,但是发现他的格式不对

json_cookies=driver.get_cookies()
    print(json_cookies)

推荐js格式化代码的网站

https://www.qianbo.com.cn/Tool/Beautify/Js-Formatter.html

4:通过代码把cookies变为字典的形式

 json_cookies=driver.get_cookies()
    dic={}
    for i in json_cookies:
        dic[i["name"]]=i["value"]
    return dic

 这时候cookies的形式为字典

{'Hm_lpvt_9793f42b498361373512340937deb2a0': '1677130919', 'c_channel': '0', 'accessToken': 'avatarUrl%3Dhttps%253A%252F%252Fcdn.static.17k.com%252Fuser%252Favatar%252F13%252F13%252F07%252F99730713.jpg-88x88%253Fv%253D1670556244000%26id%3D99730713%26nickname%3D%25E6%2588%2591%25E9%2580%2581%25E4%25BD%25A0%25E5%2590%25A7123%26e%3D1692682913%26s%3D2c16f129a735fd33', 'c_csc': 'web', 'sajssdk_2015_cross_new_user': '1', '__bid_n': '1867ccae792637bdeb4207', 'FPTOKEN': 'pgOEbtULhdrBkYN6JKu38IOhcWH+wv27c1zLQcXC9LhMgrzoyq+VGwM9vH95NbYjGsQenkKv+cKd6enDTjn0nIvVuK1gsqeo/I1d9wcdj7mk6MbLVHqm64vA0O8Ntq0xA+vbeumE7D8rtYHgoAv//xpgNcZphiJvIcMBtFNVJekWTQoHiQwa6d8FIwSoNwTOBa+hVRwnpgv5bRiR2Fj93XmXlOLB8uc/LNoHU1I1Qapc339/jheUo39eCF8q/QdL5KUPpHLYRjt8pKYxtwmb2zBoJOxFpcKuN7jE63RtqkFKqhImQ5cEkKGPGMY01G2Vno+z3AHyQyFol/EnzkC47fVCx0FyKJB3vX3iADtFmCg3zLfPzZe1lpQfjCWYoEZzT+yKszWpgvLcPMr8aN8JDw==|Ovorl7o/fAalRT01jBlsCYAPBXLwcap3j4turldwt6U=|10|84bb5bd7a7f40d663c436e4ecd06d558', 'Hm_lvt_9793f42b498361373512340937deb2a0': '1677130918', 'sensorsdata2015jssdkcross': '%7B%22distinct_id%22%3A%2299730713%22%2C%22%24device_id%22%3A%221867ccae63c31f-007d7764b986a6-26031951-1327104-1867ccae63d1487%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_referrer%22%3A%22%22%2C%22%24latest_referrer_host%22%3A%22%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%7D%2C%22first_id%22%3A%2259ec2398-235f-4c9b-88bb-f5443b20d802%22%7D', 'GUID': '59ec2398-235f-4c9b-88bb-f5443b20d802'}

注意:不能直接放在请求头里面,因为他现在是字典的形式

   url="https://user.17k.com/ck/author/shelf?page=1&appKey=2406394919"
    headers={
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36",
        'Cookie':cookies
    }
    resp=requests.get(url=url,headers=headers).text

"""不能这么写"""

应该将cookies直接放在request里面

  url="https://user.17k.com/ck/author/shelf?page=1&appKey=2406394919"
    headers={
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36",
        
    }
    resp=requests.get(url=url,headers=headers,cookies=cookies).text

"""应该这么写"""

完整代码

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
from selenium.webdriver.support.select import Select
from selenium.webdriver.chrome.options import Options
import csv
import requests


def selenium_01():
    "完成登录操作"
    #点击登录
    driver.find_element(By.XPATH,'//*[@id="header_login_user"]/a[1]').click()
    #进去ifarm框架里面
    driver.switch_to.frame(driver.find_element(By.XPATH,'/html/body/div[20]/div/div[1]/iframe'))
    #账号
    driver.find_element(By.XPATH,'/html/body/form/dl/dd[2]/input').send_keys("input('请输入你的账号')")
    #密码a
    driver.find_element(By.XPATH, '/html/body/form/dl/dd[3]/input').send_keys("input('请输入你的密码')")
    #点击阅读并同意17k 用户协议
    driver.find_element(By.XPATH, '//*[@id="protocol"]').click()
    #点击登录
    driver.find_element(By.XPATH, '/html/body/form/dl/dd[5]/input').click()

def selenium_02():
    json_cookies=driver.get_cookies()
    dic={}
    for i in json_cookies:
        dic[i["name"]]=i["value"]
    return dic
def response(cookies):
    url="https://user.17k.com/ck/author/shelf?page=1&appKey=2406394919"
    headers={
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36",

    }
    resp=requests.get(url=url,headers=headers,cookies=cookies).text
    print(resp)
def main():
    selenium_01()
    time.sleep(1)
    cookies=selenium_02()
    print(cookies)
    response(cookies)
    time.sleep(100)
if __name__ == '__main__':
    driver = webdriver.Chrome()
    driver.get("https://www.17k.com/")
    driver.implicitly_wait(30)
    main()

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python-selenium-动作链拖拽;cookies处理 的相关文章

随机推荐

  • robot framework 使用四:分层设计和截图以及注意事项

    再说一下目前的主要环境信息和版本 操作系统 win7 64位 python版本 2 7 6 RIDE版本 1 2 3 selenium2library 1 5 0 selenium 2 40 0 pip 1 5 4 setuptools 0
  • 数值计算笔记之数值积分(一)

    目录 0 引言 一 数值积分的积分思想 1 中矩形公式 2 梯形公式 3 辛普森公式 二 求积公式的余项和代数精度 三 插值型求积公式 四 牛顿 柯特斯公式 N C公式 五 复化求积法 1 复化梯形公式 2 复化辛普森公式 要求 n 为偶数
  • 小米解bl锁跳过168小时_xiaomi redmi 红米秒解BL工具分享支持小米红米机型秒解BL跳过168小时

    目前小米的新机 官方风控都默认绑定7天也就是168小时才能解锁BL 部分账号需要绑定15天才能满足条件 导致很多爱玩机的小伙伴被拒门外 并不是所有人都愿意等待官方解锁时候 而跳过168小时解锁 也成为了很多小伙伴希望的事情 本工具来自ROM
  • python程序调优:替换pandas包的Series与DataFrame构造与计算

    在实际部署的时候 使用dataframe的计算效率明显低于numpy 因此在程序中大量运行时避免使用pandas Series与pandas DataFrame及频繁的构造 避免 替换的方法如下 使用numpy ndarry替换pandas
  • 刷题之旅第39站,CTFshow 红包题目8

    感谢ctf show平台提供题目 下载压缩包 看到了两个文件 使用010editor 打开mima png 在末尾处发现 kobe code 这里附上 Admin师傅提供的kobe code对照图 对应着解出来了压缩包密码 OAEBEYTK
  • 单目标跟踪Siam

    一 关于单目标跟踪 本人不了解传统的相关滤波法 所有想法总结仅仅建立在深度学习的基础上 对于单目标跟踪而言一般的解释都是在第一帧给出待跟踪的目标 在后续帧中 tracker能够自动找到目标并用bbox标出 关于SOT single obje
  • 2022年哪些前端技术点会火

    转载于 2022年哪些前端技术点会火 扫地盲僧 原创不易 文章质量很高 个人留存 希望大家支持原作者 2022 年什么会火 什么该学 本文正在参与 聊聊 2022 技术趋势 征文活动 前段时间我发布了一篇关于 2022年前端行业技术发展趋势
  • Caffe (2) SyncedMemory内存管理机制

    在Caffe中 blob是对于上层空间的数据管理存储对象 对于上层来说的话 大部分时候是直接取blob对象的指针来用 如果不考虑GPU的情况下 实际上很简单 就是返回指针就行 但是问题是通常的数据是在GPU和CPU上同时存在 需要两个数据在
  • PLSQL新建用户

    一 打开PLSQL 一般默认用户名 system 密码 二 右侧列表找到Users 右键新建 三 创建用户 名称 口令自定义 剩下的按图 四 角色权限创建connect resource dba 点击应用 五 重新用新账号和口令登陆PLSQ
  • redis的Cacheable注解介绍

    1 引入依赖
  • Webpack 5 新特性

    Webpack 5 在2020年10月正式发布 更新的内容比较多 我们从头梳理下本次更新的核心内容 文章目录 一 构建优化 1 Tree Shaking 删除无用代码 2 合并模块 concatenateModules 3 副作用 side
  • 制度汇编格式怎么生成目录_怎么用word制作标书?大神般操作经验在这里

    怎么用word制作标书 word制作标书是每一个制作标书的制标员 如何用我们常用的办公软件来制作标书呢 除了将必要的材料编写入里面 还需要注意格式 字体等固定排版问题 如果你还是一枚制作标书的新人 请一起来和保标招标网小编学习怎么用word
  • python常用内置库时间,日期与JSON转换

    日期与时间 datetime是Python处理日期和时间的标准库 from datetime import datetime if name main cur date datetime now print cur date print c
  • jenkins使用root账号

    1 修改配置文件 编辑配置文件 vim etc sysconfig jenkins 修改 JENKINS USER JENKINS USER root 2 修改相关文件夹为root权限 chown R root root var lib j
  • 数据仓库-数据分层理论详解

    主题 Subject 是在较高层次上将企业信息系统中的数据进行综合 归类和分析利用的一个抽象概念 每一个主题基本对应一个宏观的分析领域 在逻辑意义上 它是对应企业中某一宏观分析领域所涉及的分析对象 例如 销售分析 就是一个分析领域 因此这个
  • 蓝桥杯2017届C++B组省赛真题 分巧克力

    儿童节那天有K位小朋友到小明家做客 小明拿出了珍藏的巧克力招待小朋友们 小明一共有N块巧克力 其中第i块是Hi x Wi的方格组成的长方形 为了公平起见 小明需要从这 N 块巧克力中切出K块巧克力分给小朋友们 切出的巧克力需要满足 1 形状
  • 1、常用DOS命令大全

    一 DOS DiskOperatingSystem 磁盘操作系统 特点 单任务 单用户系统 使用命令行方式 控制计算机 二 DOS命令行的组成 1 DOS命令行中的基本概念 当前驱动器 当前盘 当前目录 相对路径 绝对路径 2 DOS命令的
  • 基于点云的3D障碍物检测

    基于点云的3D障碍物检测 主要有以下步骤 点云数据的处理 基于点云的障碍物分割 障碍物边框构建 点云到图像平面的投影 点云数据的处理 KITTI数据集 KITTI数据集有四个相机 主要使用第三个相机 序号为02 拍摄的图片 标定参数和标签文
  • I/O管理及监控命令

    一 磁盘原理 简单理解 1 盘片以每分钟数千转到上万转的速度在高速旋转 15K 10K 7 5K 5 2K RPM 2 磁头就能对盘片上的指定位置进行数据的读写操作 3 磁头磁化磁盘记录数据 4 从外到里存储 外快内慢 5 以扇区为单位存储
  • python-selenium-动作链拖拽;cookies处理

    1 动作链拖拽 导入动作链需要的包 from selenium webdriver import ActionChains 具体步骤 1 创建动作链对象 并绑定给浏览器 action ActionChains driver 2 点击并长按指