李恒道 发表于 2021-8-19 09:21:38

cxxjackie 发表于 2021-8-18 23:52
查了一下,`GM_xmlhttpRequest`确实支持同步:

```javascript


{:4_86:}ggnb...冷知识又增加了

木羊羽 发表于 2021-8-19 09:31:17

李恒道 发表于 2021-8-18 21:47
使用的时候
async function UploadTextToAliYunpan(text) {
    await UploadTextBin(createurl, text)


// ==UserScript==
// @name         bt搜索
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description视频自动点赞,网页自动宽屏播放
// @author       木羊羽
// @include       *
// @require      https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js
// @run-at       document-body
// @grant      GM_xmlhttpRequest
// ==/UserScript==

(function () {

    let header = {
      'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
      'accept-encoding': 'gzip, deflate, br',
      'accept-language': 'zh-CN,zh;q=0.9',
      'cookie': 'JSESSIONID=0B904B22B2D367022FCE51C1104E25E3; aywcUid=P5R6Nrycwm_20210819090408; tet=1629338648883; tetm=29100',
      'dnt': '1',
      'referer': 'https://skrbtba.xyz/',
      'sec-fetch-dest': 'document',
      'sec-fetch-mode': 'navigate',
      'sec-fetch-site': 'same-origin',
      'sec-fetch-user': '?1',
      'upgrade-insecure-requests': '1',
      'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
    }


    let content = $($('.tpc_cont'))
    let flag = content.find('a:even').css('color', 'red')
    let reg = /【影片名称】([\s\S]*?)<br>/g
    let title_list = content.html().match(reg)

    for (let i = 0; i < flag.length; i++) {
      let keywords = title_list.replace('【影片名称】', '')
      keywords = keywords.replace(':', '')
      keywords = keywords.replace('<br>', '')
      let search_url = `https://iskrbt08.xyz/search?keyword=${keywords}`
      // console.log(`开搜索【${url}】`)


      GM_xmlhttpRequest({
            method: 'GET',
            url: search_url,
            headers: header,
            synchronous: true,
            onload: function (response) {

                let data_list = []
                let doc = $(response.responseText)
                console.clear()
                console.log(`搜索页url【${search_url}】`)
                console.log(`搜索页请求头【${header.referer}】`)
                // console.log(response.responseText)
                let search_results = $(doc.find('.list-unstyled'))
                let count = search_results.length


                if (doc.find('.sr-only').length) {

                  console.log('【【【【【【更新cookie】】】】】】')
                } else if (count === 0) {

                } else {
                  count <= 5 ? count : count = 5
                  for (let i = 0; i < count; i++) {
                        let title = $(search_results).children('li').innerText
                        let info = $(search_results).children('li').innerText
                        let href = 'https://skrbtaa.xyz/' + $($(search_results).children('li')).children('a').attr("href")
                        data_list = title
                        data_list = info
                        data_list = href
                  }


                  for (let k = 0; k < data_list.length; k = k + 3) {
                        // console.log(`${data_list} ${data_list}`)
                        header.referer = search_url

                        let content_url = data_list


                        GM_xmlhttpRequest({
                            method: 'GET',
                            url: content_url,
                            headers: header,
                            synchronous: true,
                            onload: function (response) {

                              let doc = $(response.responseText)
                              // console.log(response.responseText)
                              // let doc = $('html')
                              try {
                                    data_list.splice(k + 3, 0, $(doc.find('.list-unstyled')).children('li').innerText.match(/{40,40}$/))
                              }

                              catch (err) {
                                    console.log(header.referer)
                                    // console.log(response.responseText)
                                    return console.log(`出错啦【${err.message}】`)
                              }


                              console.log(data_list)

                              $(flag).after(`<br>${data_list} ${data_list} ${data_list}`)

                              header.referer = 'https://skrbtba.xyz/'


                            }
                        })


                  }
                }


            }
      })
    }
})()


