python—全文上下查找

Python54

python---全文上下查找

原创

夕陌©著作权

文章标签 html 导包 参数说明 文章分类 Python 后端开发

©著作权归作者所有:来自51CTO博客作者夕陌的原创作品,请联系作者获取转载授权,否则将追究法律责任

''' drag_and_drop(source,target):拖动到某个元素然后松开,属于ActionChains类 参数说明:      source:鼠标拖动的原始元素      target:鼠标拖动到另一个元素的位置    需求:    进入爱卡汽车首页    窗口最大化    定位原始元素位置:XCAR爱卡    页面需要滑动到的元素位置:爱咖号    点击爱咖号链接,测试爱咖号点击功能    退出浏览器'''# 导包from selenium import webdriverfrom selenium.webdriver.common.action_chains import ActionChains# 设置时间import time# 浏览器设置,网页设置driver = webdriver.Chrome()driver.get("https://www.xcar.com.cn")# 爱卡窗口最大化driver.maximize_window()# 设置进入下一步时间time.sleep(1)# 定位元素初始位置:XCAR爱卡source=driver.find_element_by_xpath('//*[@id="totop"]/div/a')# 设置进入下一步时间time.sleep(2)# 定位查询元素位置:爱咖号target=driver.find_element_by_xpath("/html/body/div[1]/div[13]/div[1]/div[2]/h1/a[1]")#ActionChains调用driver,从爱卡log拖到到爱咖号,执行所有元素ActionChains(driver).drag_and_drop(source,target).perform()# 进入下一步time.sleep(3)# 点击链接driver.find_element_by_xpath("/html/body/div[1]/div[13]/div[1]/div[2]/h1/a[1]").click()# 进入下一步time.sleep(3)# 退出浏览器driver.quit()
  • 收藏
  • 评论
  • *举报

上一篇:python---滚动条滑动

下一篇:python---网页全文/window.scrollTo(xpos,ypos)

Original: https://blog.51cto.com/u_15722979/5485159
Author: 夕陌
Title: python---全文上下查找



相关阅读1

Title: 【JS 逆向百例】Ether Rock 空投接口 AES256 加密分析

python—全文上下查找

关注微信公众号:K哥爬虫,持续分享爬虫进阶、JS/安卓逆向等技术干货!

声明

本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!

逆向目标

  • 目标:Ether Rock(一种数字货币)空投接口 AES256 加密分析
  • 主页: aHR0cHM6Ly9ldGhlcnJvY2submV0L2FpcmRyb3Av
  • 接口: aHR0cHM6Ly9ldGhlcnJvY2submV0L2FpcmRyb3Atc3VibWl0
  • 逆向参数:Form Data: content: U2FsdGVkX1/XnffSPZONOHb... key: jrwBwX2ll38bu/FFql+bAUYrRG8Ij...

逆向分析

来到空投页面,随便输入一个 ETH 钱包地址,点击提交,可抓包到提交接口,POST 请求,Form Data 里 content 和 key 参数均经过了加密处理,如下图所示:

python—全文上下查找

老方法,尝试直接搜索,结果很多,不利于快速定位,XHR 断点,很容易定位到加密位置,如下图所示:

python—全文上下查找

一步一步分析,首先定义了 content 对象:

var content={
    address:$(this).find('input[name=address]').val(),
    ref:$(this).find('input[name=ref]').val(),
    uuid:uuid,
    tz:tz,
    tz_offset:tz_offset,
    screen:window.screen.width+'x'+window.screen.height+'x'+window.screen.colorDepth,
    user_agent:navigator.userAgent,
    cpu:navigator.hardwareConcurrency,
    lang:navigator.language||navigator.userLanguage,
};

address 是钱包地址,ref、uuid 为空,tz 是时区,tz_offset 是时区偏移量,即当前时区与格林尼治标准时间(GMT)的差,screen 是屏幕相关信息,user_agent 是浏览器信息,cpu 是处理器数量,lang 是语言。这些值除了 address 以外都可以固定。

