xpath - 所有 XPath 在 CasperJS 中都返回一个不存在的错误?

标签 xpath coffeescript web-scraping casperjs spookyjs

为了清楚起见,我使用的是 SpookyJS,它是一个允许 headless CasperJS 的库。

我可以在所有其他页面上单击并选择其他 XPath,问题仅在特定页面上,页面加载完美,但所有 XPath 都返回此错误。

Cannot dispatch mousedown event on nonexistent selector



在函数尝试单击 xPath 之前,我截取了一个屏幕截图,屏幕截图显示页面已完美加载。

如果我尝试使用 waitForSelector函数我收到超时错误,我在不同的页面上尝试了不同的 XPath,但它们都不起作用。

这是我在 CoffeeScript 中的代码,不要介意 spooky.then把它想象成casper.then :

// 3 steps occur before this and they work perfectly
spooky.then([{x:selectXPath}, () ->
  @wait(3000, () ->
    eval(x) // This loads the xPath function
    @capture('server/components/spooky/img.png')
    @click(xPath('//*[@id="wp-page-header-middle"]/table/tbody/tr/td[1]/a'))
  )
])

我感兴趣的表在 iframe 内。

最佳答案

问题是该元素位于 iframe 内部。可以选择元素,但您首先需要切换到 iframe 的上下文才能对其运行操作。这是通过 withFrame() 完成的。 .您可以按索引或名称选择 iframe。这是一个索引示例(第一个 iframe):

@withFrame(0, () ->
    @click(xPath('//*[@id="wp-page-header-middle"]/table/tbody/tr/td[1]/a'))
)

您可能还需要调整 XPath,因为 tbody最初可能不会出现在标记中。 PhantomJS 1.x 不像现代浏览器那样添加它,所以你可能需要动态地这样做:
'//*[@id="wp-page-header-middle"]/table//tr/td[1]/a'

关于xpath - 所有 XPath 在 CasperJS 中都返回一个不存在的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27901778/

相关文章:

javascript - 以rails形式调用coffeescript

coffeescript - CoffeeScript 的存在运算符是如何工作的?

python - 如何从这个亚马逊模板中提取平均星级?(python,网络抓取)

javascript - 使用phantomjs抓取网页时如何获取css文件和js文件

python - Selenium/xpath 从下拉菜单中获取文本

xml - 在内存中的 XQuery 中多次编辑同一个文档节点

带有 Coffeescript 类的 Angularjs

python - 如何在python 3中获取该站点中的json数据?

xml - 如何使用 XSLT 1.0 获取小写的 xml 节点

Php 和 Xpath - 如何从节点内部获取文本