2016-10-27 12 views
2

Python 2.7でSelenium 2.53.5を使用してオンラインフォームにシリアル番号の登録を自動化しようとしています。スクリプトは2ヶ月以上働いていましたが、昨日私はそれを実行するときにエラーが発生し始めました:httplib.BadStatusLine: ''これには既知の修正がありますか?私は、先行/後続の改行文字がURLの検索を混乱させる可能性があることを読んだが、問題を特定することはできないようだ。Selenium 2.53.5 httplib.BadStatusLine: '' Python

コード:

import sys 
import time 

from selenium import webdriver 
from selenium.webdriver.chrome.options import Options 

class SerialSet: 
    def __init__(self, fileName, driverPath, user, password): 
     self.fn = fileName 
     self.failedSerials = [] 
     self.driver = webdriver.Chrome(driverPath) 
     self.aloSuccess = False 
     self.user = user 
     self.password = password 

    def parseSerialFile(self): 
     with open(self.fn, 'r') as f: 
      self.serials = [line.strip() for line in f] 

    def setCountrySN(self, serial, driver): 
     driver.find_element_by_xpath("//select/option[@value='USA']").click() 
     driver.find_element_by_id("serialno").send_keys(serial) 
     driver.find_element_by_xpath("//input[@value='Continue'][@type='button']").click() 

    def submitState(self, driver): 
     driver.find_element_by_xpath("//select/option[@value='CT']").click() 
     driver.find_element_by_id("Continue1").click() 

    def login(self, driver): 
     driver.find_element_by_xpath("//*[@id='accountname']").send_keys(self.user) 
     driver.find_element_by_xpath("//*[@id='accountpassword']").send_keys(self.password) 
     driver.find_element_by_xpath("//*[@id='signInHyperLink']").click() 

    def initiateSN(self, serial, driver): 
     # select country and enter serialno 
     driver.get("http://supportform.apple.com/201110/") 
     self.setCountrySN(serial, driver) 

     # enter login 
     time.sleep(3) 
     if driver.current_url == "http://supportform.apple.com/201110/": 
      return False 
     self.login(driver) 

     # select state and continue 
     time.sleep(3) 
     self.submitState(driver) 

     # final submit 
     time.sleep(3) 
     driver.find_element_by_id("finalContinue").click() 
     return True 

    def newSN(self, serial, driver): 
     # select country and enter serialno 
     driver.get("http://supportform.apple.com/201110/") 
     self.setCountrySN(serial, driver) 

     # select state and continue 
     time.sleep(3) 
     if driver.current_url == "http://supportform.apple.com/201110/": 
      return False 
     self.submitState(driver) 

     # final submit 
     time.sleep(3) 
     driver.find_element_by_id("finalContinue").click() 
     return True 

    def automateSerials(self): 
     for i in self.serials: 
      if self.aloSuccess == False: 
       if not self.initiateSN(i, self.driver): 
        self.failedSerials.append(i) 
        del i 
       else: 
        self.aloSuccess = True 
      else: 
       if not self.newSN(i, self.driver): 
        self.failedSerials.append(i) 
        del i 
     self.driver.quit() 
     print(str(len(self.serials) - len(self.failedSerials)) + ":" + str(len(self.serials))) 
def main(): 
    newSet = SerialSet(sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4]) 
    newSet.parseSerialFile() 
    newSet.automateSerials() 

if __name__ == "__main__": 
    main() 

がエラー:

Traceback (most recent call last): 
    File "automate.py", line 90, in <module> 
    main() 
    File "automate.py", line 85, in main 
    newSet = SerialSet(sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4]) 
    File "automate.py", line 11, in __init__ 
    self.driver = webdriver.Chrome(driverPath) 
    File "/Library/Python/2.7/site- packages/selenium/webdriver/chrome/webdriver.py", line 67, in __init__ 
    desired_capabilities=desired_capabilities) 
    File "/Library/Python/2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 90, in __init__ 
self.start_session(desired_capabilities, browser_profile) 
    File "/Library/Python/2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 177, in start_session 
response = self.execute(Command.NEW_SESSION, capabilities) 
    File "/Library/Python/2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 234, in execute 
response = self.command_executor.execute(driver_command, params) 
    File "/Library/Python/2.7/site-packages/selenium/webdriver/remote/remote_connection.py", line 401, in execute 
return self._request(command_info[0], url, body=data) 
    File "/Library/Python/2.7/site-packages/selenium/webdriver/remote/remote_connection.py", line 432, in _request 
    resp = self._conn.getresponse() 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 1132, in getresponse 
response.begin() 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 453, in begin 
version, status, reason = self._read_status() 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 417, in _read_status 
raise BadStatusLine(line) 
httplib.BadStatusLine: '' 
+0

見た目が問題を再現するのに苦労しているようです。https://github.com/seleniumhq/selenium-google-code-issue-archive/issues/4530 – boatcoder

+0

クロムドライブが2016-10-22で更新されました。その時間前には動作したが後では動作しない場合は、クロムドライバを更新すると修正される可能性があります。 – leekaiinthesky

答えて

4

はあなたが最新バージョンchromedriverを使用していることを確認してください: http://chromedriver.storage.googleapis.com/2.25/chromedriver_linux64.zip

私はchromedriver 2.0をインストールして、このエラーを得た、

2.25にアップグレードすると、rこのエラーのID。

+0

これでも問題は解決しませんでしたが、最初のWebページを読み込むためにchromeの試行後にhttplib.BadStatusLineエラーが発生しています。 –

+0

最初にクロムドライバを呼び出すときにhttplibエラーが発生しました。最初のページを読み込もうとしたときに起きていますか?ウェブサイトが悪いリクエストを送信している可能性があります。google.comのような他のウェブサイトを読み込もうとしましたか?またはbing.com?ただチェックするには –

+0

私は、ウェブサイトが悪いrepsoneを送信する可能性があることを意味 –