接下来定义了一个 key: var key=random_string(36);,跟进 random_string() 方法,可以看到是进行了一些取随机值和幂运算,可以直接 copy 下来,如下图所示:

python—全文上下查找

接着将定义的 content 和生成的 key 进行了一个叫做 AES256 的加密: content=AES256.encrypt(JSON.stringify(content),key); 这里 AES256 一般是指的密钥长度为 32 bytes(256 bit / 8)的 AES 加密,但是不要被名称迷惑,我们跟进去看看:

python—全文上下查找

python—全文上下查找

可以看到实际上是调用了 h.AES.encrypt() 方法,往上看这个 h,可以看到是引用了 node-cryptojs-aes,支持 AES 对称密钥加密,这里就比较简单了,我们在本地也直接引入这个库即可,至此,content 的加密方式就找到了。

接下来看 key 值,这个就更简单了,很明显用的是 jsencrypt 库,对原来生成的 36 位字符串的 key 进行了 RSA 加密,同样在本地直接引用库即可。

python—全文上下查找

完整代码

GitHub 关注 K 哥爬虫,持续分享爬虫相关代码!欢迎 star !https://github.com/kgepachong/

以下只演示部分关键代码,不能直接运行! 完整代码仓库地址:https://github.com/kgepachong/crawler/

JavaScript 加密代码

function randomString(N) {
    if (!parseInt(N, 10)) N = 6;
    var rs = Math.floor(Math.pow(36, N) * Math.random()).toString(36);
    return (Math.pow(10, N) + rs).substr(-N);
}

var h = require("node-cryptojs-aes").CryptoJS
    , p = {
    stringify: function (b) {
        var e = h.enc.Hex.parse(b.salt.toString()).toString(h.enc.Latin1);
        b = b.ciphertext.toString(h.enc.Latin1);
        return h.enc.Latin1.parse("Salted__" + e + b).toString(h.enc.Base64)
    },
    parse: function (b) {
        b = h.enc.Base64.parse(b).toString(h.enc.Latin1);
        if ("Salted__" !== b.substr(0, 8))
            throw Error("Error parsing salt");
        var e = b.substr(8, 8);
        b = b.substr(16);
        return h.lib.CipherParams.create({
            ciphertext: h.enc.Latin1.parse(b),
            salt: h.enc.Latin1.parse(e)
        })
    }
};

var e = randomString(36);

function getContent(address) {
    var b = JSON.stringify({
        "address": address,
        "ref": "",
        "uuid": "",
        "tz": "Asia/Shanghai",
        "tz_offset": 8,
        "screen": "1920x1080x24",
        "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36",
        "cpu": 8,
        "lang": "zh"
    })
    return h.AES.encrypt(b, e, {
        format: p
    }).toString()
}

function getKey() {
    JSEncrypt = require("jsencrypt")
    var crypt = new JSEncrypt();
    var pub = [
        '-----BEGIN PUBLIC KEY-----',
        'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDVmYQhCYTnnkTPRMI5Ad3vfad9',
        'lhjzOU92FZ3reUiN/vmqP/wC1DKKExYDsqa+w5xBP0AjGkfDWk3q4PlWu0UsBGZx',
        '62Gvt0ds75u8FnmLv+ufMimF4962/9Lx7uyh9g1H3/ze5ZXscWYy3gtts9d2Ga0R',
        'pl0X49Cz0JhYYicuGwIDAQAB',
        '-----END PUBLIC KEY-----',
    ];
    crypt.setPublicKey(pub.join('\n'));
    key = crypt.encrypt(e);
    return key
}

function getContentAndKey(address) {
    result = {
        "key": getKey(),
        "content": getContent(address)
    }
    return result
}

// 测试样例
// console.log(getContentAndKey("xxxxxxxxxxxxxxxx"))

Python 代码

