【发布时间】:2017-04-12 23:55:46
【问题描述】:
这是我的情况:我必须登录一个网站并从那里下载一个 CSV,从 linux 服务器无头。页面使用JS,没有它就无法工作。
经过一些研究,我选择了 Selenium 和 PhantomJS。 登录、设置 CSV 的参数、找到 Selenium/PhantomJS/Py3 的下载按钮都没有问题,实际上非常愉快。
但是点击下载按钮并没有做任何事情。经过一番研究,我发现 PhantomJS 似乎不支持下载对话框和下载,但它在即将推出的功能列表中。
所以在我发现下载按钮只是调用 REST API Url 之后,我想我使用 urllib 的解决方法。问题是,它仅在您登录该站点时才有效。
所以第一次尝试失败了,因为它返回了:b'{"success":false,"session":"expired"}',这是有道理的,因为我希望 Selenium 和 urllib 使用不同的会话。
所以我想我在 urrlib 中使用 Seleniums 驱动程序的标头尝试这个:
...
url = 'http://www.foo.com/api/index'
data = urllib.parse.urlencode({
'foopara': 'cadbrabar',
}).encode('utf-8')
headers = {}
for cookie in driver.get_cookies():
headers[cookie['name']] = cookie['value']
req = urllib.request.Request(url, data, headers)
with urllib.request.urlopen(req) as response:
page = response.read()
driver.close()
不幸的是,这产生了与过期会话相同的结果。我做错了什么,有没有办法解决这个问题,其他建议还是我陷入了死胡同?提前致谢。
【问题讨论】:
标签: python csv selenium phantomjs