我需要使用GM_xmlhttpRequest请求搜索关键词,获取搜索结果列表网页的数据,然后再次使用GM_xmlhttpRequest请求具体的搜索结果。需要在GM_xmlhttpRequest中嵌套GM_xmlhttpRequest,但是由于GM_xmlhttpRequest是异步的,将会导致第二个GM_xmlhttpRequest的请求头无法正确修改。我之前尝试了新建一个包含GM_xmlhttpRequest的函数,使用
async和await语法糖,但是在GM_xmlhttpRequest中的数据无法传出,我哭了{:4_115:}{:4_115:}

木羊羽 发表于 2021-8-19 09:32:03

脚本体验师001 发表于 2021-8-18 20:52
https://www.liaoxuefeng.com/wiki/1022910821149312/1023024413276544
http://www.ruanyifeng.com/blog/20 ...

// ==UserScript==
// @name         bt搜索
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description视频自动点赞,网页自动宽屏播放
// @author       木羊羽
// @include       *
// @require      https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js
// @run-at       document-body
// @grant      GM_xmlhttpRequest
// ==/UserScript==

(function () {

    let header = {
      'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
      'accept-encoding': 'gzip, deflate, br',
      'accept-language': 'zh-CN,zh;q=0.9',
      'cookie': 'JSESSIONID=0B904B22B2D367022FCE51C1104E25E3; aywcUid=P5R6Nrycwm_20210819090408; tet=1629338648883; tetm=29100',
      'dnt': '1',
      'referer': 'https://skrbtba.xyz/',
      'sec-fetch-dest': 'document',
      'sec-fetch-mode': 'navigate',
      'sec-fetch-site': 'same-origin',
      'sec-fetch-user': '?1',
      'upgrade-insecure-requests': '1',
      'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
    }


    let content = $($('.tpc_cont'))
    let flag = content.find('a:even').css('color', 'red')
    let reg = /【影片名称】([\s\S]*?)<br>/g
    let title_list = content.html().match(reg)

    for (let i = 0; i < flag.length; i++) {
      let keywords = title_list.replace('【影片名称】', '')
      keywords = keywords.replace(':', '')
      keywords = keywords.replace('<br>', '')
      let search_url = `https://iskrbt08.xyz/search?keyword=${keywords}`
      // console.log(`开搜索【${url}】`)


      GM_xmlhttpRequest({
            method: 'GET',
            url: search_url,
            headers: header,
            synchronous: true,
            onload: function (response) {

                let data_list = []
                let doc = $(response.responseText)
                console.clear()
                console.log(`搜索页url【${search_url}】`)
                console.log(`搜索页请求头【${header.referer}】`)
                // console.log(response.responseText)
                let search_results = $(doc.find('.list-unstyled'))
                let count = search_results.length


                if (doc.find('.sr-only').length) {

                  console.log('【【【【【【更新cookie】】】】】】')
                } else if (count === 0) {

                } else {
                  count <= 5 ? count : count = 5
                  for (let i = 0; i < count; i++) {
                        let title = $(search_results).children('li').innerText
                        let info = $(search_results).children('li').innerText
                        let href = 'https://skrbtaa.xyz/' + $($(search_results).children('li')).children('a').attr("href")
                        data_list = title
                        data_list = info
                        data_list = href
                  }


                  for (let k = 0; k < data_list.length; k = k + 3) {
                        // console.log(`${data_list} ${data_list}`)
                        header.referer = search_url

                        let content_url = data_list


                        GM_xmlhttpRequest({
                            method: 'GET',
                            url: content_url,
                            headers: header,
                            synchronous: true,
                            onload: function (response) {

                              let doc = $(response.responseText)
                              // console.log(response.responseText)
                              // let doc = $('html')
                              try {
                                    data_list.splice(k + 3, 0, $(doc.find('.list-unstyled')).children('li').innerText.match(/{40,40}$/))
                              }

                              catch (err) {
                                    console.log(header.referer)
                                    // console.log(response.responseText)
                                    return console.log(`出错啦【${err.message}】`)
                              }


                              console.log(data_list)

                              $(flag).after(`<br>${data_list} ${data_list} ${data_list}`)

                              header.referer = 'https://skrbtba.xyz/'


                            }
                        })


                  }
                }


            }
      })
    }
})()