==================================
--*-- coding: utf-8 --*--
@Time    : 2021-11-24
@Author  : 微信公众号:K哥爬虫
@FileName: airdrop_submit.py
@Software: PyCharm
==================================

import execjs
import requests

def get_content_and_key(address):
    with open("get_content_and_key.js", encoding="utf-8") as f:
        ether_rock_js = f.read()
    content_and_key_dict = execjs.compile(ether_rock_js).call('getContentAndKey', address)
    return content_and_key_dict

def airdrop_submit(content_and_key_dict):
    submit_url = "脱敏处理,完整代码关注 GitHub:https://github.com/kgepachong/crawler"
    headers = {
        "Accept": "text/html, */*; q=0.01",
        "Accept-Language": "zh,zh-CN;q=0.9,en-US;q=0.8,en;q=0.7",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36",
        "X-Requested-With": "XMLHttpRequest",
        "Host": "脱敏处理,完整代码关注 GitHub:https://github.com/kgepachong/crawler",
        "Origin": "脱敏处理,完整代码关注 GitHub:https://github.com/kgepachong/crawler",
    }
    data = {
        "content": content_and_key_dict["content"],
        "key": content_and_key_dict["key"]
    }
    response = requests.post(url=submit_url, data=data, headers=headers)
    print(response.text)

def main():
    address = input("请输入ETH钱包地址领取空投: ")
    content_and_key_dict = get_content_and_key(address)
    airdrop_submit(content_and_key_dict)

if __name__ == '__main__':
    main()

python—全文上下查找

Original: https://www.cnblogs.com/ikdl/p/15599297.html
Author: K哥爬虫
Title: 【JS 逆向百例】Ether Rock 空投接口 AES256 加密分析

相关阅读2

5</span

Title: JS_简单的效果-鼠标移动、点击、定位元素、修改颜色等

  1 <!DOCTYPE html>
  2 <html lang="en">
  3 <head>
  4     <meta charset="UTF-8">
  5     <title>Titletitle>
  6 head>
  7 <body>
  8     <p id="p1">p>
  9     <h1 id="header">h1>
 10     <img id="image" src="landscape1.jpg" width="160" height="120">
 11     <hr>
 12     <p id="p2">Hello World!p>
 13     <p id="p3">Hello World!p>
 14     <button type="button" onclick="document.getElementById('p2').style.color = 'red'">点击改变上面的Hello World!的颜色button>
 15     <input type="button" value="隐藏文本" onclick="document.getElementById('p2').style.visibility='hidden'"/>
 16     <input type="button" value="显示文本" onclick="document.getElementById('p2').style.visibility='visible'"/>
 17
 18     <hr>
 19     <button id="myBtn">点这里button>
 20     <p id="demo">p>
 21     <hr>
 22     <input type="text" id="fname" onchange="myFunction()" placeholder="离开输入框后,小写字母转为大写字母">
 23     <hr><h1>鼠标放在元素上,改变内容h1>
 24     <div onmouseover="mOver(this)" onmouseout="mOut(this)" style="background-color: green;width: 120px;height: 30px;padding: 40px;">鼠标移动上面div>
 25
 26     <hr><h1>实例使用 addEventListener() 方法在同一个按钮中添加多个事件h1>
 27     <button id="myBtn1">点我改变button>
 28     <p id="demo1">不同的事件,不同的改变p>
 29
 30     <hr><h1>添加和移除元素(节点)h1>
 31         <div id="div1">
 32             <p id="p4">这是一个段落p>
 33         div>
 34     <hr><h1>修改所有 < p > 元素的背景颜色h1>
 35         <p>点击按钮修改p元素的背景颜色p>
 36         <button onclick="myFunction4()">点击改变p元素颜色button>
 37
 38
 39     <script>
 40         document.write(Date());//绝对不要在文档(DOM)加载完成之后使用 document.write()。这会覆盖该文档
 41         document.getElementById("p1").innerHTML = "新文本!";//改变 HTML 元素的内容
 42         document.getElementById("header").innerHTML = "新标题!";
 43         document.getElementById("image").src = "landscape.jpg";//改变了  元素的 src 属性
 44         //改变 

