【问题标题】:Xpath of element on another website/cross domain另一个网站/跨域上元素的 Xpath
【发布时间】:2019-11-20 12:14:52
【问题描述】:

我想获取网站(我自己的域)上元素的XPATH,我使用this 答案中提到的JavaScript 代码获得了它。

现在我要点击的按钮将打开一个 url(跨域)窗口,当用户点击该窗口上的一个元素时,它的 XPATH 被捕获。

我尝试使用iframe 做同样的事情,但没有运气。

现在我的问题是有没有办法获取 another website/ Cross domain 元素的XPATH

【问题讨论】:

  • 我假设您想在客户端而不是服务器上进行此处理。如何通过GET ajax 请求获取页面,然后处理结果?不确定我是否正确理解了您的问题。任务的哪一部分对您来说有问题?
  • 感谢您的回复。通过GET 获取页面会给我html 但它会失去从页面中选择元素的用户体验,我也更新了问题。
  • 其他域可以合作吗?这样您就可以在不同域之间使用postMessage w3c.github.io/webmessaging/#dom-window-postmessage 交换数据。否则我认为没有办法使用普通的客户端脚本,除非您编写浏览器扩展程序或插件。
  • @MartinHonnen :是的,其他域是公司的。
  • 我没有问对方域是否是企业站点,而是是否可以合作,也就是说他们是否可以在他们的站点上设置脚本以使用postMessage方法与您的站点交换数据.

标签: javascript iframe xpath cross-domain


【解决方案1】:

抱歉,如果没有其他(x 域)站点的合作,这是不可能的。出于安全原因,浏览器被设计为不允许访问 x 域文档(包括iframe)的 DOM。

如果您有其他站点的合作,他们可以加载您的javascript文件,然后使用postmessage将xpath传递给原始页面。

其他选项是创建用户可以在其他页面上使用的书签,或浏览器扩展(Chrome 和 FF 很容易开发)...取决于您的用例。

【讨论】:

    【解决方案2】:

    从您的 cmets 中,我收集到您希望从另一个没有包含您的域的 Access-Control-Allow-Origin 标头的网站捕获信息(例如,另一个站点没有启用 CORS)。由于在大多数现代浏览器中实现了Same-Origin Policy,这不可能进行跨域和客户端。同源策略阻止您网站上的任何资源与任何其他网站上的资源进行交互(除非其他网站使用 Access-Control-Allow-Origin HTTP 标头明确与您的网站共享它们)。

    如果您想从您的站点获取有关另一个站点的信息,则无法使用服务器端代码。一个简单的解决方案是实现一个服务器端代理,从您自己的来源重新提供站外页面,这样就不会违反同源政策。

    【讨论】:

    • 没错,但是在服务器端获取 html 对我不起作用,因为我希望用户从网页中选择元素以获得相同的 XPATH
    • @Arpit 据我所知,如果没有任何服务器端代码,这是不可能的,抱歉。
    【解决方案3】:

    您可以使用 jQuery 的load 函数获取数据,并将其附加到您的页面。

    从那里,您的外部页面中的 DOM 节点应该可以访问以供您处理。

    $('#where-you-want').load('//example.com body', function() {
        console.log($('#where-you-want'))
    
        // process the DOM node under `#where-you-want` here with XPath.
    })
    

    您可以在此处查看此操作:http://jsfiddle.net/xsvkdugo/

    P.S.:这假设您正在使用启用了CORS 的站点。

    【讨论】:

    • 这在我的情况下不起作用,因为它会失去从网站选择元素的用户体验。
    • @Arpit 没问题,然后附加到您的页面而不是文档片段。我已经相应地更新了答案。
    • 这肯定会导致Access-Control-Allow-Origin
    • 什么意思?您必须启用 CORS 才能做到这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-10
    • 1970-01-01
    • 2019-05-13
    相关资源
    最近更新 更多