捕获和转换Web的工具
GrabzIt的在线社区

当我用python运行demo时抛出错误

询问有关如何捕获或转换网页或HTML的问题 into图像,CSV,PDF或DOCX文档以及如何转换视频 into使用我们的API的GIF动画。

错误:

追溯(最近一次通话):

  文件“GrabzItClient.py”,第 6 行,位于

    抓住它。SaveTo(“文档/结果.docx”)

  文件“C:\Program Files\Python36\lib\site-packages\GrabzIt\GrabzItClient.py”,第 235 行,位于 SaveTo

    id = 自我.Save()

  文件“C:\Program Files\Python36\lib\site-packages\GrabzIt\GrabzItClient.py”,第 209 行,位于 Save

    obj = self._take(sig, callBackURL)

  文件“C:\Program Files\Python36\lib\site-packages\GrabzIt\GrabzItClient.py”,第 223 行,位于 _take 中

    返回 self.HTTPPost(self.request.url, self.request.options._getParameters(self.applicationKey, sig, callBackURL, 'html', quote(self.request.data)))

  文件“C:\Program Files\Python36\lib\site-packages\GrabzIt\GrabzItClient.py”,第 629 行,在 HTTPPost 中

    h.endheaders()

  文件“C:\Program Files\Python36\lib\http\client.py”,第 1234 行,在结尾标头中

    self._send_output(message_body,encode_chunked=encode_chunked)

  文件“C:\Program Files\Python36\lib\http\client.py”,第 1026 行,在 _send_output 中

    自发送(msg)

  文件“C:\Program Files\Python36\lib\http\client.py”,第 964 行,发送

    self.connect()

  文件“C:\Program Files\Python36\lib\http\client.py”,第 936 行,在连接中

    (self.host,self.port), self.timeout, self.source_address)

  文件“C:\Program Files\Python36\lib\socket.py”,第 704 行,create_connection

    对于 getaddrinfo(主机、端口、0、SOCK_STREAM) 中的资源:

  文件“C:\Program Files\Python36\lib\socket.py”,第 743 行,在 getaddrinfo 中

    对于 _socket.getaddrinfo(主机、端口、系列、类型、原型、标志)中的资源:

socket.gaierror:[Errno 11001] getaddrinfo失败

 

来源:(我安装了GrabzIt并获得了APPLICATION KEY和APPLICATION SECRET)

从 GrabzIt 导入 GrabzItClient

 

grabzIt = GrabzItClient.GrabzItClient(应用程序密钥,应用程序秘密)

抓住它。HTMLToDOCX(“ 你好世界! ”) 

抓住它。SaveTo(“文档/结果.docx”) 

 

你能告诉我我该怎么办吗?

21年2018月XNUMX日匿名提问

欢迎来到社区!

通常是 socket.gaierror:[Errno 11001] getaddrinfo失败 是从防火墙或代理后面调用代码时引起的。 请确保应用程序可以访问端口 80。

GrabzIt 支持于 21 年 2018 月 XNUMX 日回复

谢谢你的回答。

是的,这是代理的问题,当我换另一台没有代理的电脑时,它运行正常。

它如何与代理一起工作?

21年2018月XNUMX日匿名回答

这将是一个新功能。 我们正在寻找是否可以更改 Python 客户端以启用代理服务器。

如果可能的话,我们会尽快与您联系并提供修复方案。 如果您愿意,您可以自己尝试一下,因为我们所有的客户端都是开源的:https://github.com/GrabzIt/grabzit/blob/master/python/GrabzIt/GrabzItClient.py

GrabzIt 支持于 21 年 2018 月 XNUMX 日回复

我们添加了新功能。 只需下载 GrabzItClient.py 文件并从此处替换您的副本:https://github.com/GrabzIt/grabzit/blob/master/python/GrabzIt/GrabzItClient.py

然后,您可以使用新的 SetLocalProxy 方法设置代理服务器的代理 url,例如:

