为什么我的Tampermonkey脚本会抛出“Selenium未定义”?

时间:2013-02-23 14:05:37

标签: javascript jquery google-chrome selenium tampermonkey

我试图在每次访问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

1 个答案:

答案 0 :(得分:1)

您在哪里获得了您正在尝试的Selenium代码(selenium.select...等)?网页本身是否使用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来调整选择器(尤其是第一个),应该包含在问题中