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