【问题标题】:How to access HTML DOM Property using iMacros - xPath如何使用 iMacros - xPath 访问 HTML DOM 属性
【发布时间】:2020-04-12 16:52:47
【问题描述】:

iMacros 版本:10.0.2.1450(免费)、Firefox、WINdow 10

你好, 目的是为从website 显示的每个图像提取 HTML DOM 属性的值,例如 id、href 和 data-download-file-url。我相信 XPATH 将适合这项任务,因为每个图像都可以通过以下泛化 XPATH 访问

/html/body/main/section[2]/div/div/figure[X]/div

大写X表示上述网站的取值范围为1到50的Image标签。

我知道,以提取图1的属性为例,可以通过

TAG XPATH="/html/body/main/section[2]/div/div/figure[1]"  EXTRACT=TXT

但是,上面的行输出了所有 DOM 属性,包括我不感兴趣的属性。

根据下面的教程;

[OP1][https://forum.imacros.net/viewtopic.php?t=26155] [OP2][How to extract specific text with imacros xpath

提取特定的 DOM 属性可以通过以下方式实现

TAG XPATH="/html/body/main/section[2]/div/div/figure[1]/div[@id='showcase__content'] "  EXTRACT=TXT

但是,执行反而报错。

如果有人能阐明这个问题,我真的很感激。

图 1 的 DOM 属性示例。这些属性都是粉红色的。 https://drive.google.com/open?id=190q615C3uXLZUQNI8K4AJYL3Slii1ktO

【问题讨论】:

    标签: javascript xpath web-scraping macros imacros


    【解决方案1】:

    您的 XPath 包含错误(@id 而不是 @class)。修复它:

    //figure[1]/div[@class='showcase__content']
    

    要访问下载文件的 url,它将是:

    //figure[1]/div[@class='showcase__content']//@data-download-file-url
    

    编辑:要从特定属性中获取值,您必须使用 HTM 函数从元素中提取代码,然后使用正则表达式。可以直接提取HREF属性。

    我不是 imacros 用户,所以我的代码可能不是最聪明的:

    VERSION BUILD=1005 RECORDER=CR
    URL GOTO=https://www.freepik.com/search?dates=any&format=search&page=1&query=Polygonal%20Human&sort=popular
    TAG XPATH="//figure[1]/div[@class='showcase__content']/a" EXTRACT=HREF
    SET !VAR3 {{!EXTRACT}}
    TAG XPATH="//figure[1]/div[@class='showcase__content']/a" EXTRACT=HTM
    SET !VAR1 EVAL("var regex = /url=\"(.+?)\"/; var str = '{{!EXTRACT}}';str.match(regex)[1];")
    SET !VAR2 EVAL("var regex = /id=\"(.+?)\"/; var str = '{{!EXTRACT}}';str.match(regex)[1];")
    PROMPT {{!VAR1}}
    PROMPT {{!VAR2}}
    PROMPT {{!VAR3}}
    

    附注:imacros 的免费用户仅限于 3 个声明的变量(!VAR1 到 3)。您可能需要循环和 SET !EXTRACT_TEST_POPUP NO 来实现您的最终目标。

    【讨论】:

    • 感谢@e.wiest 的及时回复。我尝试了您提出的建议,但它产生了#EANF# 的错误。仅供参考,我曾尝试使用双斜杠和单斜杠(即 // 和 /)。感谢任何提示
    • 添加我之前的评论:您的第二个提案产生错误 TypeError: element.getBoundingClientRect is not a function
    • 好的。我想到了。我已经发布了一个代码示例。
    • 它就像一个魅力。谢谢你。我会完善代码,稍后分享
    • '+1' 也来自我的这个答案@E.Wiest,实际上几乎是“太聪明了”,啊-啊......!赞扬...! - 我在 iMacros 论坛上的#OP 并行线程中发布了一些评论/反馈...:forum.imacros.net/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-13
    • 1970-01-01
    • 1970-01-01
    • 2011-08-12
    • 2019-09-23
    • 2015-02-10
    • 2017-06-05
    相关资源
    最近更新 更多