1

为了清楚起见,我使用的是 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 内。

4

1 回答 1

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'
于 2015-01-12T12:29:26.840 回答