25
ProductDetails = {
(Sequence.Parallel {
Query.ProductLinks
}) -> { linkId itemTitle itemLink storeName storeLink price rating itemsSold image }
(Browser.Load {
itemLink
})
(ScrollIntoView {
(SelectBy.Css {
"div.product-detail-tab"
})
})
(State.Up {
(Sequence.Chain {
Select.ProductSelectedPropertyButton
} {
Browser.Click
})
})
(@Core.Unit #{
linkId: {
linkId
}
header: {
Select.ProductHeader
}
description: {
(Sequence.Force {
Select.Description
} {
3000
})
}
specs: {
Select.SpecTab
Browser.Click
Select.SpecRow
$regionstart "{\"Type\":1,\"Name\":\"Extract\",\"Collapsed\":false}"
(@Core.Unit #{
name: {
Gather.SpecTitle
}
value: {
Gather.SpecValue
}
})
$regionend
}
variations: {
(ScrollIntoView {
Select.ProductPropertyContainer
})
(Sequence.Chain {
Select.ProductPropertyContainer
} {
Select.ProductPropertyButton
(Browser.RunScript {
Script.SelectVariation
} {
0
})
})
(@Core.Unit #{
price: {
Select.ProductPrice
}
shipping: {
Select.ShippingPrice
Text.AfterColon
}
delivery: {
Select.EstimatedDelivery
}
selectedVariation: {
Select.ProductPropertyContainer
(@Core.Unit #{
name: {
Select.VariationName
}
value: {
Select.ProductSelectedPropertyButton
Gather.VariationText
}
})
}
})
}
images: {
Select.Images
$regionstart "{\"Type\":1,\"Name\":\"Extract\",\"Collapsed\":false}"
(@Core.Unit #{
images: {
Text.LargeImage
}
})
$regionend
}
})
}
ProductLinks = {
$regionstart "{\"Type\":1,\"Name\":\"Turn Pages\",\"Collapsed\":false}"
(Sequence.Take {
3
} {
(Browser.TurnPagesAndWait {
Select.NextButton
} {
500
})
})
$regionend
(State.Child {
(Browser.RunScript {
Script.ScrollToBottom
} {
0
})
})
$regionstart "{\"Type\":1,\"Name\":\"Extract\",\"Collapsed\":false}"
Select.RowContainer
(@Core.Unit #{
itemTitle: {
Select.ItemTitle
}
itemLink: {
Select.ItemTitle
Gather.Link
}
storeName: {
Select.StoreName
}
storeLink: {
Select.StoreName
Gather.Link
}
price: {
Select.PriceCurrent
}
rating: {
Select.RatingValue
}
itemsSold: {
Select.SaleValueLink
Gather.Number
}
image: {
Select.ProductThumb
Gather.Src
}
})
$regionend
}
ScrollIntoView = {
\selector.{
(Sequence.FirstOrDefault {
selector
(Browser.RunScript {
"element.scrollIntoView();"
} {
0
})
(Browser.Wait {
100
})
})
}
}
true
AfterColon
Text
Regex
false
false
[^\:]+\:\s*(.+)\s*
0
1
true
LargeImage
Src
Replace
_50x50.[a-z]{3}
true
false
false
ProductDetails
linkId
Number
header
String
description
String
specs
name
String
value
String
variations
price
String
shipping
String
delivery
String
selectedVariation
name
String
value
String
images
images
String
ProductLinks
itemTitle
String
itemLink
String
storeName
String
storeLink
String
price
String
rating
String
itemsSold
String
image
String
Description
{
"id": {
"val": "product-description"
},
"id2": {
"val": ""
},
"id1": {
"val": ""
},
"title": {
"val": null
},
"classes": {
"val": "product-description"
},
"visible": {
"val": true
},
"class": {
"product-description": true
},
"classes3": {
"val": "tab-content"
},
"class3": {
"tab-content": true
},
"tag2": {
"val": "DIV"
},
"tag": {
"val": "DIV"
},
"color": {
"val": "rgb(0, 0, 0)"
},
"tag1": {
"val": "DIV"
},
"childrenLen": {
"val": 1
},
"classes1": {
"val": "product-overview"
},
"id3": {
"val": ""
},
"classes2": {
"val": ""
},
"class1": {
"product-overview": true
},
"font": {
"val": "\"Open Sans\", sans-serif"
},
"tag3": {
"val": "DIV"
},
"_tolerance": {
"val": 0.044
}
}
EstimatedDelivery
{"class2":{"product-shipping-date":true},"id2":{"val":""},"childrenLen":{"val":0},"title":{"val":null},"classes3":{"val":"product-shipping"},"class3":{"product-shipping":true},"tag1":{"val":"SPAN"},"visible":{"val":true},"tag2":{"val":"SPAN"},"font":{"val":"\"Open Sans\", sans-serif"},"id":{"val":""},"classes":{"val":""},"class1":{"product-shipping-delivery":true},"color":{"val":"rgb(0, 0, 0)"},"id1":{"val":""},"classes1":{"val":"product-shipping-delivery"},"id3":{"val":""},"tag3":{"val":"DIV"},"classes2":{"val":"product-shipping-date"},"checked":{"error":"Type not supported: undefined"},"tag":{"val":"SPAN"},"_tolerance":{"val":0.044}}
Images
{
"font": {
"val": "\"Open Sans\", sans-serif"
},
"title": {
"val": null
},
"id1": {
"val": ""
},
"childrenLen": {
"val": 0
},
"classes1": {
"val": "images-view-item"
},
"classes3": {
"val": "images-view-list"
},
"tag1": {
"val": "DIV"
},
"class3": {
"images-view-list": true
},
"color": {
"val": "rgb(0, 0, 0)"
},
"tag3": {
"val": "UL"
},
"id3": {
"val": ""
},
"tag2": {
"val": "LI"
},
"id2": {
"val": ""
},
"classes": {
"val": ""
},
"class1": {
"images-view-item": true
},
"indexes": {
"0": 0,
"1": 0
},
"visible": {
"val": true
},
"id": {
"val": ""
},
"tag": {
"val": "IMG"
},
"_tolerance": {
"val": 0.044
}
}
ItemTitle
{"font":{"val":"\"Open Sans\", Arial, Helvetica, sans-serif, Heiti"},"class":{"item-title":true},"id1":{"val":""},"childrenLen":{"val":0},"classes1":{"val":"item-title-wrap"},"tag1":{"val":"DIV"},"class3":{"product-info":true},"color":{"val":"rgb(51, 51, 51)"},"tag3":{"val":"DIV"},"id3":{"val":""},"tag2":{"val":"DIV"},"id2":{"val":""},"classes":{"val":"item-title"},"class1":{"item-title-wrap":true},"indexes":{"0":0,"1":0,"2":0},"visible":{"val":true},"id":{"val":""},"tag":{"val":"A"},"_tolerance":{"val":0.044}}
NextButton
{
"font": {
"val": "\"Open Sans\", Arial, Helvetica, sans-serif, Heiti"
},
"class": {
"next-btn": true,
"next-medium": true,
"next-btn-normal": true,
"next-pagination-item": true,
"next-next": true
},
"title": {
"val": null
},
"id1": {
"val": ""
},
"text": {
"val": "Next"
},
"childrenLen": {
"val": 1
},
"classes1": {
"val": "next-pagination-pages"
},
"classes3": {
"val": "product-pagination-wrap"
},
"tag1": {
"val": "DIV"
},
"class3": {
"product-pagination-wrap": true
},
"color": {
"val": "rgb(0, 0, 0)"
},
"tag3": {
"val": "DIV"
},
"id3": {
"val": ""
},
"tag2": {
"val": "DIV"
},
"id2": {
"val": ""
},
"class1": {
"next-pagination-pages": true
},
"visible": {
"val": true
},
"id": {
"val": ""
},
"classes2": {
"val": "next-pagination next-medium next-normal"
},
"class2": {
"next-pagination": true,
"next-medium": true,
"next-normal": true
},
"tag": {
"val": "BUTTON"
},
"_tolerance": {
"val": 0.022
}
}
PriceCurrent
{
"font": {
"val": "\"Open Sans\", Arial, Helvetica, sans-serif, Heiti"
},
"class": {
"price-current": true
},
"title": {
"val": null
},
"id1": {
"val": ""
},
"childrenLen": {
"val": 0
},
"tag1": {
"val": "DIV"
},
"color": {
"val": "rgb(0, 0, 0)"
},
"tag3": {
"val": "DIV"
},
"id3": {
"val": ""
},
"tag2": {
"val": "DIV"
},
"id2": {
"val": ""
},
"classes": {
"val": "price-current"
},
"class1": {
"item-price-row": true
},
"indexes": {
"1": 0
},
"visible": {
"val": true
},
"id": {
"val": ""
},
"classes2": {
"val": "item-price-wrap"
},
"class2": {
"item-price-wrap": true
},
"tag": {
"val": "SPAN"
},
"_tolerance": {
"val": 0.044
}
}
ProductHeader
{"class1":{"product-title":true},"visible":{"val":true},"class":{"product-title-text":true},"title":{"val":null},"classes":{"val":"product-title-text"},"childrenLen":{"val":0},"color":{"val":"rgb(0, 0, 0)"},"id1":{"val":""},"classes1":{"val":"product-title"},"classes2":{"val":"product-info"},"classes3":{"val":"product-main-wrap"},"id":{"val":""},"tag3":{"val":"DIV"},"id2":{"val":""},"class2":{"product-info":true},"id3":{"val":""},"tag2":{"val":"DIV"},"font":{"val":"\"Open Sans\", sans-serif"},"isDisabled":{"val":false},"class3":{"product-main-wrap":true},"tag":{"val":"H1"},"tag1":{"val":"DIV"},"_tolerance":{"val":0.044}}
ProductPrice
{
"font": {
"val": "\"Open Sans\", sans-serif"
},
"class": {
"product-price-value": true
},
"title": {
"val": null
},
"id1": {
"val": ""
},
"childrenLen": {
"val": 0
},
"classes3": {
"val": "product-info"
},
"tag1": {
"val": "DIV"
},
"class3": {
"product-info": true
},
"color": {
"val": "rgb(0, 0, 0)"
},
"tag3": {
"val": "DIV"
},
"id3": {
"val": ""
},
"tag2": {
"val": "DIV"
},
"id2": {
"val": ""
},
"classes": {
"val": "product-price-value"
},
"class1": {
"product-price-current": true
},
"visible": {
"val": true
},
"id": {
"val": ""
},
"classes2": {
"val": "product-price"
},
"prevText": {
"val": ""
},
"class2": {
"product-price": true
},
"tag": {
"val": "SPAN"
},
"_tolerance": {
"val": 0.044
}
}
ProductPropertyButton
{
"tag": {
"val": "LI"
},
"class3": {
"sku-wrap": true
},
"class1": {
"sku-property-list": true
},
"id": {
"val": ""
},
"tag2": {
"val": "DIV"
},
"tag3": {
"val": "DIV"
},
"childrenLen": {
"val": 1
},
"class2": {
"sku-property": true
},
"visible": {
"val": true
},
"font": {
"val": "\"Open Sans\", sans-serif"
},
"title": {
"val": null
},
"id3": {
"val": ""
},
"id2": {
"val": ""
},
"id1": {
"val": ""
},
"indexes": {
"1": 1
},
"checked": {
"error": "Type not supported: undefined"
},
"classes1": {
"val": "sku-property-list"
},
"classes2": {
"val": "sku-property"
},
"classes3": {
"val": "sku-wrap"
},
"tag1": {
"val": "UL"
},
"class": {
"sku-property-item": true
},
"_tolerance": {
"val": 0.044
}
}
ProductPropertyContainer
{
"tag": {
"val": "DIV"
},
"class3": {
"product-info": true
},
"class1": {
"sku-wrap": true
},
"classes": {
"val": "sku-property"
},
"id": {
"val": ""
},
"tag2": {
"val": "DIV"
},
"tag3": {
"val": "DIV"
},
"color": {
"val": "rgb(0, 0, 0)"
},
"childrenLen": {
"val": 2
},
"class2": {
"product-sku": true
},
"visible": {
"val": true
},
"font": {
"val": "\"Open Sans\", sans-serif"
},
"title": {
"val": null
},
"id3": {
"val": ""
},
"id2": {
"val": ""
},
"id1": {
"val": ""
},
"classes1": {
"val": "sku-wrap"
},
"classes2": {
"val": "product-sku"
},
"classes3": {
"val": "product-info"
},
"tag1": {
"val": "DIV"
},
"class": {
"sku-property": true
},
"_tolerance": {
"val": 0.044
}
}
ProductSelectedPropertyButton
{
"class2": {
"sku-property": true
},
"id2": {
"val": ""
},
"childrenLen": {
"val": 1
},
"title": {
"val": null
},
"class": {
"sku-property-item": true,
"selected": true
},
"classes3": {
"val": "sku-wrap"
},
"class3": {
"sku-wrap": true
},
"tag1": {
"val": "UL"
},
"visible": {
"val": true
},
"tag2": {
"val": "DIV"
},
"font": {
"val": "\"Open Sans\", sans-serif"
},
"indexes": {
"1": 1
},
"id": {
"val": ""
},
"classes": {
"val": "sku-property-item selected"
},
"class1": {
"sku-property-list": true
},
"color": {
"val": "rgb(0, 0, 0)"
},
"id1": {
"val": ""
},
"classes1": {
"val": "sku-property-list"
},
"id3": {
"val": ""
},
"tag3": {
"val": "DIV"
},
"classes2": {
"val": "sku-property"
},
"checked": {
"error": "Type not supported: undefined"
},
"tag": {
"val": "LI"
},
"_tolerance": {
"val": 0.044
}
}
ProductThumb
{
"font": {
"val": "\"Open Sans\", Arial, Helvetica, sans-serif, Heiti"
},
"class": {
"item-img": true
},
"title": {
"val": null
},
"id1": {
"val": ""
},
"childrenLen": {
"val": 0
},
"classes1": {
"val": ""
},
"tag1": {
"val": "A"
},
"color": {
"val": "rgb(46, 156, 195)"
},
"tag3": {
"val": "DIV"
},
"id3": {
"val": ""
},
"tag2": {
"val": "DIV"
},
"id2": {
"val": ""
},
"classes": {
"val": "item-img"
},
"indexes": {
"0": 0,
"1": 0,
"2": 0
},
"visible": {
"val": true
},
"id": {
"val": ""
},
"tag": {
"val": "IMG"
},
"_tolerance": {
"val": 0.044
}
}
RatingValue
{
"font": {
"val": "\"Open Sans\", Arial, Helvetica, sans-serif, Heiti"
},
"class": {
"rating-value": true
},
"title": {
"val": null
},
"id1": {
"val": ""
},
"childrenLen": {
"val": 0
},
"classes1": {
"val": "rating-info"
},
"tag1": {
"val": "A"
},
"color": {
"val": "rgb(153, 153, 153)"
},
"tag3": {
"val": "DIV"
},
"id3": {
"val": ""
},
"tag2": {
"val": "DIV"
},
"id2": {
"val": ""
},
"classes": {
"val": "rating-value"
},
"class1": {
"rating-info": true
},
"indexes": {
"0": 1,
"1": 0
},
"visible": {
"val": true
},
"id": {
"val": ""
},
"classes2": {
"val": "item-sale-wrap"
},
"prevText": {
"val": ""
},
"class2": {
"item-sale-wrap": true
},
"tag": {
"val": "SPAN"
},
"_tolerance": {
"val": 0.044
}
}
RowContainer
{
"font": {
"val": "\"Open Sans\", Arial, Helvetica, sans-serif, Heiti"
},
"class": {
"list-item": true
},
"title": {
"val": null
},
"id1": {
"val": ""
},
"childrenLen": {
"val": 1
},
"color": {
"val": "rgb(0, 0, 0)"
},
"tag3": {
"val": "DIV"
},
"id3": {
"val": ""
},
"id2": {
"val": ""
},
"visible": {
"val": true
},
"id": {
"val": ""
},
"tag": {
"val": "LI"
},
"_tolerance": {
"val": 0.044
}
}
SaleValueLink
{
"font": {
"val": "\"Open Sans\", Arial, Helvetica, sans-serif, Heiti"
},
"class": {
"sale-value-link": true
},
"title": {
"val": null
},
"id1": {
"val": ""
},
"childrenLen": {
"val": 0
},
"classes1": {
"val": "sale-value"
},
"classes3": {
"val": "item-sale-wrap"
},
"tag1": {
"val": "SPAN"
},
"class3": {
"item-sale-wrap": true
},
"color": {
"val": "rgb(153, 153, 153)"
},
"tag3": {
"val": "DIV"
},
"id3": {
"val": ""
},
"tag2": {
"val": "DIV"
},
"id2": {
"val": ""
},
"classes": {
"val": "sale-value-link"
},
"class1": {
"sale-value": true
},
"indexes": {
"0": 1,
"1": 0
},
"visible": {
"val": true
},
"id": {
"val": ""
},
"class2": {
"sale-info": true
},
"tag": {
"val": "A"
},
"_tolerance": {
"val": 0.044
}
}
ShippingPrice
{"font":{"val":"\"Open Sans\", sans-serif"},"class":{"bold":true},"title":{"val":null},"id1":{"val":""},"childrenLen":{"val":0},"classes1":{"val":"bold"},"classes3":{"val":"product-shipping"},"tag1":{"val":"SPAN"},"class3":{"product-shipping":true},"color":{"val":"rgb(0, 0, 0)"},"tag3":{"val":"DIV"},"id3":{"val":""},"tag2":{"val":"DIV"},"id2":{"val":""},"classes":{"val":"bold"},"class1":{"bold":true},"indexes":{"0":0,"1":0,"2":0},"visible":{"val":true},"id":{"val":""},"classes2":{"val":"product-shipping-price"},"class2":{"product-shipping-price":true},"tag":{"val":"HS-NODE"},"_tolerance":{"val":0.022}}
SpecRow
{
"tag": {
"val": "LI"
},
"indexes": {
"1": 0,
"2": 0
},
"class2": {
"product-specs": true
},
"class1": {
"product-specs-list": true,
"util-clearfix": true
},
"childrenLen": {
"val": 2
},
"tag2": {
"val": "DIV"
},
"font": {
"val": "\"Open Sans\", sans-serif"
},
"visible": {
"val": true
},
"tag1": {
"val": "UL"
},
"id": {
"val": ""
},
"classes1": {
"val": "product-specs-list util-clearfix"
},
"id3": {
"val": ""
},
"class": {
"product-prop": true,
"line-limit-length": true
},
"tag3": {
"val": "DIV"
},
"id1": {
"val": ""
},
"checked": {
"error": "Type not supported: undefined"
},
"classes2": {
"val": "product-specs"
},
"title": {
"val": null
},
"classes": {
"val": "product-prop line-limit-length"
},
"color": {
"val": "rgb(0, 0, 0)"
},
"classes3": {
"val": ""
},
"id2": {
"val": ""
},
"_tolerance": {
"val": 0.044
}
}
SpecTab
{"tag":{"val":"LI"},"class2":{"detail-tab-bar":true},"class1":{"tab-lists":true,"avoid-user-select":true},"childrenLen":{"val":1},"tabText":{"val":"SPECIFICATIONS"},"tag2":{"val":"DIV"},"font":{"val":"\"Open Sans\", sans-serif"},"class3":{"detail-extend-tab":true},"visible":{"val":true},"tag1":{"val":"UL"},"id":{"val":""},"classes1":{"val":"tab-lists avoid-user-select"},"id3":{"val":""},"class":{"tab-item":true},"tag3":{"val":"DIV"},"id1":{"val":""},"classes2":{"val":"detail-tab-bar"},"title":{"val":null},"classes":{"val":"tab-item"},"color":{"val":"rgb(0, 0, 0)"},"classes3":{"val":"detail-extend-tab"},"id2":{"val":""},"_tolerance":{"val":0.044}}
StoreName
{
"font": {
"val": "\"Open Sans\", Arial, Helvetica, sans-serif, Heiti"
},
"class": {
"store-name": true
},
"id1": {
"val": ""
},
"childrenLen": {
"val": 0
},
"classes1": {
"val": "item-store-wrap"
},
"tag1": {
"val": "DIV"
},
"class3": {
"product-info": true
},
"color": {
"val": "rgb(153, 153, 153)"
},
"tag3": {
"val": "DIV"
},
"id3": {
"val": ""
},
"tag2": {
"val": "DIV"
},
"id2": {
"val": ""
},
"classes": {
"val": "store-name"
},
"class1": {
"item-store-wrap": true
},
"indexes": {
"0": 0,
"2": 0
},
"visible": {
"val": true
},
"id": {
"val": ""
},
"tag": {
"val": "A"
},
"_tolerance": {
"val": 0.044
}
}
VariationName
{"tag":{"val":"HS-NODE"},"class3":{"sku-wrap":true},"class1":{"sku-title":true},"classes":{"val":"sku-title"},"id":{"val":""},"tag2":{"val":"DIV"},"tag3":{"val":"DIV"},"color":{"val":"rgb(0, 0, 0)"},"childrenLen":{"val":0},"class2":{"sku-property":true},"visible":{"val":true},"font":{"val":"\"Open Sans\", sans-serif"},"title":{"val":null},"id3":{"val":""},"id2":{"val":""},"id1":{"val":""},"indexes":{"0":0,"1":0},"classes1":{"val":"sku-title"},"classes2":{"val":"sku-property"},"classes3":{"val":"sku-wrap"},"tag1":{"val":"DIV"},"class":{"sku-title":true}}
HTML
var result = function (element) {
return element.nodeType === 1 ? element.outerHTML : element.nodeValue;
};
result.noCache = false;
return result;
true
true
Link
var result = function (element) {
var upperTag = function (element) {
return element.tagName ? element.tagName.toUpperCase() : element.tagName;
};
var linkOf = function (element) {
return element && element.href && (element.protocol === "http:" || element.protocol === "https:" || element.protocol == "file:" || element.protocol == "ftp:") ? element.href : null;
};
var original = element;
while (element && (!element.tagName || upperTag(element) !== 'A'))
element = element.parentNode;
var result = linkOf(element);
if (!result) {
if (original.children.length == 1) {
var child = original.children[0];
if (upperTag(child) === 'A') {
result = linkOf(child);
if (!result) {
if (child.children.length == 1) {
child = child.children[0];
if (upperTag(child) === 'A')
result = linkOf(child);
}
}
}
}
}
return result;
};
result.noCache = false;
return result;
true
true
Number
var result = function (element) {
var getText = function () {
return element.nodeType === 1 ? element.innerText : element.nodeValue;
};
var regex = /-?(?=[1-9]|0(?!\d))[\d\,]+(\.\d+)?/;
var first = regex.exec(getText(element));
return first && first.length ? first[0] : null;
};
result.noCache = false;
return result;
false
true
OwnText
var result = function (element) {
var text = [].reduce.call(element.childNodes || [], (a, b) => a + (b.nodeType === 3 ? b.textContent : ''), '');
return text.trim();
};
result.noCache = false;
return result;
false
true
Path
var result = function (element) {
return window.___getPath(element);
};
result.noCache = false;
return result;
false
true
SpecTitle
return function(element, global) {
return element.querySelector('span.property-title').innerText.replace(':', '').trim();
};
false
false
SpecValue
return function(element, global) {
return element.querySelector('span.property-desc').innerText.trim();
};
false
false
Src
var result = function (element) {
return element.src || "";
};
result.noCache = false;
return result;
false
true
Tag
var result = function (element) {
var upperTag = function (element) {
return element.nodeType === 1 ? element.tagName.toUpperCase() : "HS-NODE";
};
return upperTag(element);
};
result.noCache = false;
return result;
false
true
Text
var result = function (element) {
var text = element.nodeType === 1 ? element.innerText : element.nodeValue;
return text ? text.trim() : "";
};
result.noCache = false;
return result;
true
true
URL
var result = function (element) {
return element.ownerDocument.defaultView.location.href;
};
result.noCache = false;
return result;
false
true
Value
var result = function (element) {
return element.value || element.getAttribute('value');
};
result.noCache = false;
return result;
false
true
VariationText
return function(element, global) {
var findReactComponent = function(el) {
for (const key in el) {
if (key.startsWith('__reactInternalInstance$')) {
const fiberNode = el[key];
return fiberNode && fiberNode['return'] && fiberNode['return'].stateNode;
}
}
return null;
};
try {
if (element.innerText)
return element.innerText;
if (element.querySelector('img') && element.querySelector('img').title)
return element.querySelector('img').title;
return findReactComponent(element).props.sku.propertyValueName;
}
catch (e) {
return element.innerText;
}
};
true
false
checked
return function(element, global) {
return element.checked;
};
false
false
childrenLen
var result = function (element) {
return { val: element.nodeType === 1 ? element.children.length : 0 };
};
result.score = 0.7; // Default
return result;
false
true
class
var result = function (element) {
if (element.nodeType !== 1)
element = element.parentElement;
var result = {};
var list = element.classList;
var len = list.length;
for (var i = 0; i < len; i++)
result[list[i]] = true;
return result;
};
result.score = 0.73;
return result;
false
true
class1
var result = window.___makeRelatedGatherer('class', function (element) {
return element.parentNode;
});
result.score = 0.87;
return result;
false
true
class2
var result = window.___makeRelatedGatherer('class', function (element) {
return element.parentNode.parentNode;
});
result.score = 0.87;
return result;
false
true
class3
var result = window.___makeRelatedGatherer('class', function (element) {
return element.parentNode.parentNode.parentNode;
});
result.score = 0.9;
return result;
false
true
classes
var result = function (element) {
if (element.nodeType !== 1)
element = element.parentElement;
return { val: typeof element.className === 'string' ? element.className : null };
};
result.score = 0.91;
return result;
false
true
classes1
var result = window.___makeRelatedGatherer('classes', function (element) {
return element.parentNode;
});
result.score = 0.95;
return result;
false
true
classes2
var result = window.___makeRelatedGatherer('classes', function (element) {
return element.parentNode.parentNode;
});
result.score = 0.95;
return result;
false
true
classes3
var result = window.___makeRelatedGatherer('classes', function (element) {
return element.parentNode.parentNode.parentNode;
});
result.score = 0.81;
return result;
false
true
colIndex
var result = function (element) {
var maxUp = 5;
function closestTd(element) {
for (var up = 0; up < maxUp; up++) {
if (!element) return null;
if (/^t[dh]$/i.test(element.nodeName))
return element;
element = element.parentNode;
}
return null;
}
function colSpan(col) {
return parseInt((col && col.nodeType == 1 && /^t[dh]$/i.test(element.nodeName)) ? (col.getAttribute('colSpan') || 1) : 0);
}
function endIndex(element) {
var colPos = colSpan(element);
while (element) {
element = element.previousSibling;
colPos += colSpan(element);
}
return colPos;
}
element = closestTd(element);
if (element)
return { val: endIndex(element.previousSibling) };
else
return {};
};
result.score = 0.7; // Default
return result;
false
true
color
var result = function (element) {
if (element.nodeType !== 1)
element = element.parentElement;
return { val: window.getComputedStyle(element).color };
};
result.score = 1;
return result;
false
true
font
var result = function (element) {
if (element.nodeType !== 1)
element = element.parentElement;
return { val: window.getComputedStyle(element)['font-family'] };
};
result.score = 1;
return result;
false
true
header
var result = function header(element) {
var upperTag = function (element) {
return element.tagName ? element.tagName.toUpperCase() : element.tagName;
};
var getColumnIndex = function (e) {
var maxLevels = 3;
while (e && upperTag(e) !== 'TD' && maxLevels > 0) {
e = e.parentElement;
maxLevels--;
}
if (e && upperTag(e) === 'TD') {
var index = 0;
while ((e = e.previousElementSibling)) {
index += e.colSpan || 1;
}
return index;
}
else
return -1;
};
var colIndex = getColumnIndex(element);
if (colIndex !== -1) {
while (element && upperTag(element) !== 'TABLE')
element = element.parentElement;
if (element && upperTag(element) === 'TABLE') {
var tds = element.querySelectorAll('th,td');
var index = 0;
var latest = null;
for (var td of tds) {
if (index > colIndex)
return { val: (latest.innerText || "").trim() };
latest = td;
index += td.colSpan || 1;
}
}
}
return {};
};
result.score = 0.9;
return result;
false
true
id
var result = function (element) {
if (element.nodeType !== 1)
element = element.parentElement;
return { val: element.id };
};
result.score = 0.98;
return result;
false
true
id1
var result = window.___makeRelatedGatherer('id', function (element) {
return element.parentNode;
});
result.score = 0.91;
return result;
false
true
id2
var result = window.___makeRelatedGatherer('id', function (element) {
return element.parentNode.parentNode;
});
result.score = 0.91;
return result;
false
true
id3
var result = window.___makeRelatedGatherer('id', function (element) {
return element.parentNode.parentNode.parentNode;
});
result.score = 0.88;
return result;
false
true
indexes
var result = function (element) {
function getElementIndex(node) {
var index = 0;
while ((node = node.previousSibling)) {
index++;
}
return index;
}
var result = {};
var level = 0;
var levels = 3;
while (element && level < levels) {
result[level] = getElementIndex(element);
level++;
element = element.parentElement
}
return result;
};
result.score = 0.86;
return result;
false
true
isDisabled
return function(element, global) {
return element.classList.contains('disabled');
};
false
false
names
var result = function (element) {
function getElementName(node) {
return node.nodeType === 1 ? (node.name || node.getAttribute('name')) : null;
}
var result = {};
var level = 0;
var levels = 3;
while (element && level < levels) {
var name = getElementName(element);
if (name) result[level] = name;
level++;
element = element.parentElement
}
return result;
};
result.score = 0.75;
return result;
false
true
prevText
var result = function (element) {
var maxDepth = 0;
var maxLength = 128;
while (element && !element.previousElementSibling && maxDepth > 0) {
element = element.parentElement;
maxDepth--;
}
if (element && element.previousElementSibling) {
var fullText = element.previousElementSibling.innerText;
if (fullText.length < maxLength)
return { val: fullText };
}
return null;
};
result.score = 0.7; // Default
return result;
false
true
tabText
return function(element, global) {
return element.innerText;
};
false
false
tag
var result = function (element) {
var upperTag = function (element) {
return element.nodeType === 1 ? element.tagName.toUpperCase() : "HS-NODE";
};
return { val: upperTag(element) };
};
result.score = 1;
return result;
false
true
tag1
var result = window.___makeRelatedGatherer('tag', function (element) {
return element.parentNode;
});
result.score = 1;
return result;
false
true
tag2
var result = window.___makeRelatedGatherer('tag', function (element) {
return element.parentNode.parentNode;
});
result.score = 1;
return result;
false
true
tag3
var result = window.___makeRelatedGatherer('tag', function (element) {
return element.parentNode.parentNode.parentNode;
});
result.score = 1;
return result;
false
true
text
var result = function (element) {
if (element.nodeType !== 1)
return null;
if (window.___textTags.has(element.tagName.toUpperCase()))
return null;
var text = element.innerText;
if (!text)
text = (element.querySelector('svg title') || {}).innerHTML;
if (text && text.length > 100)
return null;
return { val: text };
};
result.score = 0.2;
return result;
false
true
title
var result = function (element) {
if (element.nodeType !== 1)
element = element.parentElement;
return { val: element.getAttribute('title') };
};
result.score = 0.7;
return result;
false
true
visible
var result = function (element) {
if (element.nodeType !== 1)
element = element.parentElement;
return { val: element.offsetParent !== null };
};
result.score = 1;
return result;
false
true
ScrollToBottom
async function scrollToBottom() {
var oldValue = -1;
while (oldValue !== document.documentElement.scrollTop) {
oldValue = document.documentElement.scrollTop;
document.documentElement.scrollTop += 100;
await new Promise((a, r) => setTimeout(a, 10));
}
}
return scrollToBottom();
SelectVariation
if (element.classList.contains('disabled'))
return [];
if (!element.classList.contains('selected'))
element.click();
ProductLinks
linkId
Number
itemTitle
String
itemLink
String
storeName
String
storeLink
String
price
String
rating
String
itemsSold
String
image
String
select distinct
`ProductLinks`.`id` as `linkId`,
`ProductLinks`.`itemTitle`,
`ProductLinks`.`itemLink`,
`ProductLinks`.`storeName`,
`ProductLinks`.`storeLink`,
`ProductLinks`.`price`,
`ProductLinks`.`rating`,
`ProductLinks`.`itemsSold`,
`ProductLinks`.`image`
from `ProductLinks`
where `ProductLinks`.`itemLink` is not null and `ProductLinks`.`itemLink` <> ""
Variations
linkId
Number
productId
Number
variationId
Number
itemTitle
String
itemLink
String
storeName
String
storeLink
String
basePrice
String
rating
String
itemsSold
String
mainImage
String
header
String
description
String
variation_price
String
shipping
String
delivery
String
variation
String
images
String
specs
String
select
`linkId`,
`productId`,
`variationId`,
`itemTitle`,
`itemLink`,
`storeName`,
`storeLink`,
`basePrice`,
`rating`,
`itemsSold`,
`mainImage`,
`header`,
`description`,
`variation_price`,
`shipping`,
`delivery`,
`variation`,
`images`,
group_concat(`ProductDetails.specs`.`name` || ": " || `ProductDetails.specs`.`value`, x'0d0a') as `specs`
from (
select
`linkId`,
`productId`,
`variationId`,
`itemTitle`,
`itemLink`,
`storeName`,
`storeLink`,
`basePrice`,
`rating`,
`itemsSold`,
`mainImage`,
`header`,
`description`,
`variation_price`,
`shipping`,
`delivery`,
`variation`,
group_concat(`images`, x'0d0a') as `images`
from (
select
`ProductDetails`.`linkId` as `linkId`,
`ProductDetails`.`id` as `productId`,
`ProductDetails.variations`.`id` as `variationId`,
`ProductLinks`.`itemTitle`,
`ProductLinks`.`itemLink`,
`ProductLinks`.`storeName`,
`ProductLinks`.`storeLink`,
`ProductLinks`.`price` as `basePrice`,
`ProductLinks`.`rating`,
`ProductLinks`.`itemsSold`,
`ProductLinks`.`image` as `mainImage`,
`ProductDetails`.`header`,
`ProductDetails`.`description`,
`ProductDetails.variations`.`price` as `variation_price`,
`ProductDetails.variations`.`shipping`,
`ProductDetails.variations`.`delivery`,
group_concat(`ProductDetails.variations.selectedVariation`.`name` || ": " || `ProductDetails.variations.selectedVariation`.`value`, x'0d0a') as `variation`
from `ProductDetails`
left join `ProductLinks` on `ProductLinks`.`id` = `ProductDetails`.`linkId`
left join `ProductDetails.variations` on `ProductDetails`.`id` = `ProductDetails.variations`.`ProductDetails`
left join `ProductDetails.variations.selectedVariation` on `ProductDetails.variations`.`id` = `ProductDetails.variations.selectedVariation`.`ProductDetails.variations`
group by `ProductDetails.variations`.`id`
)
left join `ProductDetails.images` on `productId` = `ProductDetails.images`.`ProductDetails`
group by `variationId`
)
left join `ProductDetails.specs` on `productId` = `ProductDetails.specs`.`ProductDetails`
group by `variationId`
false
true
*://*.doubleclick.net/*
*://*.amazon-adsystem.com/*
*://*.google-analytics.com/*
*://*.googlesyndication.com/*
*://*.advertising.com/*
*://*.imrworldwide.com/*
*://*.quantserve.com/*
*://*.googleadservices.com/*
*://*.scorecardresearch.com/*
48ec821ee923a351a6c90d3d37b561ba
v8Uyj7gNSKrYLCiL5OLidsK3j8QzlMgEOYOrq+hZpoa29HQZaAdj5RU4qkjG8nd4W1puubs0s9KL0zhU7OOhUT1XHKTL3mosMFIBrS+aBHCoFtK6cH7LUtybxjbZ4Ahwe8kMSJUQ8VesFaxFk7HkzrCkw4lWdxZlKHVJLyppY/docaKfZaYzEzWL377sw5apoauUCryEs3gxtn9jDsFlIXojQozSMuiDFE4bZFLEpBNoOvKEZ0kIrsbhC6iZz6i58+HlLIcbN5sK//8Yu4+RdwjfXVWGYJvEpVyiLmHEKab6zVevctMy2bBV8H7XWEGbR1nVcCIiD1yK09nlk1INQw==