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,文章如有问题请及时提出,加油加油

相关推荐
cch89182 小时前
PHP爬虫框架大比拼
开发语言·爬虫·php
羊小猪~~2 小时前
LLM--大模型快速展示(Gradio)
人工智能·python·大模型·llm·部署·gradio·ai算法
数据知道2 小时前
claw-code 源码详细分析:Hooks + Plugins + Skills——扩展三角里,哪一层该稳定、哪一层该开放?
网络·python·ai·claude code
tryCbest2 小时前
Python之Flask开发框架(第五篇)- 使Flask + Vue 构建前后端分离项目教程
vue.js·python·flask
叹一曲当时只道是寻常2 小时前
Python 飞书开放平台自动化配置工具 feishu-auto 使用教程
python·自动化·飞书
2401_827499992 小时前
python核心语法05-模块
java·前端·python
Lauren_Blueblue2 小时前
第十六届蓝桥杯省赛Python研究生组-C变换数组
python·算法·蓝桥杯·编程基础
yaoxin5211232 小时前
375. Java IO API - 列出目录内容
java·开发语言·python
小陈工2 小时前
2026年4月5日技术资讯洞察:AI商业模式变革、知识管理革命与开源生态反击
开发语言·人工智能·python·安全·oracle·开源