为了清楚我正在使用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内。
答案 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'