我需要使用GM_xmlhttpRequest请求搜索关键词,获取搜索结果列表网页的数据,然后再次使用GM_xmlhttpRequest请求具体的搜索结果。需要在GM_xmlhttpRequest中嵌套GM_xmlhttpRequest,但是由于GM_xmlhttpRequest是异步的,将会导致第二个GM_xmlhttpRequest的请求头无法正确修改。我之前尝试了新建一个包含GM_xmlhttpRequest的函数,使用
async和await语法糖,但是在GM_xmlhttpRequest中的数据无法传出,我哭了{:4_115:}{:4_115:}

木羊羽 发表于 2021-8-19 09:32:32

cxxjackie 发表于 2021-8-18 23:52
查了一下,`GM_xmlhttpRequest`确实支持同步:

```javascript


// ==UserScript==
// @name         bt搜索
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description视频自动点赞,网页自动宽屏播放
// @author       木羊羽
// @include       *
// @require      https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js
// @run-at       document-body
// @grant      GM_xmlhttpRequest
// ==/UserScript==

(function () {

    let header = {
      'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
      'accept-encoding': 'gzip, deflate, br',
      'accept-language': 'zh-CN,zh;q=0.9',
      'cookie': 'JSESSIONID=0B904B22B2D367022FCE51C1104E25E3; aywcUid=P5R6Nrycwm_20210819090408; tet=1629338648883; tetm=29100',
      'dnt': '1',
      'referer': 'https://skrbtba.xyz/',
      'sec-fetch-dest': 'document',
      'sec-fetch-mode': 'navigate',
      'sec-fetch-site': 'same-origin',
      'sec-fetch-user': '?1',
      'upgrade-insecure-requests': '1',
      'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
    }


    let content = $($('.tpc_cont'))
    let flag = content.find('a:even').css('color', 'red')
    let reg = /【影片名称】([\s\S]*?)<br>/g
    let title_list = content.html().match(reg)

    for (let i = 0; i < flag.length; i++) {
      let keywords = title_list.replace('【影片名称】', '')
      keywords = keywords.replace(':', '')
      keywords = keywords.replace('<br>', '')
      let search_url = `https://iskrbt08.xyz/search?keyword=${keywords}`
      // console.log(`开搜索【${url}】`)


      GM_xmlhttpRequest({
            method: 'GET',
            url: search_url,
            headers: header,
            synchronous: true,
            onload: function (response) {

                let data_list = []
                let doc = $(response.responseText)
                console.clear()
                console.log(`搜索页url【${search_url}】`)
                console.log(`搜索页请求头【${header.referer}】`)
                // console.log(response.responseText)
                let search_results = $(doc.find('.list-unstyled'))
                let count = search_results.length


                if (doc.find('.sr-only').length) {

                  console.log('【【【【【【更新cookie】】】】】】')
                } else if (count === 0) {

                } else {
                  count <= 5 ? count : count = 5
                  for (let i = 0; i < count; i++) {
                        let title = $(search_results).children('li').innerText
                        let info = $(search_results).children('li').innerText
                        let href = 'https://skrbtaa.xyz/' + $($(search_results).children('li')).children('a').attr("href")
                        data_list = title
                        data_list = info
                        data_list = href
                  }


                  for (let k = 0; k < data_list.length; k = k + 3) {
                        // console.log(`${data_list} ${data_list}`)
                        header.referer = search_url

                        let content_url = data_list


                        GM_xmlhttpRequest({
                            method: 'GET',
                            url: content_url,
                            headers: header,
                            synchronous: true,
                            onload: function (response) {

                              let doc = $(response.responseText)
                              // console.log(response.responseText)
                              // let doc = $('html')
                              try {
                                    data_list.splice(k + 3, 0, $(doc.find('.list-unstyled')).children('li').innerText.match(/{40,40}$/))
                              }

                              catch (err) {
                                    console.log(header.referer)
                                    // console.log(response.responseText)
                                    return console.log(`出错啦【${err.message}】`)
                              }


                              console.log(data_list)

                              $(flag).after(`<br>${data_list} ${data_list} ${data_list}`)

                              header.referer = 'https://skrbtba.xyz/'


                            }
                        })


                  }
                }


            }
      })
    }
})()


