点击Ghost.py链接

时间:2014-02-10 19:04:16

标签: python ghost.py

我正在尝试使用Ghost.py进行网页抓取。我正在尝试关注链接,但Ghost似乎并没有真正评估javascript并按照链接。我的问题是我在HTTPS会话中,不能使用重定向。我还查看了其他选项(如selenium),但我无法在运行脚本的机器上安装浏览器。我还有一些javascript评估,所以我不能使用mechanize。

这就是我做的......

## Open the website
page,resources = ghost.open('https://my.url.com/')

## Fill textboxes of the form (the form didn't have a name)
result, resources = ghost.set_field_value("input[name=UserName]", "myUser")
result, resources = ghost.set_field_value("input[name=Password]", "myPass")

## Submitting the form
result, resources = ghost.evaluate( "document.getElementsByClassName('loginform')[0].submit();", expect_loading=True)

## Print the link to make sure that's the one I want to follow
#result, resources = ghost.evaluate( "document.links[4].href")

## Click the link
result, resources = ghost.evaluate( "document.links[4].click()")

#print ghost.content

当我看到ghost.content时,我仍然在同一页面上,结果是空的。我注意到当我在尝试评估点击时添加expect_loading = True时,我收到超时错误。

当我尝试在Chrome开发者工具控制台中运行javascript时,我得到了

  

不推荐使用event.returnValue。请使用标准   而不是event.preventDefault()。

但该页面确实正确加载了链接的网址。

欢迎任何想法。

查尔斯

1 个答案:

答案 0 :(得分:0)

我认为你使用了错误的方法。
如果您想提交表格,可以采用特殊方法:

page, resources = ghost.fire_on("loginform", "submit", expect_loading=True)

还有一种特殊的ghost.py方法可以执行点击:

ghost.click('#some-selector')

另一种可能性,如果您只想打开该链接,可以是:

link_url = ghost.evaluate("document.links[4]")[0]
ghost.open(link_url)

你只需找到合适的选择器。
我不知道您要在哪个页面上执行任务,因此我无法修复您的代码。但我希望这会对你有所帮助。