21
InfiniteScroll :: a:(premade "{\"Version\":0,\"Name\":null,\"Options\":{\"Selector\":null,\"Skip\":false,\"Take\":true,\"Output\":null},\"Parameters\":{\"itemSelector\":{\"Caption\":\"List Item Selector\",\"Default\":null,\"Type\":3,\"Options\":null,\"Optional\":false},\"scrollDelay\":{\"Caption\":\"After Scroll Delay\",\"Default\":\"100\",\"Type\":1,\"Options\":null,\"Optional\":false},\"removeOldElements\":{\"Caption\":\"Remove Old Elements\",\"Default\":\"true\",\"Type\":2,\"Options\":null,\"Optional\":false}},\"Variables\":null,\"HasParameters\":true,\"HasVariables\":false,\"HasOptions\":true}") = {
\itemSelector scrollDelay removeOldElements.{
(Browser.ScrollLoop {
itemSelector
} {
(Sequence.First {
itemSelector
})
Browser.ScrollToBottom
(Browser.Wait {
scrollDelay
})
} {
removeOldElements
})
}
}
Main = {
Setup -> { startingUrl maxTweets }
(Browser.Load {
startingUrl
})
(Sequence.Take {
maxTweets
} {
(InfiniteScroll {
Select.TweetContainer
} {
1000
} {
False
})
})
Tweet
}
Setup = {
(@Core.Unit #{
startingUrl: {
"https://twitter.com/search?q=web+scraping&src=typd"
}
maxTweets: {
500
}
})
}
Tweet = {
(@Core.Unit #{
permalink: {
Gather.Permalink
}
fullname: {
Select.Fullname
}
username: {
Select.Username
}
userAddress: {
Select.Fullname
Gather.Link
}
timestamp: {
Select.Timestamp
Gather.DataTime
}
text: {
Select.Text
}
quotePermalink: {
Select.Quote
Gather.Link
}
quoteFullname: {
Select.QuoteFullname
}
quoteUsername: {
Select.QuoteUsername
}
quoteText: {
Select.QuoteText
}
replyCount: {
Select.ReplyCount
Gather.Number
}
retweetCount: {
Select.RetweetCount
Gather.Number
}
likeCount: {
Select.LikeCount
Gather.Number
}
image: {
Select.Image
Gather.Src
}
externalLink: {
Select.Card
Gather.DataCardUrl
}
})
}
Main
permalink
String
fullname
String
username
String
userAddress
String
timestamp
String
text
String
quotePermalink
String
quoteFullname
String
quoteUsername
String
quoteText
String
replyCount
String
retweetCount
String
likeCount
String
image
String
externalLink
String
Card
{
"id2": {
"val": ""
},
"id3": {
"val": ""
},
"text": {
"val": ""
},
"class2": {
"content": true
},
"color": {
"val": "rgb(20, 23, 26)"
},
"tag3": {
"val": "DIV"
},
"class": {
"js-macaw-cards-iframe-container": true
},
"class1": {
"card2": true,
"js-media-container": true
},
"visible": {
"val": true
},
"tag": {
"val": "DIV"
},
"id": {
"val": ""
},
"id1": {
"val": ""
},
"tag2": {
"val": "DIV"
},
"font": {
"val": "\"Segoe UI\", Arial, sans-serif"
},
"tag1": {
"val": "DIV"
},
"classes2": {
"val": "content"
},
"_tolerance": {
"val": 0.044
}
}
Fullname
{
"id2": {
"val": ""
},
"id3": {
"val": ""
},
"class3": {
"stream-item-header": true
},
"classes1": {
"val": "FullNameGroup"
},
"class2": {
"account-group": true,
"js-account-group": true,
"js-action-profile": true,
"js-user-profile-link": true,
"js-nav": true
},
"classes": {
"val": "fullname show-popup-with-id u-textTruncate "
},
"color": {
"val": "rgb(20, 23, 26)"
},
"tag3": {
"val": "DIV"
},
"classes3": {
"val": "stream-item-header"
},
"class": {
"fullname": true,
"show-popup-with-id": true,
"u-textTruncate": true
},
"class1": {
"FullNameGroup": true
},
"visible": {
"val": true
},
"tag": {
"val": "STRONG"
},
"id": {
"val": ""
},
"id1": {
"val": ""
},
"tag2": {
"val": "A"
},
"font": {
"val": "\"Segoe UI\", Arial, sans-serif"
},
"tag1": {
"val": "SPAN"
},
"classes2": {
"val": "account-group js-account-group js-action-profile js-user-profile-link js-nav"
},
"_tolerance": {
"val": 0.044
}
}
Image
{
"id2": {
"val": ""
},
"id3": {
"val": ""
},
"classes1": {
"val": "AdaptiveMedia-photoContainer js-adaptive-photo "
},
"text": {
"val": ""
},
"classes": {
"val": ""
},
"color": {
"val": "rgb(20, 23, 26)"
},
"tag3": {
"val": "DIV"
},
"class1": {
"AdaptiveMedia-photoContainer": true,
"js-adaptive-photo": true
},
"childrenLen": {
"val": 0
},
"visible": {
"val": true
},
"tag": {
"val": "IMG"
},
"id": {
"val": ""
},
"id1": {
"val": ""
},
"tag2": {
"val": "DIV"
},
"font": {
"val": "\"Segoe UI\", Arial, sans-serif"
},
"tag1": {
"val": "DIV"
},
"_tolerance": {
"val": 0.044
}
}
LikeCount
{
"id2": {
"val": ""
},
"id3": {
"val": ""
},
"class3": {
"ProfileTweet-actionCountList": true,
"u-hiddenVisually": true
},
"classes1": {
"val": "ProfileTweet-actionCount"
},
"class2": {
"ProfileTweet-action--favorite": true,
"u-hiddenVisually": true
},
"classes": {
"val": "ProfileTweet-actionCountForAria"
},
"color": {
"val": "rgb(101, 119, 134)"
},
"tag3": {
"val": "DIV"
},
"classes3": {
"val": "ProfileTweet-actionCountList u-hiddenVisually"
},
"class": {
"ProfileTweet-actionCountForAria": true
},
"class1": {
"ProfileTweet-actionCount": true
},
"childrenLen": {
"val": 0
},
"visible": {
"val": true
},
"tag": {
"val": "SPAN"
},
"id1": {
"val": ""
},
"tag2": {
"val": "SPAN"
},
"font": {
"val": "\"Segoe UI\", Arial, sans-serif"
},
"tag1": {
"val": "SPAN"
},
"classes2": {
"val": "ProfileTweet-action--favorite u-hiddenVisually"
},
"_tolerance": {
"val": 0.044
}
}
Quote
{
"id2": {
"val": ""
},
"id3": {
"val": ""
},
"class3": {
"content": true
},
"classes1": {
"val": "QuoteTweet-container"
},
"text": {
"val": ""
},
"classes": {
"val": "QuoteTweet-link js-nav"
},
"color": {
"val": "rgb(28, 148, 224)"
},
"tag3": {
"val": "DIV"
},
"classes3": {
"val": "content"
},
"class": {
"QuoteTweet-link": true,
"js-nav": true
},
"class1": {
"QuoteTweet-container": true
},
"childrenLen": {
"val": 0
},
"visible": {
"val": true
},
"tag": {
"val": "A"
},
"id": {
"val": ""
},
"id1": {
"val": ""
},
"tag2": {
"val": "DIV"
},
"font": {
"val": "\"Segoe UI\", Arial, sans-serif"
},
"tag1": {
"val": "DIV"
},
"_tolerance": {
"val": 0.044
}
}
QuoteFullname
{
"id2": {
"val": ""
},
"id3": {
"val": ""
},
"class3": {
"tweet-content": true
},
"classes1": {
"val": "QuoteTweet-originalAuthor u-cf u-textTruncate stream-item-header account-group js-user-profile-link"
},
"class2": {
"QuoteTweet-authorAndText": true,
"u-alignTop": true
},
"classes": {
"val": "QuoteTweet-fullname u-linkComplex-target"
},
"color": {
"val": "rgb(20, 23, 26)"
},
"tag3": {
"val": "DIV"
},
"classes3": {
"val": "tweet-content"
},
"class": {
"QuoteTweet-fullname": true,
"u-linkComplex-target": true
},
"class1": {
"QuoteTweet-originalAuthor": true,
"u-cf": true,
"u-textTruncate": true,
"stream-item-header": true,
"account-group": true,
"js-user-profile-link": true
},
"childrenLen": {
"val": 0
},
"visible": {
"val": true
},
"tag": {
"val": "B"
},
"id": {
"val": ""
},
"id1": {
"val": ""
},
"tag2": {
"val": "DIV"
},
"font": {
"val": "\"Segoe UI\", Arial, sans-serif"
},
"tag1": {
"val": "DIV"
},
"classes2": {
"val": "QuoteTweet-authorAndText u-alignTop"
},
"_tolerance": {
"val": 0.044
}
}
QuoteText
{
"id2": {
"val": ""
},
"id3": {
"val": ""
},
"class3": {
"QuoteTweet-innerContainer": true,
"u-cf": true,
"js-permalink": true,
"js-media-container": true
},
"classes1": {
"val": "QuoteTweet-authorAndText u-alignTop"
},
"class2": {
"tweet-content": true
},
"classes": {
"val": "QuoteTweet-text tweet-text u-dir"
},
"color": {
"val": "rgb(20, 23, 26)"
},
"tag3": {
"val": "DIV"
},
"classes3": {
"val": "QuoteTweet-innerContainer u-cf js-permalink js-media-container"
},
"class": {
"QuoteTweet-text": true,
"tweet-text": true,
"u-dir": true
},
"class1": {
"QuoteTweet-authorAndText": true,
"u-alignTop": true
},
"visible": {
"val": true
},
"tag": {
"val": "DIV"
},
"id": {
"val": ""
},
"id1": {
"val": ""
},
"tag2": {
"val": "DIV"
},
"font": {
"val": "\"Segoe UI\", Arial, sans-serif"
},
"tag1": {
"val": "DIV"
},
"classes2": {
"val": "tweet-content"
},
"_tolerance": {
"val": 0.044
}
}
QuoteUsername
{
"id2": {
"val": ""
},
"id3": {
"val": ""
},
"class3": {
"QuoteTweet-authorAndText": true,
"u-alignTop": true
},
"classes1": {
"val": "username u-dir u-textTruncate"
},
"class2": {
"QuoteTweet-originalAuthor": true,
"u-cf": true,
"u-textTruncate": true,
"stream-item-header": true,
"account-group": true,
"js-user-profile-link": true
},
"classes": {
"val": ""
},
"color": {
"val": "rgb(101, 119, 134)"
},
"tag3": {
"val": "DIV"
},
"classes3": {
"val": "QuoteTweet-authorAndText u-alignTop"
},
"class1": {
"username": true,
"u-dir": true,
"u-textTruncate": true
},
"childrenLen": {
"val": 0
},
"visible": {
"val": true
},
"tag": {
"val": "B"
},
"id": {
"val": ""
},
"id1": {
"val": ""
},
"tag2": {
"val": "DIV"
},
"font": {
"val": "\"Segoe UI\", Arial, sans-serif"
},
"tag1": {
"val": "SPAN"
},
"classes2": {
"val": "QuoteTweet-originalAuthor u-cf u-textTruncate stream-item-header account-group js-user-profile-link"
},
"_tolerance": {
"val": 0.044
}
}
ReplyCount
{
"id2": {
"val": ""
},
"id3": {
"val": ""
},
"class3": {
"ProfileTweet-actionCountList": true,
"u-hiddenVisually": true
},
"classes1": {
"val": "ProfileTweet-actionCount"
},
"class2": {
"ProfileTweet-action--reply": true,
"u-hiddenVisually": true
},
"classes": {
"val": "ProfileTweet-actionCountForAria"
},
"color": {
"val": "rgb(101, 119, 134)"
},
"tag3": {
"val": "DIV"
},
"classes3": {
"val": "ProfileTweet-actionCountList u-hiddenVisually"
},
"class": {
"ProfileTweet-actionCountForAria": true
},
"class1": {
"ProfileTweet-actionCount": true
},
"childrenLen": {
"val": 0
},
"visible": {
"val": true
},
"tag": {
"val": "SPAN"
},
"id1": {
"val": ""
},
"tag2": {
"val": "SPAN"
},
"font": {
"val": "\"Segoe UI\", Arial, sans-serif"
},
"tag1": {
"val": "SPAN"
},
"classes2": {
"val": "ProfileTweet-action--reply u-hiddenVisually"
},
"_tolerance": {
"val": 0.044
}
}
RetweetCount
{
"id2": {
"val": ""
},
"id3": {
"val": ""
},
"class3": {
"ProfileTweet-actionCountList": true,
"u-hiddenVisually": true
},
"classes1": {
"val": "ProfileTweet-actionCount"
},
"class2": {
"ProfileTweet-action--retweet": true,
"u-hiddenVisually": true
},
"classes": {
"val": "ProfileTweet-actionCountForAria"
},
"color": {
"val": "rgb(101, 119, 134)"
},
"tag3": {
"val": "DIV"
},
"classes3": {
"val": "ProfileTweet-actionCountList u-hiddenVisually"
},
"class": {
"ProfileTweet-actionCountForAria": true
},
"class1": {
"ProfileTweet-actionCount": true
},
"childrenLen": {
"val": 0
},
"visible": {
"val": true
},
"tag": {
"val": "SPAN"
},
"id1": {
"val": ""
},
"tag2": {
"val": "SPAN"
},
"font": {
"val": "\"Segoe UI\", Arial, sans-serif"
},
"tag1": {
"val": "SPAN"
},
"classes2": {
"val": "ProfileTweet-action--retweet u-hiddenVisually"
},
"_tolerance": {
"val": 0.044
}
}
Text
{
"id2": {
"val": ""
},
"id3": {
"val": ""
},
"class3": {
"tweet": true,
"js-stream-tweet": true,
"js-actionable-tweet": true,
"js-profile-popup-actionable": true,
"dismissible-content": true,
"original-tweet": true,
"js-original-tweet": true
},
"classes1": {
"val": "js-tweet-text-container"
},
"class2": {
"content": true
},
"color": {
"val": "rgb(20, 23, 26)"
},
"tag3": {
"val": "DIV"
},
"class": {
"TweetTextSize": true,
"js-tweet-text": true,
"tweet-text": true
},
"class1": {
"js-tweet-text-container": true
},
"visible": {
"val": true
},
"tag": {
"val": "P"
},
"id": {
"val": ""
},
"id1": {
"val": ""
},
"tag2": {
"val": "DIV"
},
"font": {
"val": "\"Segoe UI\", Arial, sans-serif"
},
"tag1": {
"val": "DIV"
},
"classes2": {
"val": "content"
},
"_tolerance": {
"val": 0.044
}
}
Timestamp
{
"id2": {
"val": ""
},
"id3": {
"val": ""
},
"class3": {
"stream-item-header": true
},
"classes1": {
"val": "tweet-timestamp js-permalink js-nav js-tooltip"
},
"class2": {
"time": true
},
"color": {
"val": "rgb(101, 119, 134)"
},
"tag3": {
"val": "DIV"
},
"classes3": {
"val": "stream-item-header"
},
"class": {
"_timestamp": true,
"js-short-timestamp": true
},
"class1": {
"tweet-timestamp": true,
"js-permalink": true,
"js-nav": true,
"js-tooltip": true
},
"childrenLen": {
"val": 0
},
"visible": {
"val": true
},
"tag": {
"val": "SPAN"
},
"id": {
"val": ""
},
"id1": {
"val": ""
},
"tag2": {
"val": "SMALL"
},
"font": {
"val": "\"Segoe UI\", Arial, sans-serif"
},
"tag1": {
"val": "A"
},
"classes2": {
"val": "time"
},
"_tolerance": {
"val": 0.044
}
}
TweetContainer
{
"id2": {
"val": ""
},
"id3": {
"val": ""
},
"class3": {
"stream-container": true
},
"classes1": {
"val": "stream-items js-navigable-stream"
},
"class2": {
"stream": true
},
"classes": {
"val": "js-stream-item stream-item stream-item\n"
},
"color": {
"val": "rgb(20, 23, 26)"
},
"tag3": {
"val": "DIV"
},
"classes3": {
"val": "stream-container "
},
"class": {
"js-stream-item": true,
"stream-item": true
},
"class1": {
"stream-items": true,
"js-navigable-stream": true
},
"visible": {
"val": true
},
"tag": {
"val": "LI"
},
"id1": {
"val": "stream-items-id"
},
"tag2": {
"val": "DIV"
},
"font": {
"val": "\"Segoe UI\", Arial, sans-serif"
},
"tag1": {
"val": "OL"
},
"classes2": {
"val": "stream"
},
"_tolerance": {
"val": 0.044
}
}
Username
{
"id2": {
"val": ""
},
"id3": {
"val": ""
},
"class3": {
"stream-item-header": true
},
"classes1": {
"val": "username u-dir u-textTruncate"
},
"class2": {
"account-group": true,
"js-account-group": true,
"js-action-profile": true,
"js-user-profile-link": true,
"js-nav": true
},
"classes": {
"val": ""
},
"color": {
"val": "rgb(101, 119, 134)"
},
"tag3": {
"val": "DIV"
},
"classes3": {
"val": "stream-item-header"
},
"class1": {
"username": true,
"u-dir": true,
"u-textTruncate": true
},
"childrenLen": {
"val": 0
},
"visible": {
"val": true
},
"tag": {
"val": "B"
},
"id": {
"val": ""
},
"id1": {
"val": ""
},
"tag2": {
"val": "A"
},
"font": {
"val": "\"Segoe UI\", Arial, sans-serif"
},
"tag1": {
"val": "SPAN"
},
"classes2": {
"val": "account-group js-account-group js-action-profile js-user-profile-link js-nav"
},
"_tolerance": {
"val": 0.044
}
}
DataCardUrl
return function(element, global) {
return element.getAttribute('data-card-url');
};
true
false
DataTime
return function(element, global) {
var formatDate = function (date) {
var hours = date.getHours();
var minutes = date.getMinutes();
var ampm = hours >= 12 ? 'PM' : 'AM';
hours = hours % 12;
hours = hours ? hours : 12; // the hour '0' should be '12'
minutes = minutes < 10 ? '0'+minutes : minutes;
var strTime = hours + ':' + minutes + ' ' + ampm;
return date.getMonth()+1 + "/" + date.getDate() + "/" + date.getFullYear() + " " + strTime;
};
return formatDate(new Date(parseInt(element.getAttribute('data-time-ms'))));
};
true
false
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;
true
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
Permalink
return function(element, global) {
return new URL(element.querySelector('.tweet').getAttribute('data-permalink-path'), window.location.href).href;
};
true
false
Src
var result = function (element) {
return element.src || "";
};
result.noCache = false;
return result;
true
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
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
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
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.length > 64)
return null;
return { val: text };
};
result.score = 0.1;
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
*://*.doubleclick.net/*
*://*.amazon-adsystem.com/*
*://*.google-analytics.com/*
*://*.googlesyndication.com/*
*://*.advertising.com/*
*://*.imrworldwide.com/*
*://*.quantserve.com/*
*://*.googleadservices.com/*
*://*.scorecardresearch.com/*
7cda9a732ac4bbe4ff699786ddfe9b45
1GDE4+ltr3qVvM5/dHKM9t0gNh5tadFltoXQ0bsDRJsNgU0sh1ZRG5SfK4KDUZppzBqh+xwNm8f1m8s39sIgiLEJt2lUCUwhP6rtHXW+Lm+/vHB0QxNNTlOOilXxVgU5jsfQxC+LkjQ/KuRvgi1JI6cX6vk13JIFg6m3Dka/SlIAVIJ5qd+J1kFoA/wquKJ9Pf/gm5TGwnakABb02BJCQhrGdV0mH7ivX3+VLkNGxdTQuf3NhgTkGen0XQFpyhXsWe3t0np5lKYMxlJfNeAWzPrQKe2p2DZMKG9K1Ep4wao53AJB+k7N5sn3mOX58C8T2hsIL7ytx3LC3ErySwzqAA==