我需要使用GM_xmlhttpRequest请求搜索关键词,获取搜索结果列表网页的数据,然后再次使用GM_xmlhttpRequest请求具体的搜索结果。需要在GM_xmlhttpRequest中嵌套GM_xmlhttpRequest,但是由于GM_xmlhttpRequest是异步的,将会导致第二个GM_xmlhttpRequest的请求头无法正确修改。我之前尝试了新建一个包含GM_xmlhttpRequest的函数,使用
async和await语法糖,但是在GM_xmlhttpRequest中的数据无法传出,我哭了{:4_115:}{:4_115:}

脚本体验师001 发表于 2021-8-19 11:08:54

木羊羽 发表于 2021-8-19 09:32
我需要使用GM_xmlhttpRequest请求搜索关键词,获取搜索结果列表网页的数据,然后再次使用GM_xmlhttpRequ ...

好像不是异不异步的问题,根本原因是脚本在哪个页面运行?bt链接能直接在页面播放吗?像“主播”这样的搜索结果也能播放吗?播放会不会卡?不要着急大家慢慢帮你排查原因。先把// @include       * 改了

木羊羽 发表于 2021-8-19 11:33:26

脚本体验师001 发表于 2021-8-19 11:08
好像不是异不异步的问题,根本原因是脚本在哪个页面运行?bt链接能直接在页面播放吗?像“主播”这样的搜 ...

*源地址是caoliu社区你懂的{:4_110:}

脚本体验师001 发表于 2021-8-19 12:43:34

似乎明白了脚本的中心思想和深远含义,隐约觉得这是一个好的脚本,不禁为哥哥的聪明才智所折服。不如哥哥私信我一个那啥社区的网址,省的我去找了。我要实地运行一下这个脚本。看看问题所在。跨域要加// @connect,您加了没

cxxjackie 发表于 2021-8-19 13:54:54

木羊羽 发表于 2021-8-19 09:32
我需要使用GM_xmlhttpRequest请求搜索关键词,获取搜索结果列表网页的数据,然后再次使用GM_xmlhttpRequ ...

