52weiv 发表于 2021-6-30 15:03

【自用】自动填写已知提取码的百度分享

今天早上来写了一个 油猴脚本。用于自动填写百度云盘的提取码。

之前我也使用过其他的油猴脚本来自动获取提取码,感觉不好用,所以按照自己的操作和想法写了一个简单的脚本。

脚本的工作原理:

1. 将固定格式的百度网盘链接复制到浏览器。
2. 获取到浏览器请求的url,需要解码。
3. 解码后获取到百度网盘的url和提取码。
4. 重定向url 并输入提取码。
5. 最后点击提取按钮。

这些本来是可以手动操作的,不过我嫌麻烦就自己写脚本来弄了。本着分享学习的态度发帖,如有问题请联系交流。

使用方法:

1. 固定的格式复制到浏览器。

   ```
   https://pan.baidu.com/s/1DJ9B1vQKwRw7ps_ULwb92g 提取码: t4hp
   或者 不含空格
   https://pan.baidu.com/s/1DJ9B1vQKwRw7ps_ULwb92g提取码:t4hp
   ```
2. 回车等待就能直接打开提取内容。

脚本内容:

```
// ==UserScript==
// @name         获取到请求的url 然后转码,将链接地址和提取码提取出来,然后再自动输入,点击提取。
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description自用
// @AuThor       weiv
// @match      https://pan.baidu.com/*
// @grant      none
// ==/UserScript==

(function() {
    'use strict';

    const code_key = 'bd_get_code'
    const regex_code_str = /提取码[:|:]\s*(\w){4}/
    // 获取到请求的url 然后转码,将链接地址和提取码提取出来,然后再自动输入,点击提取。
    let req = new XMLHttpRequest()
    req.open('GET', document.location, false)
    req.send(null)
    const response_URL = req.responseURL

    const decode_url = decodeURIComponent(response_URL)

    if(isExeistCode(decode_url)) {
      const url_code = getUrlCode(decode_url)
      setLocalStorage(code_key, url_code)

      window.location.href = url_code
    } else {
      const code = getLocalStorage(code_key)
      document.querySelector("#accessCode").value = code
      document.querySelector('.submit-a.g-button-blue-large').click()
    }


    // 判断是否存在提取码。
    function isExeistCode (decode_url) {
      return regex_code_str.test(decode_url)
    }

    // 将解码后的url 进行提取。
    function getUrlCode (decode_url) {
      // 试了一下使用正则表达式提取url 和提取码。 不太方便,所以还是使用截取的方式简单点。
      const bd_url = decode_url.substring(decode_url.indexOf('http'), decode_url.indexOf('提')).trim()

      // 获取到 提取码:XXXX
      const regex_code = /(\w){4}/
      const get_code_str = regex_code_str.exec(decode_url)
      const get_code = regex_code.exec(get_code_str)
      return
    }

    // 将提取码存入缓存。
    function setLocalStorage(setKey, setValue) {

      // 增加元素
      localStorage.setItem(setKey, setValue)
    }

    // 获取缓存的提取码。
    function getLocalStorage(getKey) {

      // 获取元素
      return localStorage.getItem(getKey)
    }

})();
```
内容分享结束。

tianyi1991 发表于 2021-6-30 21:27

学习看看

zhangsir95 发表于 2021-6-30 21:58

大哥这思路,问卷星要怎么搞?自动填写已知答案的那种

52weiv 发表于 2021-7-1 15:31

zhangsir95 发表于 2021-6-30 21:58
大哥这思路,问卷星要怎么搞?自动填写已知答案的那种

我试了试,果然不行,虽然我能选中所有的和填写值,但是每次刷新选项就不一样了,而且有些还是根据选项显示题目的。写得差不多测试的时候才发现白写了。 选项不一样可以通过值匹配来搞定, 但是根据题目选项显示题目的我真没思路了。求解。

tomchenri 发表于 2022-1-8 16:28

https://pan.baidu.com/share/init?surl=LZljUikuDdMxArxgxg-UUw
这个链接不知道提取码,可以帮我看看嘛?谢谢

52weiv 发表于 2022-1-11 16:04

tomchenri 发表于 2022-1-8 16:28
https://pan.baidu.com/share/init?surl=LZljUikuDdMxArxgxg-UUw
这个链接不知道提取码,可以帮我看看嘛? ...

这个我也不知道。
页: [1]
查看完整版本: 【自用】自动填写已知提取码的百度分享