元素的样式

45 document.getElementById("p3").style.color = "blue"; 46 document.getElementById("p3").style.fontFamily = "Arial"; 47 document.getElementById("p3").style.fontSize = "larger"; 48 49 document.getElementById("myBtn").onclick = function () {displayDate()}; 50 function displayDate() { 51 document.getElementById("demo").innerHTML=Date(); 52 } 53 function myFunction() { 54 var x = document.getElementById("fname"); 55 x.value = x.value.toLocaleUpperCase(); 56 } 57 function mOver(obj) { 58 obj.innerHTML = "谢谢"; 59 obj.style.color = "yellow" 60 61 } 62 function mOut(obj) { 63 obj.innerHTML = "你的鼠标已离开"; 64 obj.style.color = "white" 65 } 66 67 var x = document.getElementById("myBtn1"); 68 x.addEventListener("mouseover",myFunction1); 69 x.addEventListener("click",myFunction2); 70 x.addEventListener("mouseout",myFunction3); 71 function myFunction1() { 72 document.getElementById("demo1").innerHTML += "鼠标放上来了
"; 73 document.getElementById("demo1").style.color = "blue" 74 } 75 function myFunction2() { 76 document.getElementById("demo1").innerHTML +="点击了鼠标
"; 77 document.getElementById("demo1").style.color = "red" 78 } 79 function myFunction3() { 80 document.getElementById("demo1").innerHTML +="鼠标移走了
"; 81 document.getElementById("demo1").style.color = "black" 82 } 83 window.addEventListener("resize",function () {//重置浏览器的窗口触发 "resize" 事件句柄 84 document.getElementById("demo1").innerHTML = Math.random(); 85 }); 86 87 var para = document.createElement("p");//用于创建

元素

88 var node = document.createTextNode("这是一个新的段落");//

元素创建一个新的文本节点

89 para.appendChild(node);//将文本节点添加到

元素中

90 var element=document.getElementById("div1");//查找已存在的元素 91 element.appendChild(para);//在一个已存在的元素中添加 p 元素 92 var child = document.getElementById("p4"); 93 element.insertBefore(para,child);//将新元素添加到开始位置 94 95 function myFunction4() { 96 var myCollection = document.getElementsByTagName("p"); 97 for(var i = 0; i<myCollection.length; i++){ 98 myCollection[i].style.color = "red"; 99 } 100 } 101 102 103 script> 104 body> 105 html>

Original: https://www.cnblogs.com/chunfang/p/13490143.html
Author: 白月如初12138
Title: JS_简单的效果-鼠标移动、点击、定位元素、修改颜色等

相关阅读3

Title: 居然长得的还没一只熊好看?用Python做一个颜值检测,结果就离了大谱

准备工作

在写代码之前,你需要先在Baidu开发者平台申请权限,步骤如下:

登录百度智能云

  • https://cloud.baidu.com/?from=console,没有Baidu账号的注册一个
  • 第一次进入会有这样一个页面,你自己随意填
    python—全文上下查找

; 通过界面右上角进入控制台

进入控制台后点击左上角的菜单栏

; 选中产品服务

点击创建应用

  • 应用名称随便填
  • 接口选择默认
  • 应用归属选个人
  • 应用描述随便填
  • 然后点击立即创建
    python—全文上下查找

; 创建完毕后点击返回应用列表

重点点击领取免费资源
python—全文上下查找

进行实名认证后领取服务类型里面的所有内容

实名认证需要一定时间
python—全文上下查找

; 领取完毕之后回到应用列表

python—全文上下查找
复制API Key和Secret Key里的内容,用于后期的接口认证

先去要一些美女的照片素材回来做颜值检测

开发环境

  • Python 3.8
  • Pycharm 2021.2
  • 会使用API接口 百度云接口

模块使用

  • requests >>> pip install requests
  • tqdm >>> pip install tqdm
  • os
  • base64

第一个阶段 去采集主播照片数据

请求数据

url = f'https://www.huya.com/cache.php?m=LiveList&do=getLiveListByPage&gameId=2168&tagAll=0&page=1'
# headers 请求头 伪装Python的代码 不被识别出来是爬虫程序...

# headers 是一个字典数据类型
headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36'
}
# 通过requests模块去对url地址发送请求
response = requests.get(url=url, headers=headers)

