捕獲和轉換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

密碼:yyyyyyy

代理服務器: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 日回复