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
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