cxxjackie 发表于 2021-8-18 23:52
查了一下,`GM_xmlhttpRequest`确实支持同步:
```javascript
{:4_86:}ggnb...冷知识又增加了
李恒道 发表于 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:}
脚本体验师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:}
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:}
木羊羽 发表于 2021-8-19 09:32
我需要使用GM_xmlhttpRequest请求搜索关键词,获取搜索结果列表网页的数据,然后再次使用GM_xmlhttpRequ ...
好像不是异不异步的问题,根本原因是脚本在哪个页面运行?bt链接能直接在页面播放吗?像“主播”这样的搜索结果也能播放吗?播放会不会卡?不要着急大家慢慢帮你排查原因。先把// @include * 改了
脚本体验师001 发表于 2021-8-19 11:08
好像不是异不异步的问题,根本原因是脚本在哪个页面运行?bt链接能直接在页面播放吗?像“主播”这样的搜 ...
*源地址是caoliu社区你懂的{:4_110:}
似乎明白了脚本的中心思想和深远含义,隐约觉得这是一个好的脚本,不禁为哥哥的聪明才智所折服。不如哥哥私信我一个那啥社区的网址,省的我去找了。我要实地运行一下这个脚本。看看问题所在。跨域要加// @connect,您加了没
木羊羽 发表于 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 09:31
我需要使用GM_xmlhttpRequest请求搜索关键词,获取搜索结果列表网页的数据,然后再次使用GM_xmlhttpRequ ...
代码太多具体我也很难有什么判断
哥哥可以写个能触发的小例子我们大家一起调下?
李恒道 发表于 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/'
}
})
}
}
}
})
}
})()