質問

selenium RCを使用してURLの長いリストを循環させ、各URLからcsvファイルにHTMLを順番に書き込みます。問題:URL「30000ms後にタイムアウトしました」が原因で、リストのさまざまなポイントでプログラムが頻繁に終了します。例外。 URLタイムアウトに達したときにプログラムを停止する代わりに、プログラムにCSVファイル(URLのHTMLがなくなった行にある)にタイムアウトのメモを書き込み、移動させようとしましたリスト内の次のURLに進みます。プログラムに「else」句を追加しようとしましたが、役に立たないようです(以下を参照)。つまり、プログラムはタイムアウトに達するたびに停止します。また、60000msのタイムアウトウィンドウでselenium-serverを開いても、30000msのタイムアウト例外が発生するようです。例:" java -jar selenium-server.jar -timeout 600000" ???

どんなアドバイスでも大歓迎です。ありがとう。

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()
役に立ちましたか?

解決

次を試してください:

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は必要ありません。タイムアウト後にページがロードされると、ページがロードされてから再び待機し始め、ページがロードされないためです。
  • セレンから発生するほとんどの失敗(タイムアウト、オブジェクトが見つかりません)は、try-exceptステートメントでキャッチできます
  • テストでタイムアウトを設定する必要があります(set_timeoutを使用して)テスト自体を使用して、サーバーの起動方法に依存せず、常に希望の時間待機します
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top