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

文章介绍了如何利用Selenium的ActionChains模块进行拖拽操作,包括瞬间移动和模拟缓慢滑动两种方式,并展示了处理网页Cookies的方法,如获取、转换成字典格式以及在请求中使用Cookies。
摘要由CSDN通过智能技术生成

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()

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python Selenium 是一套完整的web应用程序测试系统,它包含了测试的录制、编写及运行和测试的并行处理Selenium的核心Selenium Core基于JsUnit,完全由JavaScript编写,因此可以用于任何支持JavaScript的浏览器上。Selenium支持的语言包括C#,Java,Perl,PHP,Python和Ruby。目前,Selenium Web 驱动程序最受Python和C#欢迎。你可以使用Python编写Selenium测试脚本,并且可以直接在大多数现代Web浏览器中运行。 如果你想在PyCharm中使用Python Selenium,你可以按照以下步骤操作: 1. 在PyCharm中新建一个Python文件,自行命名。 2. 导入selenium包,可以使用以下代码:`from selenium import webdriver` 3. 打开Firefox浏览器,可以使用以下代码:`browser = webdriver.Firefox()` 4. 如果需要等待一段时间,可以使用`time.sleep()`方法,比如停留3秒:`time.sleep(3)` 5. 最后,关闭浏览器,可以使用以下代码:`browser.quit()`[3] 这样,你就可以在PyCharm中使用Python Selenium了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [基于PythonSelenium详细教程](https://blog.csdn.net/qq_43125235/article/details/125601564)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [Python selenium基础用法详解](https://blog.csdn.net/m0_63794226/article/details/126447599)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值