2009-10-25 94 views
1

我使用硒RC循环通过URL的一个长长的清单,书写顺序从每个URL到CSV文件的HTML的一个长长的清单。问题:由于URL“30000ms后超时”例外,程序经常在列表中的各个点出现。当程序遇到URL超时时,我试图让程序简单地在CSV文件中写一个超时记录(在URL的HTML已经消失的行中)并移动到列表中的下一个URL。我试图给我的程序添加一个'else'子句,但它似乎没有帮助(见下文) - 即:程序每次遇到超时时都会停止。即使当我用60000ms超时窗口打开selenium-server时,我似乎也会得到30000ms超时异常 - 例如:“java -jar selenium-server.jar -timeout 600000”???Python的硒处理超时异常处理URL

任何意见将不胜感激。谢谢。

from selenium import selenium 
import unittest, time, re, csv, logging 

class Untitled(unittest.TestCase): 
    def setUp(self): 
     self.verificationErrors = [] 
     self.selenium = selenium("localhost", 4444, "*firefox", "http://www.MainDomain.com") 
     self.selenium.start() 

    def test_untitled(self): 
     sel = self.selenium 
     spamReader = csv.reader(open('SubDomainList.csv', 'rb')) 
     for row in spamReader: 
      sel.open(row[0]) 
      sel.wait_for_page_to_load("400000") 
      time.sleep(5) 
      html = sel.get_html_source() 
      ofile = open('output4001-5000.csv', 'ab') 
      ofile.write(html + '\n') 
      ofile.close 
     else: 
      ofile = open('outputTest.csv', 'ab') 
      ofile.write("URL Timeout" + '\n') 
      ofile.close 

    def tearDown(self): 
     self.selenium.stop() 
     self.assertEqual([], self.verificationErrors) 

if __name__ == "__main__": 
    unittest.main() 

回答

3

尝试以下操作:

from selenium import selenium 
import unittest, time, re, csv, logging 

class Untitled(unittest.TestCase): 
    def setUp(self): 
     self.verificationErrors = [] 
     self.selenium = selenium("localhost", 4444, "*firefox", "http://example.com") 
     self.selenium.start() 
     self.selenium.set_timeout("60000") 

    def test_untitled(self): 
     sel = self.selenium 
     spamReader = csv.reader(open('SubDomainList.csv', 'rb')) 
     for row in spamReader: 
      try: 
       sel.open(row[0]) 
      except Exception, e: 
       ofile = open('outputTest.csv', 'ab') 
       ofile.write("error on %s: %s" % (row[0],e)) 
      else: 
       time.sleep(5) 
       html = sel.get_html_source() 
       ofile = open('output4001-5000.csv', 'ab') 
       ofile.write(html.encode('utf-8') + '\n') 
      ofile.close() 

    def tearDown(self): 
     self.selenium.stop() 
     self.assertEqual([], self.verificationErrors) 

if __name__ == "__main__": 
    unittest.main() 

一些评论:

  • 你不需要后开放一个wait_for_page_to_load,这将导致你超时,因为一旦在页面加载后opeen,它会再次开始等待,页面将不会被加载。
  • 从硒中获得的大多数故障(超时,找不到对象)都可以用try-except语句来捕获
  • 您应该在测试中用测试本身设置超时(使用set_timeout),这样它就不会“T取决于你启动服务器的方式,它会一直等你想
+0

你达人的时间 - 现在测试。 – KenBurnsFan1 2009-10-25 22:01:26

+0

我在某处遇到问题,但我确定这是答案。今晚我会继续调整。谢谢! – KenBurnsFan1 2009-10-25 22:06:42

+1

Ups,失败是由于某些身份问题导致的,现在已经修复。 在编写文件之前,我还添加了编码,以防万一您的网站上有一些unicode字符。 – Santi 2009-10-26 03:46:06