2

我不是真正的编码员。我可以破解一些脚本,但不能再破解了。像真正的新手一样跟我说话。;-)

我想使用 GM 脚本自动扩展页面上的两个链接。这是一个法国约会网站,在个人资料部分,您有两个地方默认只显示部分信息。因此,要获得所有信息,您需要单击 2 个附加链接。

这是页面的屏幕截图,其中包含我要触发的链接:

(点击查看大图)
链接截图


目标页面是reseaucontact.com/profil/3604181

重要提示:当我测试脚本时,我登录了网站……所以如果您点击链接并且您没有登录,该网站会用法语告诉您“注册以查看完整内容”。

我试图制作一个脚本来打开第一个链接,但由于链接的 URL 与页面 ( reseaucontact.com/profil/3604181) 页面只是在无限循环中重新加载的相同 URL ;-)

这是我第一次尝试制作脚本,结果是一个无限循环:

// ==UserScript==
// @name Reseau Contact Automatic Expander
// @version 1.0
// @author Mikha
// @include  http://reseaucontact.com/profil/*
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js
// @grant    GM_addStyle
// ==/UserScript==
/*- The @grant directive is needed to work around a design change
    introduced in GM 1.0.   It restores the sandbox.
*/

//--- Note that the contains() text is case-sensitive.
var TargetLink = $("a:contains('Voir tous les détails')")

if (TargetLink.length)
    window.location.href = TargetLink[0].href


这是我收集的 Firefox Web Developer 工具的数据/打印屏幕(当我登录时)以查找目标/链接:

第一个链接:

(点击查看大图)
第一个链接 HTML


第二个链接:

(点击查看大图)
第一个链接 HTML


我知道当我单击 2 个链接时,它是“身份验证请求”的 GET 命令或类似的东西......但我不明白如何制作一个真正“模仿”我的鼠标点击的脚本展开配置文件的 2 个部分,而无需每次单击。

我很确定这很简单/容易做,但是在尝试使用那种“链接”查找信息 4 小时后,我需要帮助。

如果您需要更多信息或澄清,请问我。

4

2 回答 2

1

这些是 AJAX 驱动的链接,在href. 单击该链接会触发 javascript 事件。

在这种情况下,最简单的做法是发送 javascript 期望的鼠标事件(通常,但不总是一个click事件)。请参阅在 AJAX 驱动的站点上选择和激活正确的控件

此外,实际上,让 GM 脚本立即在两个 jQuery-AJAX 驱动的链接上触发,就像这两个链接一样,可能会遇到时间或“竞争”问题。对于这样的网站,我建议在点击之前稍作延迟。使用setTimeout()Doc延迟。

把它们放在一起,完整的脚本可能是这样的:

// ==UserScript==
// @name     Reseau Contact Automatic Expander
// @version  1.0
// @author   Mikha
// @include  http://reseaucontact.com/profil/*
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js
// @grant    GM_addStyle
// ==/UserScript==
/*- The @grant directive is needed to work around a design change
    introduced in GM 1.0.   It restores the sandbox.
*/

//-- Delay the link clicks 333 mS and 777 mS, respectively.
setTimeout (clickLinkWithText, 333, "Voir tous les détails");
setTimeout (clickLinkWithText, 777, "Lire la suite");

function clickLinkWithText (linkText) {
    var targetLink = $("a:contains('" + linkText + "')");
    if (targetLink.length) {
        triggerMouseEvent (targetLink[0], "click");
    }
}

function triggerMouseEvent (node, eventType) {
    var clickEvent = document.createEvent('MouseEvents');
    clickEvent.initEvent (eventType, true, true);
    node.dispatchEvent (clickEvent);
}


如果需要,调整延迟,并注意站点使用更多或不同的事件的可能性很小click

于 2013-10-13T08:03:33.763 回答
0

如果单击这些截断链接的功能是扩展元素或通过 AJAX 调用获取更多内容或仅在下面显示隐藏元素,那么您可能根本不需要链接的 HREF,因为它可能会阻止默认行为跟随 href 到一个新的 URL。

不要弄乱href,而是尝试在这些链接上触发点击事件:

TargetLink.click();
于 2013-10-13T06:29:24.963 回答