我觉得问题可能出在你的header上,有些header是被保护的无法修改,这是浏览器限制(参考[这里](https://developer.mozilla.org/zh-CN/docs/Glossary/Forbidden_header_name)),至于async/await,可以自己封装一个GM_xmlhttpRequest的ajax函数,数据无法传出可能是你的封装方式不对,一定要用Promise封装。简单示例:

```javascript
function ajax(url, options = {}) {
return new Promise((resolve, reject) => {
    options.url = url;
    options.method = options.method || 'get';
    options.responseType = options.responseType || 'json';
    options.onload = res => res.status === 200 ? resolve(res.response) : reject(res.status);
    options.onerror = () => reject('error');
    options.ontimeout = () => reject('timeout');
    GM_xmlhttpRequest(options);
});
}
```

李恒道 发表于 2021-8-19 14:32:15

木羊羽 发表于 2021-8-19 09:31
我需要使用GM_xmlhttpRequest请求搜索关键词,获取搜索结果列表网页的数据,然后再次使用GM_xmlhttpRequ ...

代码太多具体我也很难有什么判断
哥哥可以写个能触发的小例子我们大家一起调下?

木羊羽 发表于 2021-8-19 17:08:44

李恒道 发表于 2021-8-19 14:32
代码太多具体我也很难有什么判断
哥哥可以写个能触发的小例子我们大家一起调下? ...

好尬尴啊{:4_96:},要尬死了{:4_98:}

目标网站:https://cl.308x.xyz/htm_mob/2107/7/4611108.html

!!!建议屏蔽图片!!!

bt网站:https://iurl302.icu/DiHEW6zlJT?_=000,这个网站的地址会变化,所以给的是短链


cookies失效需要更新cookies

我的计划是在第一个下载地址后面依次给出:名称,信息,磁力哈希

// ==UserScript==
// @name         bt搜索
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description视频自动点赞,网页自动宽屏播放
// @author       木羊羽
// @include       https://cl.308x.xyz/*
// @require      https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js
// @run-at       document-body
// @grant      GM_xmlhttpRequest
// ==/UserScript==

(function () {
    let header = {
      'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
      'accept-encoding': 'gzip, deflate, br',
      'accept-language': 'zh-CN,zh;q=0.9',
      'cookie': 'JSESSIONID=0B904B22B2D367022FCE51C1104E25E3; aywcUid=P5R6Nrycwm_20210819090408; tet=1629365677915; tetm=48862',
      'dnt': '1',
      'referer': 'https://skrbtba.xyz/',
      'sec-fetch-dest': 'document',
      'sec-fetch-mode': 'navigate',
      'sec-fetch-site': 'same-origin',
      'sec-fetch-user': '?1',
      'upgrade-insecure-requests': '1',
      'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
    }


    let content = $($('.tpc_cont'))
    let flag = content.find('a:even').css('color', 'red')
    let reg = /【影片名称】([\s\S]*?)<br>/g
    let title_list = content.html().match(reg)

    for (let i = 0; i < flag.length; i++) {
      let keywords = title_list.replace('【影片名称】', '')
      keywords = keywords.replace(':', '')
      keywords = keywords.replace('<br>', '')
      let search_url = `https://skrbtba.xyz/search?keyword=${keywords}`
      // console.log(`开搜索【${url}】`)


      GM_xmlhttpRequest({
            method: 'GET',
            url: search_url,
            headers: header,
            synchronous: true,
            onload: function (response) {

                let data_list = []
                let doc = $(response.responseText)
                console.clear()
                console.log(`搜索页url【${search_url}】`)
                console.log(`搜索页请求头【${header.referer}】`)
                // console.log(response.responseText)
                let search_results = $(doc.find('.list-unstyled'))
                let count = search_results.length


                if (doc.find('.sr-only').length) {

                  console.log('【【【【【【更新cookie】】】】】】')
                } else if (count === 0) {

                } else {
                  count <= 5 ? count : count = 5
                  for (let i = 0; i < count; i++) {
                        let title = $(search_results).children('li').innerText
                        let info = $(search_results).children('li').innerText
                        let href = 'https://skrbtba.xyz/' + $($(search_results).children('li')).children('a').attr("href")
                        data_list = title
                        data_list = info
                        data_list = href
                  }


                  for (let k = 0; k < data_list.length; k = k + 3) {
                        // console.log(`${data_list} ${data_list}`)
                        header.referer = search_url

                        let content_url = data_list


                        GM_xmlhttpRequest({
                            method: 'GET',
                            url: content_url,
                            headers: header,
                            synchronous: true,
                            onload: function (response) {

                              let doc = $(response.responseText)
                              // console.log(response.responseText)
                              // let doc = $('html')
                              try {
                                    data_list.splice(k + 3, 0, $(doc.find('.list-unstyled')).children('li').innerText.match(/{40,40}$/))
                              }

                              catch (err) {
                                    console.log(header.referer)
                                    // console.log(response.responseText)
                                    return console.log(`出错啦【${err.message}】`)
                              }


                              console.log(data_list)

                              $(flag).after(`<br>************${k}***********<br>${data_list} ${data_list} ${data_list}`)

                              header.referer = 'https://skrbtba.xyz/'


                            }
                        })


                  }
                }


            }
      })
    }
})()


页: 1 [2] 3 4
查看完整版本: 油猴脚本怎么实现跨域的同步请求