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

时间:2015-01-12 12:14:07

标签: xpath coffeescript web-scraping casperjs spookyjs

为了清楚我正在使用SpookyJS,这是一个允许无头CasperJS的库。

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

  

无法在不存在的选择器

上调度mousedown事件

我在该功能尝试点击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内。

1 个答案:

答案 0 :(得分:2)

问题是该元素位于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'
相关问题