grabzIt.SetLocalProxy(“http://123.123.123.123:21231”)

现在请告诉我们进展如何,我们很快就会发布新版本!

GrabzIt 支持于 21 年 2018 月 XNUMX 日回复

谢谢你的回答。

我更换了 GrabzItClient.py 并更改了我的来源:

 

 

grabzIt = GrabzItClient.GrabzItClient(应用程序密钥,应用程序秘密)

grabzIt.SetLocalProxy("http://xxx@jp.xxxxx.com:yyyyyyy@zzz.proxy.zzz.zzzzzzz.com:8080")

抓住它。HTMLToDOCX(“ 你好世界! ”) 

抓住它。SaveTo(“文档/结果.docx”) 

 

用户:xxx@jp.xxxxx.com

密码:呸呸呸呸

代理服务器:zzz.proxy.zzz.zzzzzzz.com

港口:8080

 

错误信息:

追溯(最近一次通话):
  文件“GrabzIt_test.py”,第 54 行,位于
    抓住它。SaveTo(“结果.docx”)
  文件“C:\TEST\GrabzIt_python\GrabzIt\GrabzItClient.py”,第 487 行,位于 SaveTo
    id = 自我.Save()
  文件“C:\TEST\GrabzIt_python\GrabzIt\GrabzItClient.py”,第 435 行,位于 Save
    obj = self._take(sig, callBackURL)
  文件“C:\TEST\GrabzIt_python\GrabzIt\GrabzItClient.py”,第 463 行,位于 _take 中
    返回 self.HTTPPost(self.request.url, self.request.options._getParameters(self.applicationKey, sig, callBackURL, 'html', quote(self.request.data)))
  文件“C:\TEST\GrabzIt_python\GrabzIt\GrabzItClient.py”,第 1307 行,在 HTTPPost 中
    headers['代理授权'] = '基本' + base64.b64encode(auth)
  文件“C:\Program Files\Python36\lib\base64.py”,第 58 行,b64encode
    编码 = binascii.b2a_base64(s, newline=False)
类型错误:需要类似字节的对象,而不是“str”

 

即使我改变了同样的错误消息 设置本地代理 来自“http://xxx@jp.xxxxx.com:yyyyyyy@zzz.proxy.zzz.zzzzzzz.com:8080“到 "http://xxx%40jp.xxxxx.com:yyyyyyy@zzz.proxy.zzz.zzzzzzz.com:8080"

 

22年2018月XNUMX日匿名回答

抱歉,可能是我设置了错误的代理。

我将代理更改为“http://the_other_proxy_server:port”,错误消息变为:

追溯(最近一次通话):
  文件“GrabzIt_test.py”,第 54 行,位于
    抓住它。SaveTo(“结果.docx”)
  文件“C:\TEST\GrabzIt_python\GrabzIt\GrabzItClient.py”,第 487 行,位于 SaveTo
    id = 自我.Save()
  文件“C:\TEST\GrabzIt_python\GrabzIt\GrabzItClient.py”,第 435 行,位于 Save
    obj = self._take(sig, callBackURL)
  文件“C:\TEST\GrabzIt_python\GrabzIt\GrabzItClient.py”,第 463 行,位于 _take 中
    返回 self.HTTPPost(self.request.url, self.request.options._getParameters(self.applicationKey, sig, callBackURL, 'html', quote(self.request.data)))
  文件“C:\TEST\GrabzIt_python\GrabzIt\GrabzItClient.py”,第 1327 行,在 HTTPPost 中
    h.endheaders()
  文件“C:\Program Files\Python36\lib\http\client.py”,第 1234 行,在结尾标头中
    self._send_output(message_body,encode_chunked=encode_chunked)
  文件“C:\Program Files\Python36\lib\http\client.py”,第 1026 行,在 _send_output 中
    自发送(msg)
  文件“C:\Program Files\Python36\lib\http\client.py”,第 964 行,发送
    self.connect()
  文件“C:\Program Files\Python36\lib\http\client.py”,第 940 行,在连接中
    self._tunnel()
  文件“C:\Program Files\Python36\lib\http\client.py”,第 919 行,位于 _tunnel 中
    消息.strip()))
OSError:隧道连接失败:407 需要代理身份验证

22年2018月XNUMX日匿名回答

您需要指定您的用户名和密码,如下所示: http://username:password@example.com:12335

GrabzIt 支持人员于 22 年 2018 月 XNUMX 日回复

是的,我指定了我的用户名和密码(问题于 22 年 2018 月 09 日星期三 34:43:XNUMX AM),例如:

http://username:password@example.com:12335

用户名是电子邮件地址(xxx@jp.xxxxx.com),所以我更改为xxx%40jp.xxxxx.com

但它是相同的错误消息:TypeError: a bytes-like object is required, not 'str'

22年2018月XNUMX日匿名回答

抱歉,我错过了您之前的回复。 我认为这是一个 Python 3 问题,并且已经发布了一个修复程序来解决该错误。 请您再次更新 GrabzItClient.py:https://github.com/GrabzIt/grabzit/blob/master/python/GrabzIt/GrabzItClient.py

