油猴在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一般都不同源,而我们的脚本一般都是匹配目标网站的网址。
image
然而很巧的是,必应网页里面就有这样一个同源的iframe,导致我们半天看不出来问题在哪。
于是乎,可以梳理一下发生了上面。

点击下一页时,我们的页面并没有刷新。按理来说油猴脚本不会再执行了。然而,iframe中的页面刷新了,我们的脚本匹配上了url,并开始执行。我们误认为在iframe中执行的脚本是在我们看到的top页面上执行的,因此调试半天始终找不到解决方法。

https://bbs.tampermonkey.net.cn/thread-2410-1-1.html

image
然而到后期脚本又会失效,看上去是bing的问题。

地区为非中国时,链接为重定向bing

只有国内专供版的href中有直接链接。
假如最上方,有国内版和国际版的选项,那么就是专供版。

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

在cn.bing.com中,href是可以直接用的。

image

应该使用中文语言

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

  1. 地区不建议选美国,我的那个弹窗组件会无法弹出。
posted @ 2025-03-02 21:23  魂祈梦  阅读(158)  评论(0)    收藏  举报