18561132990 发表于 2023-9-28 00:02

关于网站python自动化过程验证码解决问题

新人第一次提问,谢谢各位大佬,我在做一个基于selenium的自动化测试软件,遇到了一个网站有验证码,是点击一个按钮有概率程序验证码, const Wt = (Yr,Ar)=>({
      src: Yr,
      isGoblin: Ar,
      rotation: {
            x: randomInt(-25, 26),
            y: randomInt(-25, 26)
      },
      skew: randomInt(-5, 6),
      scale: randomDouble(1, 1.2),
      flip: randomBoolean()
    })
      , Zt = []
      , kr = (Bt ? [...getKeys(CROPS()), ...getKeys(FRUIT()), ...getKeys(COMMODITIES)] : getKeys(CONSUMABLES)).map(Yr=>ITEM_DETAILS[Yr].image)
      , Fr = Bt ? moonSeekers : goblins;
    for (; Zt.length < GOBLIN_COUNT; ) {
      const Yr = randomInt(0, Fr.length);
      Zt.push(Wt(Fr[Yr], !0))
    }
    for (; Zt.length < ITEM_COUNT; ) {
      const Yr = randomInt(0, kr.length);
      Zt.push(Wt(kr[Yr], !1))
    }    return Zt.sort(()=>.5 - Math.random())分析发现关键逻辑在最后一行的return进行了随机,我的想法是如果改掉这个return的随机,那么验证码就可以自动识别到,我试了好多网上的方法,什么本地加载等,都不管用,因为这个脚本所在的JS太大了,40W行代码,本地加载直接卡死,有没有什么方法能实现这个return的替换,替换成 return Zt 即可,谢谢大佬

sai609 发表于 2023-9-28 07:31

api或者sdk

QvQsuipian 发表于 2023-9-28 08:21

使用Selenium执行JavaScript代码来替换返回语句,这样试试?
from selenium import webdriver

# 创建 WebDriver 实例
driver = webdriver.Chrome()

# 打开网页
driver.get("你的网页地址")

# 执行 JavaScript 代码,替换返回语句
script = "return Zt.sort(()=>.5 - Math.random())"# 原始代码
modified_script = "return Zt"# 替换后的代码
driver.execute_script(script.replace(script, modified_script))

# 关闭浏览器
driver.quit()

kof21411 发表于 2023-9-28 10:11

安装插件hook这个Math.random()为固定值就可以

18561132990 发表于 2023-9-28 14:10

QvQsuipian 发表于 2023-9-28 08:21
使用Selenium执行JavaScript代码来替换返回语句,这样试试?
from selenium imp ...

好像不行,我F12看了一下还是原来的return 语句

18561132990 发表于 2023-9-28 14:11

kof21411 发表于 2023-9-28 10:11
安装插件hook这个Math.random()为固定值就可以

大佬能详细说一下吗,第一次做这种,完全不懂

eer123 发表于 2023-9-30 00:39

https://blog.csdn.net/weixin_43411585/article/details/109798452
页: [1]
查看完整版本: 关于网站python自动化过程验证码解决问题