新手/初学者Javascript请求
作者:互联网
HTML代码:
<td>
<img src="../images/items/333.png"><br>
<b>Product One</b><br>
(2 in stock)<br>
<i>65 USD</i><br>
<form action="shopping.php?shop=1&item=333&price=65&buy=conf&type=" method="post">
<input name="" value="Buy this item" type="submit">
</form></td>
<td>
<img src="../images/items/444.png"><br>
<b>Product Two</b><br>
(4 in stock)<br>
<i>5 USD</i><br>
<form action="shopping.php?shop=1&item=444&price=5&buy=conf&type=" method="post">
<input name="" value="Buy" type="submit">
</form></td>
这是我正在处理的页面上的html代码,无法更改html代码.
页面上有几个td标签,其中包含您在上面的代码中看到的以下信息.
我想写一个脚本来做这样的事情:
if (document.body.innerHTML.indexOf("Product One") > -1) {
document.location = "shopping.php?shop=1&item="+itemID+"&price="+USD+"&buy=conf&type="
}
在页面的正文/ td中搜索在脚本中指定的“产品名称”,然后找到该URL,然后转到包含需要提取的变量,itemID和USD的URL.
通过使用数字从image.png的src中提取itemID.例如,../images/items/444.png的itemID为444.
USD从斜体标签之间定义的价格中提取.例如,对于i,5 USD // i的USD的提取值被提取.将是5.
渔获为
我将需要很多if(document.body.innerHTML.indexOf(“ Name”)> -1){document.location =“ shopping.php?shop = 1& amp; item =” itemID“& amp; price =“ USD”& amp; buy = conf& amp; type =“},以适应我要指定的大量产品.我可能要指定“第一个产品到一百个产品”和“子产品A到Z”
解
我想到的一些处理方式(需要放入javascript代码中)是:
>将我要指定的产品列表放入数组(类似)var list = new Array(“产品一”,“产品二”,“子产品A”);并具有检查页面上是否存在该阵列上显示的任何产品的功能.
>找到产品后,要获取itemID,请从产品的图像src中隔离.png之前和/ items /之后的数字.而要获得USD,请在< i> < / i>标签,并且仅采用数值
>为此,我认为可以使用nextSibling或previousSibing,但是我对此不太确定.
>或者,为了简化操作,可能有一个函数可以立即定位表单的操作值并设置window.location,因为< form action =“ shopping.php?shop = 1& item = 444& price = 5& amp; buy = conf& amp; type =“ method =” post“>
>在使用XPath之前我已经看过了吗?
解决方法:
使用jQuery并不困难-尤其是如果我们将其扩展为搜索不区分大小写的正则表达式.
以下脚本应该与问题中的HTML结构一起使用,如果它准确无误,并且不是AJAX添加的.注意定位产品描述时正则表达式具有的功能.
您可以see the underlying code at work at jsFiddle.
// ==UserScript==
// @name _Auto-follow targeted product links.
// @include http://YOUR_SERVER.COM/YOUR_PATH/*
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
// ==/UserScript==
var targetList = [
"Shoes, pumps",
"Horse shoes",
"(?:Red|Pink|Burgundy)\\s+shoes?"
];
/*--- Extend jQuery with a case-insensitive version of contains().
Also allows regular expressions.
*/
jQuery.extend (
jQuery.expr[':'].containsCI = function (a, i, m) {
//--- The next is faster than jQuery(a).text()...
var sText = (a.textContent || a.innerText || "");
var zRegExp = new RegExp (m[3], 'i');
return zRegExp.test (sText);
}
);
$.each (targetList, function (index, value) {
var jqSelector = 'td > b:containsCI("' + value + '")';
var productFound = $(jqSelector);
if (productFound.length) {
var matchingForm = productFound.first ().nextAll ("form");
if (matchingForm.length) {
alert (productFound.text () );
document.location = matchingForm.attr ("action");
}
}
} );
标签:greasemonkey,javascript 来源: https://codeday.me/bug/20191201/2079161.html