34-自动化补环境和jsdom补环境

本文讲解两种非纯手补环境的方法------自动化和jsdom模块

自动化(包括但不限于selenium)

我们都知道selenium, DP这种自动化可以实现整个浏览器的模拟,所以模拟时会包含整个浏览器的环境,我们可以通过这种来运行js代码直接产生结果,理论可行开始实践:

  • 首先需要将js文件写在html文件中方便selenium访问:
  • 然后写selenium脚本(后面有源代码):
  • 然后更改的第一处就是html文件的文件名(上面图片标注有点问题,同一目录下填文件名即可)第二处这样改------找到加密函数的位置,上一文就已经讲解就是B函数,然后导出即可:
  • 然后运行py就能得到(我没有安装浏览器驱动,所以就不给大家展示结果了)

Selenium代码:

python 复制代码
import os          # 1. 导入操作系统相关模块,用于处理文件路径
import time        # 2. 导入时间模块,用于设置等待时间
from selenium import webdriver  # 3. 从Selenium导入浏览器驱动模块,用于操控Chrome

PRO_DIR = os.path.dirname(os.path.abspath(__file__))  # 4. 获取当前脚本文件所在的目录路径
# __file__是当前脚本的路径,abspath获取绝对路径,dirname取目录部分

def driver_sig(html_file):  # 5. 定义函数,参数是HTML文件名,作用是初始化浏览器并加载页面
    option = webdriver.ChromeOptions()  # 6. 创建Chrome浏览器的配置对象,用于设置启动参数
    option.add_argument('--disable-blink-features=AutomationControlled')  # 7. 禁用Chrome的自动化检测特性,避免被网页识别为Selenium爬虫
    # option.add_argument('headless')  # 8. 注释行:如需无头模式(不显示浏览器窗口),取消注释
    driver = webdriver.Chrome(options=option)  # 9. 根据配置创建Chrome浏览器驱动对象
    driver.get(PRO_DIR + '\\' + html_file)  # 10. 拼接本地HTML文件路径,让浏览器加载该文件(\\是Windows的路径分隔符)
    time.sleep(2)  # 11. 等待2秒,确保页面和JS脚本完全加载
    # sig = driver.execute_script('return window.aaa()')  # 12. 注释行:执行页面中的window.aaa()JS方法,获取返回值
    # print(sig)  # 13. 注释行:打印获取到的JS方法返回值
    return driver  # 14. 返回浏览器驱动对象

html_file = '替换成html文件路径'  # 15. 定义要加载的本地HTML文件名
driv = driver_sig(html_file)  # 16. 调用函数,初始化浏览器并加载HTML文件,得到驱动对象

print(driv.execute_script('return window.get_cookie_sz()'))

下面写一下DrissionPage的吧,让大家看看效果:

源码:

python 复制代码
# DP补环境
import os
import time
from DrissionPage import ChromiumPage

# 获取当前文件所在目录,与原代码PRO_DIR逻辑一致
PRO_DIR = os.path.dirname(os.path.abspath(__file__))
# 初始化浏览器驱动对象
page = ChromiumPage()

def driver_sig(html_file):
    # 拼接本地文件路径并访问,替换原代码的driver.get
    file_path = os.path.join(PRO_DIR, html_file)
    page.get(f'file:///{file_path}')
    # 等待页面加载,与原代码sleep逻辑一致
    time.sleep(2)
    # 原代码返回driver,这里返回DrissionPage的page对象
    # page.quit()
    return page

# 定义HTML文件名称,与原代码一致
html_file = 'xxx'
# 调用函数获取page对象,对应原代码的driv
driv = driver_sig(html_file)
# 执行JS脚本并打印结果,对应原代码的execute_script
print(driv.run_js('return window.get_cookie_sz()'))
page.quit()

这样就拿到cookie加密值了,这种方法只适合救急用或者不考虑效率的时候用

jsdom

最开始是给js前端开发人员使用的,作用是使node能直接测试浏览器里的js代码,这里面封装了常见的浏览器环境(冷门的还需要靠我们逆向工程师自己补啊/(ㄒoㄒ)/~~),先来看一下效果:

这里我们完全没有document这个对象吧,但是就是能使用里面的方法取出文本,因为dom中有document的封装,现在我们来尝试一下原来的案例,初始就是这样:

然后运行:

缺document,刚说了dom中存在,咱就直接这样补:

再运行:

大部分就补上了,然后我们把globalThis也换成dom中的window更贴合浏览器环境:

但是这个值不一定能用,里面有try,我没又让其中的错误报出来

需要注意的是:如果缺location就手动去补,因为需要设置dom而且很多情况下设置不上,其他的就这样补即可(比如:window, navigator)

小结

本文到此就结束了,有这两种方法应急和简单网站处理都可以有方法了,但是不急而且网站还比较难的话就还是需要自己手动补,OK,文章如有问题请及时提出,加油加油

相关推荐
zh15702311 小时前
CSS如何让元素出现时带抖动_利用关键帧定义抖动动画
jvm·数据库·python
AI技术增长11 小时前
Pytorch图像去噪实战(五):FFDNet可控图像去噪实战,用噪声强度图解决不同噪声等级问题
pytorch·python·深度学习
花月C11 小时前
Agent应用开发零基础入门:核心概念、环境配置与首次LLM调用
java·python
【 】42311 小时前
从迭代器到生成器
python·迭代器·生成器
AC赳赳老秦11 小时前
网安工程师提效:用 OpenClaw 实现漏洞扫描报告生成、安全巡检自动化、日志合规审计
java·开发语言·前端·javascript·python·deepseek·openclaw
你数过天上的星星吗11 小时前
Python学习笔记二(函数、类与对象)
笔记·python·学习
四维迁跃11 小时前
如何排查SQL存储过程死锁_分析死锁日志与索引优化
jvm·数据库·python
m0_7411733311 小时前
如何检测SQL注入风险_利用模糊测试技术发现漏洞
jvm·数据库·python
xcbrand11 小时前
餐饮品牌全案公司哪家可靠
运维·python
2401_8463395611 小时前
CSS如何解决Less与CSS兼容性问题_通过配置文件实现平滑过渡与混合开发
jvm·数据库·python