我在Google SERP页面上搜索iMacro Universal Search结果。这些主要是新闻和图像。我找到div class
(用于新闻)和div id
(用于图片),然后将导出和写入URL过滤到导出文件中。类和id的名称通常不会被Google修改,因此与它们的关系稳定且足够轻松。
这就像它应该的那样,与SERP上的位置无关,onebox(带有新闻或图像的div)出现。然而,onebox可以出现在不同的SERP位置:第一个有机结果之前,第一个和第二个之间,第二个第三,等等。
问题:通用搜索结果,特别是新闻,图片和本地包,可以出现在SERP上的不同位置:在第一个有机结果之前,第一个和第二个,第二个和第三个,第九个和第十个之间,如截图:
我希望我的iMacro 跟踪onebox实现的位置,并将其写入同一文件的第二列,其中写入排名网址。 I. e。如果新闻出现在第一个有机结果之前,我想得到1,如果在第一个和第二个之间 - 2,在9到10之间。
以下是关于我的iMacros的新闻栏:
SET !ERRORIGNORE YES
TAB T=1
TAB CLOSEALLOTHERS
URL GOTO=https://www.google.de/?gws_rd=ssl
TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:f ATTR=NAME:q CONTENT=iphone
TAG POS=1 TYPE=INPUT:SUBMIT FORM=ID:tsf ATTR=TYPE:submit
TAG POS=1 TYPE=DIV ATTR=CLASS:"mnr-c _yE" EXTRACT=HTM
SET !EXTRACT EVAL("'{{!EXTRACT}}'.match(/href="([^\'\"]+)/g);")
SAVEAS TYPE=EXTRACT FOLDER=* FILE=links.csv
修改 编辑并使用javascript代码,现在查找我: var macro;
macro ="CODE:";
macro +="TAG POS=1 TYPE=H3 ATTR=CLASS:"r" EXTRACT=HTM";
iimPlay(macro)
table=iimGetLastExtract();
table=table.split("<tr>");
for(var t=0;t<table.length;t++)
{
if(table[t].indexOf('class="mnr-c _yE"')!=-1)
{
var position=t;
position++;
break;
}
}
alert(position);
但是得到一个错误:
SyntaxError: missing ; before statement, line NaN (Error code: -991)
每个搜索结果都放在<div class="g"></div>
内,因此在SERP上有10个有机搜索结果是10个div
s。它可以是如何获得搜索结果的数量的方法,在其之后或之前出现一个框 - 计数,之前出现了多少div class="g"
。但我想念一个能够编码的技巧:(
答案 0 :(得分:1)
您是否尝试过使用JavaScript。
如果获得整个表并使用iimGetLastExtract()存储它,则可以将数据存储到变量中并拆分到表行标记上。像吼叫一样,
var macro;
macro ="CODE:";
macro +="TAG POS=1 TYPE=TABLE ATTR=CLASS:something EXTRACT=HTM";
iimPlay(macro)
table=iimGetLastExtract();
table=table.split("<tr>");
for(var t=0;t<table.length;t++)
{
if(table[t].indexOf("someHtmlTag")!=-1)
{
var position=t;
position++;
break;
}
}
alert(position);
我不太明白这个问题,但我希望这会有所帮助。
编辑:使用FIREBUG检查新闻ONBOX的HTML属性。然后,在代码的一部分指出该财产。 FOR EXAMPLE class =“OneBox”......
答案 1 :(得分:1)
整个宏看起来像:
TAB T=1
TAB CLOSEALLOTHERS
URL GOTO=https://www.google.de/?gws_rd=ssl
TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:f ATTR=NAME:q CONTENT=iphone
TAG POS=1 TYPE=INPUT:SUBMIT FORM=ID:tsf ATTR=TYPE:submit
WAIT SECONDS=3
SET S "(function(){var elsH3 = window.document.getElementsByTagName('h3');"
ADD S "for (i = 0; i < elsH3.length; i++)"
ADD S "elsH3[i].setAttribute('searchnumber', i + 1);})()"
URL GOTO=javascript:{{S}}
SET !EXTRACT_TEST_POPUP NO
TAG POS=1 TYPE=DIV ATTR=CLASS:"mnr-c _yE" EXTRACT=HTM
SET oneBox EVAL("'{{!EXTRACT}}'.match(/href="([^\'\"]+)/g);")
SET !EXTRACT NULL
SET !TIMEOUT_STEP 0
TAG POS=R-1 TYPE=H3 ATTR=CLASS:"r" EXTRACT=HTM
SET searchNumberBefore EVAL("'{{!EXTRACT}}'.match(/searchnumber=\"(.*?)\"/)[1];")
SET !EXTRACT "after {{searchNumberBefore}}[EXTRACT]{{oneBox}}"
SAVEAS TYPE=EXTRACT FOLDER=* FILE=links.csv
这是我的想法:
SET S "(function(){var elsH3 = window.document.getElementsByTagName('h3');"
ADD S "for (i = 0; i < elsH3.length; i++)"
ADD S "elsH3[i].setAttribute('searchnumber', i + 1);})()"
URL GOTO=javascript:{{S}}
SET !EXTRACT_TEST_POPUP NO
SET !TIMEOUT_STEP 0
TAG POS=1 TYPE=DIV ATTR=CLASS:"mnr-c _yE" EXTRACT=HTM
SET !EXTRACT NULL
TAG POS=R-1 TYPE=H3 ATTR=CLASS:"r" EXTRACT=HTM
SET searchNumberBefore EVAL("'{{!EXTRACT}}'.match(/searchnumber=\"(.*?)\"/)[1];")
SET !EXTRACT NULL
TAG POS=R1 TYPE=H3 ATTR=CLASS:"r" EXTRACT=HTM
SET searchNumberAfter EVAL("'{{!EXTRACT}}'.match(/searchnumber=\"(.*?)\"/)[1];")
PROMPT "between {{searchNumberBefore}} and {{searchNumberAfter}}"
改进此代码并将其调整为宏。