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

相关推荐
2601_9563198810 小时前
2026年零基础学量化:从看懂示例到写清条件和动作
人工智能·python
过期的秋刀鱼!10 小时前
LangChain-D1-模型的工作流程
人工智能·python·langchain
萤火工厂目视化设计11 小时前
智能制造与企业文化目视化浪潮下:中小工厂的机遇与挑战
python·制造
DeepVisionary12 小时前
从GPT-5.6 Sol的Ultrafast模式看推理速度竞赛:750 token/秒背后,Cerebras的晶圆级生意
python·自动化
小白学大数据12 小时前
长周期爬虫的数据一致性:断点续爬 + 事务回滚保障采集质量
开发语言·爬虫·测试工具
leisoo809713 小时前
财报数据怎么排雷本地化Python构建财务异常预警系统
人工智能·python·算法
小柯南敲键盘13 小时前
跨马翻译:跨境电商批量图片翻译与视频字幕一站式工具
人工智能·python·音视频
卷无止境13 小时前
FastAPI Guard 全解析,从概念到工程落地的实战指南
后端·python
卷无止境14 小时前
FastAPI Users 全面解析:概念、原理与工程实战
后端·python
COOLMO研究AI14 小时前
Python 如何在 AI 接口中实现请求幂等性:防止重复提交与重复扣费
人工智能·python·php