油猴在bing搜索页面无法获取元素
www.bing.com切换页码时没有刷新
在不登录bing账号的情况下,切换搜索结果页面的页面,没有刷新页面。
具体表现为,标签页上没有转圈(但是网址变了)。控制台没有清空。
应该是一种动态刷新。
本来我是不关心这玩意的,但是不知为何,油猴脚本里面,在切换页面后无法获取到上面的dom元素(刷新或者第一次都是可以的)。控制台也能获取到元素,就是油猴里面怎么也获取不到,哪怕设置setTimeout五六秒,获取到的还是空的。
这玩意我甚至无法稳定触发。语言中文+区域中国,然后不登录,可以大概率复现。
登录也会出现这种情况,现在不知道如何解决。
我怀疑bing的代码在我测的时候改掉了。因为之前遇到过一次-site不能用的情况,后来发现是bing自身的问题,隔天就好了。
更新
触发的方法,在搜索页面多等一会儿,然后再点下一页。
解决方法?
没有找到完美的解决方法.
// 监听整个文档的 DOM 变化
const TARGET_SELECTOR = "#b_results .b_algo"; // 目标元素选择器
const PARENT_SELECTOR = document; // 监听的父容器(可缩小范围,提升性能)
const DEBOUNCE_TIME = 500; // 防抖时间(单位:ms,根据实际渲染速度调整)
// 防抖计时器
let renderTimer = null;
// 创建监听器
const observer = new MutationObserver((mutations) => {
// 每次 DOM 变化时,重置防抖计时器
clearTimeout(renderTimer);
renderTimer = setTimeout(() => {
// 检查目标元素是否存在
console.log('超时执行')
let element = document.querySelectorAll(TARGET_SELECTOR)
console.log('element',element)
if (element.length > 0) {
}
}, DEBOUNCE_TIME);
});
// 配置监听选项(监听子节点变化)
observer.observe(PARENT_SELECTOR, {
childList: true,
subtree: true, // 递归监听所有子节点
});
那段空白就是我们应该写的逻辑代码,这段代码至少会执行两边,一遍是由于原有页面超过500毫秒未更新,另一遍是自己修改了dom触发了监听,然后重新计时触发逻辑。
不知为何,如果加个超时停止监听,就无法获取到dom元素了。
更新
就是iframe导致的问题。他看起来再次执行了是在iframe里面执行的,而不是我们的顶部页面(称为top)。
所以无法获取dom元素,是因为iframe里面没有那些dom。
一般的iframe是不会匹配上的,因为iframe一般都不同源,而我们的脚本一般都是匹配目标网站的网址。

然而很巧的是,必应网页里面就有这样一个同源的iframe,导致我们半天看不出来问题在哪。
于是乎,可以梳理一下发生了上面。
点击下一页时,我们的页面并没有刷新。按理来说油猴脚本不会再执行了。然而,iframe中的页面刷新了,我们的脚本匹配上了url,并开始执行。我们误认为在iframe中执行的脚本是在我们看到的top页面上执行的,因此调试半天始终找不到解决方法。
https://bbs.tampermonkey.net.cn/thread-2410-1-1.html

然而到后期脚本又会失效,看上去是bing的问题。
地区为非中国时,链接为重定向bing
只有国内专供版的href中有直接链接。
假如最上方,有国内版和国际版的选项,那么就是专供版。

之前使用的是上面tilk的a标签的href属性来判断,现在他改成bing的重定向链接了,不好判断了。
现在试试使用cite或者上面那个标题。
在cn.bing.com中,href是可以直接用的。

应该使用中文语言
假如搜索中文内容,应当选择中文作为语言,否则中文的结果会变得很少,特别是一些比较冷门的词汇。

- 地区不建议选美国,我的那个弹窗组件会无法弹出。

浙公网安备 33010602011771号