Why does my Tampermonkey script throw “Selenium is not defined”?

余生颓废 提交于 2019-12-10 10:53:42

问题


I am trying to make it where every time I visit a nike.com sneaker page, it automatically picks my shoe size, adds it to the cart, and checks out for me. Every time I try to run the script, I keep getting this error

ERROR: Execution of script 'My Fancy New Userscript' failed! selenium is not defined

Here is my script:

// ==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");

Help is very much appreciated, thank you!

Edit:

I just ran it through JSLint, and got this error:

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


回答1:


Where did you get that Selenium code (selenium.select..., etc.) that you are trying? Does the web page itself use Selenium? (Doubtful).

Tampermonkey does not support Selenium syntax. You'd need to @require some kind of library for that, and I'm not aware of such a library (but I'm not a Selenium expert).

You need to use javascript, or libraries that you @require, or functions that are on the target page to develop Tampermonkey scripts.

Here's what your script might be using the jQuery and waitForKeyElements libraries/utilities:

// ==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);
}


You will have to tune the selectors (especially the first one) using the HTML from the actual page, which you should include in the question.



来源:https://stackoverflow.com/questions/15041365/why-does-my-tampermonkey-script-throw-selenium-is-not-defined

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!