2

私はコーダーではありません。いくつかのスクリプトをハッキングできますが、それ以上はできません。REAL NEWBIEのように話してください。;-)

GM スクリプトを使用して、ページ上の 2 つのリンクを自動的に展開したいと考えています。これはフランスの出会い系サイトで、プロフィール セクションには、デフォルトで部分的な情報のみを表示する 2 つの場所があります。したがって、すべての情報を取得するには、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 開発者ツールのデータ/印刷画面です (ログに記録した場合):

最初のリンク:

(クリックすると大きな画像が表示されます)
最初のリンク HTML


2番目のリンク:

(クリックすると大きな画像が表示されます)
最初のリンク HTML


2つのリンクをクリックすると、「認証要求」などのGETコマンドになることは理解しています...しかし、マウスのクリックを実際に「模倣」して展開するスクリプトを作成する方法がわかりませんプロファイルの 2 つのセクションを毎回クリックする必要はありません。

シンプルで簡単にできると確信していますが、その「種類のリンク」で情報を見つけようとして4時間後、助けが必要です.

さらに詳しい情報や説明が必要な場合は、私に聞いてください。

4

2 に答える 2

1

これらは、 にダミー値を持つ AJAX 駆動のリンクhrefです。リンクをクリックすると、JavaScript イベントが発生します。

この場合の最も簡単な方法は、javascript が期待するマウス イベント (通常はclickイベントではありませんが) を送信することです。AJAX 駆動サイトでの適切なコントロールの選択と有効化を参照してください。

また、実際問題として、GM スクリプトを 2 つの jQuery-AJAX 駆動リンク (これら 2 つのリンクのように) で即時に実行すると、タイミングまたは「競合」の問題が発生する可能性があります。このようなサイトでは、クリックする前に少し待つことをお勧めします。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 に答える