2016-10-27 10 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

I 2.0 chromedriver 설치하고이 오류를 얻었다을

2.25로 업그레이드했을 때 r을 얻었습니다. 이 오류의 ID입니다.

+0

여전히 나에게 문제가 해결되지 않았으므로 Chrome이 첫 번째 웹 페이지를로드 한 후에도 httplib.BadStatusLine 오류가 발생합니다. –

+0

처음에는 크롬 드라이버를 호출 할 때 httplib 오류가 발생했습니다. 이제 첫 페이지를로드하려고 할 때 어떻게됩니까? 웹 사이트에서 잘못된 요청을 보내면 google.com과 같은 다른 웹 사이트를로드하려고 시도 했습니까? 또는 bing.com? 단지 –

+0

을 체크하는 것은 내 웹 사이트가 나쁜 repsone을 보낼 수 있다는 것을 의미합니다. –