我想从运行在Ubuntu服务器上的脚本登录到我的雅虎帐户。我试图用机械化来使用python,但是我的计划中存在缺陷。如何从Ubuntu服务器以编程方式登录
这是我现在的代码。
loginurl = "https://login.yahoo.com/config/login"
br = mechanize.Browser()
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)
br.set_handle_equiv(True)
br.set_handle_gzip(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
r = br.open(loginurl)
html = r.read()
br.select_form(nr=0)
br.form['login']='[mylogin]'
br.form['passwd']='[mypassword]'
br.submit()
print br.response().read()
我得到的回应是一个带有大胆红色文本阅读的雅虎登录页面。 “JavaScript必须在你的浏览器上启用”或类似的东西。机械化文档中有一部分提到用JS创建cookie的页面,但是帮助页面返回一个HTTP 400(只是我的运气)
搞清楚javascript做了什么,然后手动进行操作听起来像一个非常困难的任务。我会非常乐意切换到任何工具/语言,只要它可以在ubuntu服务器上运行即可。即使这意味着使用不同的工具进行登录,然后将登录cookie传递回我的python脚本。任何帮助/建议表示赞赏。
更新:
我不希望使用雅虎的API
我也试图与scrapy,但我认为同样的问题发生
我scrapy脚本
class YahooSpider(BaseSpider):
name = "yahoo"
start_urls = [
"https://login.yahoo.com/config/login?.intl=us&.lang=en-US&.partner=&.last=&.src=&.pd=_ver%3D0%26c%3D%26ivt%3D%26sg%3D&pkg=&stepid=&.done=http%3a//my.yahoo.com"
]
def parse(self, response):
x = HtmlXPathSelector(response)
print x.select("//input/@value").extract()
return [FormRequest.from_response(response,
formdata={'login': '[my username]', 'passwd': '[mypassword]'},
callback=self.after_login)]
def after_login(self, response):
# check login succeed before going on
if response.url == 'http://my.yahoo.com':
return Request("[where i want to go next]",
callback=self.next_page, errback=self.error, dont_filter=True)
else:
print response.url
self.log("Login failed.", level=log.CRITICAL)
def next_page(sekf, response):
x = HtmlXPathSelector(response)
print x.select("//title/text()").extract()
的scrapy脚本只输出 “https://login.yahoo.com/config/login” ......嘘
是不是有雅虎API的那种东西? – 2012-08-15 18:05:38
是的,但不幸的是它的功能有限 – DrLazer 2012-08-15 19:11:03
我没有任何问题使用你的脚本。 – xbb 2012-08-17 19:02:16