我正在尝试使用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()。
但该页面确实正确加载了链接的网址。
欢迎任何想法。
查尔斯
答案 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)
你只需找到合适的选择器。
我不知道您要在哪个页面上执行任务,因此我无法修复您的代码。但我希望这会对你有所帮助。