2

我试图让它每次访问 nike.com 运动鞋页面时,它都会自动选择我的鞋码,将其添加到购物车,然后为我结账。每次我尝试运行脚本时,我都会收到此错误

错误:脚本“My Fancy New Userscript”的执行失败!硒未定义

这是我的脚本:

// ==UserScript==
// @name       My Fancy New Userscript
// @namespace  http://*/*
// @version    0.1
// @description  enter something useful
// @match      http://*/*
// @copyright  2012+, You
// ==/UserScript==

selenium.select("class=selectBox-label", "10"); // this selects size 10 
selenium.click("class=add-to-cart nike-button nike-button-orange");
selenium.waitForElement("class=checkout-button nike-button nike-button-orange"); 
selenium.click("class=checkout-button nike-button nike-button-orange");

非常感谢您的帮助,谢谢!

编辑:

我刚刚通过 JSLint 运行它,并得到了这个错误:

'selenium' was used before it was defined. (Line 1 Character 1) ----> selenium.select("class=selectBox-label", "10"); // this selects size 10

4

1 回答 1

1

您从哪里获得selenium.select...您正在尝试的 Selenium 代码(等)?网页本身是否使用 Selenium?(疑)。

Tampermonkey 不支持 Selenium 语法。为此,您需要@require某种库,而我不知道有这样的库(但我不是 Selenium 专家)。

您需要使用 javascript 或您的库@require或目标页面上的函数来开发 Tampermonkey 脚本。

以下是您的脚本可能使用jQuerywaitForKeyElements库/实用程序的内容:

// ==UserScript==
// @name     _Nike auto-buy(!!!) script
// @include  http://YOUR_SERVER.COM/YOUR_PATH/*
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
// @require  https://gist.github.com/raw/2625891/waitForKeyElements.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.
*/

var okayToClickAddtoCart = false;

//-- Assumes that size is a standard <option> tag or similar...
waitForKeyElements (".selectBox-label[value='10']", selectShoeSize);

function selectShoeSize (jNode) {
    jNode.prop ('selected', true);

    okayToClickAddtoCart = true;
}


waitForKeyElements (".add-to-cart.nike-button", clickAddToCart);

function clickAddToCart (jNode) {
    if ( ! okayToClickAddtoCart) {
        return true;    //-- Don't click yet.
    }

    var clickEvent  = document.createEvent ('MouseEvents');
    clickEvent.initEvent ('click', true, true);
    jNode[0].dispatchEvent (clickEvent);
}


waitForKeyElements (".checkout-button", clickCheckoutButton);

function clickCheckoutButton (jNode) {
    var clickEvent  = document.createEvent ('MouseEvents');
    clickEvent.initEvent ('click', true, true);
    jNode[0].dispatchEvent (clickEvent);
}


您必须使用实际页面中的 HTML 来调整选择器(尤其是第一个),您应该将其包含在问题中

于 2013-02-24T00:50:35.223 回答