+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

Pygoogle语音未登录

发布于2020-10-11 21:47     阅读(1033)     评论(0)     点赞(15)     收藏(5)


0

1

2

3

4

5

Google刚刚更新了他们的Google语音平台。当我的googlevoice登录名停止工作时,这似乎直接相关。

我尝试了以下方法:

  • 根据此处的建议允许验证码(pygooglevoice-login-error
  • 在这里改编2.7解决方案没有运气Python Google Voice
  • 注销我的会话,即voice.logout()
  • 卸载pygooglevoice并重新安装。
  • 尝试使用其他Google语音帐户。

这段代码在Google语音网站改头换面之前一直运行良好。python 3.5.2 Windows Server2012R2

from googlevoice import Voice
from googlevoice.util import input


voice = Voice()
voice.login(email='email@gmail.com', passwd='mypassword')


def sendText(phoneNumber,text):
    try:
        voice.send_sms(phoneNumber, text)
    except Exception:
        pass

sendText(phoneNumber=[aaabbbcccc],text="Hello from Google Voice!")

voice.logout()

错误日志:

Traceback (most recent call last):
  File voice.py, line 95, in login
    assert self.special
AssertionError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  line 7, in <module>
    voice.login(email='********', passwd='*******')
  File voice.py, line 97, in login
    raise LoginError
googlevoice.util.LoginError

解决方案


我有同样的问题。它看起来像的页面被发送回是一个显着的不同,使用Javascript / AJAX不是什么之前发送的解决方案。

我一直在弄乱它,并将其跟踪到缺少以前包含的“特殊”会话令牌。PyGoogleVoice正在从Google发回的HTML页面中搜索字符串文字“ _rnr_se”以抓取会话值。找不到该字符串,这导致它认为登录失败。据我所知,PGV需要该令牌来进行url / function调用以模仿Web客户端。

现在有一个javascript函数正在检索该变量,而不是将其传递回并硬编码在HTML页面中。

gc.net.XhrManager = function(xsrfToken, notification, loadNotification) {
  goog.events.EventTarget.call(this);
  this.xsrfToken_ = xsrfToken;
  this.notification_ = notification;
  this.loadNotification_ = loadNotification;
  this.logger_ = goog.debug.Logger.getLogger("gc.Xhr");
  this.xhrManager_ = new goog.net.XhrManager(0);
  this.activeRequests_ = new goog.structs.Map;
  this.eventHandler_ = new goog.events.EventHandler(this);
  this.eventHandler_.listen(this.xhrManager_, goog.net.EventType.SUCCESS, this.onRequestSuccess_);
  this.eventHandler_.listen(this.xhrManager_, goog.net.EventType.ERROR, this.onRequestError_);
};  

然后在进行呼叫时,它使用的值如下:

gc.net.XhrManager.prototype.sendPost = function(id, url, queryData, opt_successCallback, opt_errorCallback) {
  this.sendAnalyticsEvent_(url, queryData);
  id = goog.string.buildString(id, this.idGenerator_.getNextUniqueId());
  if (goog.isDefAndNotNull(queryData) && !(queryData instanceof goog.Uri.QueryData)) {
    throw Error("queryData parameter must be of type goog.Uri.QueryData");
  }
  var uri = new goog.Uri(url), completeQueryData = queryData || new goog.Uri.QueryData;
  completeQueryData.set("_rnr_se", this.xsrfToken_);
  this.activeRequests_.set(id, {queryData:completeQueryData, onSuccess:opt_successCallback, onError:opt_errorCallback});
  this.xhrManager_.send(id, uri.toString(), "POST", completeQueryData.toString());
};

我认为我会分享自己的发现,以便其他人可以帮助修改新代码并弄清楚如何检索此新版本并与之交互。一旦我们找到了捕获xsrfToken或_rnr_se值的新方法,可能就不太遥远了。

目前,我的时间有些紧缺,但很想再次进行此操作。看着萤火虫等问题很可能是麻烦的,以观看会话如何通过javascript在浏览器中启动并让PGV模仿新的URL等。

0

1

2

3

4

5

6

7



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接: https://www.pythonheidong.com/blog/article/577960/c13113783804b3de1322/

来源: python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

15 0
收藏该文
已收藏

评论内容:(最多支持255个字符)