GrabzIt 支持人员于 22 年 2018 月 XNUMX 日回复

我替换了 python 文件并发现新的错误消息:

追溯(最近一次通话):

  文件“GrabzIt_test.py”,第 54 行,位于

    抓住它。SaveTo(“结果.docx”)

  文件“C:\TEST\GrabzIt_python\GrabzIt\GrabzItClient.py”,第 244 行,位于 SaveTo

    id = 自我.Save()

  文件“C:\TEST\GrabzIt_python\GrabzIt\GrabzItClient.py”,第 218 行,位于 Save

    obj = self._take(sig, callBackURL)

  文件“C:\TEST\GrabzIt_python\GrabzIt\GrabzItClient.py”,第 232 行,位于 _take 中

    返回 self.HTTPPost(self.request.url, self.request.options._getParameters(self.applicationKey, sig, callBackURL, 'html', quote(self.request.data)))

  文件“C:\TEST\GrabzIt_python\GrabzIt\GrabzItClient.py”,第 661 行,在 HTTPPost 中

    headers['代理授权'] = '基本'+encodedAuth

类型错误:必须是 str,而不是 bytes

22年2018月XNUMX日匿名回答

好的,我们已经解码了 into ASCII。 我们没有使用 Python 3,这就是它让我们陷入困境的原因。 请从此处更新您的代码:https://github.com/GrabzIt/grabzit/blob/master/python/GrabzIt/GrabzItClient.py

由于这是开源的,请随意调试并将您想要的任何改进提交到 Github。 因为我们无权访问您的设置。

GrabzIt 支持人员于 22 年 2018 月 XNUMX 日回复

非常感谢您的帮助。

OSError:隧道连接失败:407 需要代理身份验证

我会尝试调试。 

22年2018月XNUMX日匿名回答

我们认为我们知道问题是什么,但是需要重新编写一些代码。 所以我们会在完成后与您联系。 希望24小时之内。

GrabzIt 支持人员于 22 年 2018 月 XNUMX 日回复

我相信我们已经解决了这个问题! 您可以在这里获取最新版本:https://github.com/GrabzIt/grabzit/blob/master/python/GrabzIt/GrabzItClient.py

GrabzIt 支持人员于 22 年 2018 月 XNUMX 日回复

感谢您的答复。

新的错误消息:

追溯(最近一次通话):
  文件“GrabzIt_test.py”,第 54 行,位于
    抓住它。SaveTo(“结果.docx”)
  文件“C:\TEST\GrabzIt_python\GrabzIt\GrabzItClient.py”,第 243 行,位于 SaveTo
    id = 自我.Save()
  文件“C:\TEST\GrabzIt_python\GrabzIt\GrabzItClient.py”,第 217 行,位于 Save
    obj = self._take(sig, callBackURL)
  文件“C:\TEST\GrabzIt_python\GrabzIt\GrabzItClient.py”,第 231 行,位于 _take 中
    返回 self.HTTPPost(self.request.url, self.request.options._getParameters(self.applicationKey, sig, callBackURL, 'html', quote(self.request.data)))
  文件“C:\TEST\GrabzIt_python\GrabzIt\GrabzItClient.py”,第 629 行,在 HTTPPost 中
    h = self._getConnection()
  文件“C:\TEST\GrabzIt_python\GrabzIt\GrabzItClient.py”,第 679 行,在 _getConnection 中
    h.putheader('代理授权','基本'+encodedAuth)
  文件“C:\Program Files\Python36\lib\http\client.py”,第 1201 行,位于 putheader 中
    引发 CannotSendHeader()
http.client.CannotSendHeader

 

22年2018月XNUMX日匿名回答

我们对以下内容进行了一些小的改进:https://github.com/GrabzIt/grabzit/blob/master/python/GrabzIt/GrabzItClient.py

并在 Python 2.7、3.4 和 3.6 中对其进行了测试,它可以在所有环境中运行,无论是否有代理以及授权代理。

如果它仍然不适合您,您将需要调试代码。

GrabzIt 支持人员于 23 年 2018 月 XNUMX 日回复

感谢您的回复。

我将调试我的源代码。

顺便问一下,您是否测试了用户名(例如 xxx@yyy.com 的电子邮件)?

23年2018月XNUMX日匿名回答

不,我不需要正确编码和解码,所以也许这就是问题所在。

GrabzIt 支持人员于 23 年 2018 月 XNUMX 日回复