解析数据,提取我们想要数据内容,主播名字,主播封面图url地址

# json数据提取内容 根据冒号左边的内容 提取冒号右边内容
data_list = response.json()['data']['datas']
for index in data_list:
    # pprint.pprint(index)
    name = index['nick']
    img_url = index['screenshot']

翻页

for page in range(1, 11):
    url = f'https://www.huya.com/cache.php?m=LiveList&do=getLiveListByPage&gameId=2168&tagAll=0&page={page}'

保存图片数据内容

img_content = requests.get(url=img_url, headers=headers).content
# 'img\\' 文件路径 name 文件名字 '.jpg' 文件后缀 >>> 文件名
# mode 保存方式 wb 二进制模式写入
# as 重命名 为 f
filename = 'img_1\\'
if not os.path.exists(filename):
    os.mkdir(filename)

with open(filename + name + '.jpg', mode='wb') as f:
    f.write(img_content) # 写入数据
    print('正在保存: ', name)

颜值检测

调用接口进行识别

def get_beauty(img_base64):
    host = 'https://aip.baidubce.com/oauth/2.0/token'
    data = {
        'grant_type': 'client_credentials',
        'client_id': 'vXONiwhiVGlBaI2nRRIYLgz5',
        'client_secret': 'ouZMTMuCGLi7pbeg734ftNxn9h3qN7R4'
    }
    response = requests.get(url=host, params=data)
    token = response.json()['access_token']
    # print(token)
    '''
    人脸检测与属性分析
    '''
    request_url = f"https://aip.baidubce.com/rest/2.0/face/v3/detect?access_token={token}"
    params = {
        "image": img_base64,  # 需要传递 图片 base64
        "image_type": "BASE64",
        "face_field": "beauty"
    }
    headers = {'content-type': 'application/json'}
    response = requests.post(request_url, data=params, headers=headers)
    try:
        beauty = response.json()['result']['face_list'][0]['beauty']
        return beauty
    except:
        return '识别失败'

获取所有图片,进行排名

lis = []
files = os.listdir('img_1\\')
print('正在识别人脸, 颜值检测中, 请稍后.....')
for file in tqdm(files):
    img_file = 'img_1\\' + file
    img_name = file.split('.')[0]
    # print(img_file)
    f = open(img_file, mode='rb')  # 读取一张图片内容
    img_base64 = base64.b64encode(f.read())
    beauty = get_beauty(img_base64)
    if beauty != '识别失败':
        dit = {
            '主播': img_name,
            '颜值': beauty,
        }
        lis.append(dit) # 把字典添加到空列表里面
    # print(f'{img_name}颜值评分是{beauty}')

lis.sort(key=lambda x:x['颜值'], reverse=True)
num = 1
# 前10张照片的颜值排名
for index in lis:
    print(f'颜值排名第{num}的是{index["主播"]}, 颜值评分是{index["颜值"]}')
    num += 1

看看排名情况

前三名

emmm。。。。。。

; 然我看来看看最后三名

python—全文上下查找
我不服,最后一名居然输给了一只熊和一个男的,而且才得22分?
python—全文上下查找
看了下官方的文档,最后一名可能是因为手挡住了脸部,但被一只熊给打败了,就离谱

Original: https://www.cnblogs.com/qshhl/p/15775020.html
Author: 松鼠爱吃饼干
Title: 居然长得的还没一只熊好看?用Python做一个颜值检测,结果就离了大谱