2009-10-09 5 views
0

J'essaie de comprendre comment appliquer une boucle for à ce script et j'ai beaucoup de problèmes. Je veux parcourir une liste de sous-domaines qui sont stockés au format csv (c'est-à-dire: une colonne avec 20 sous-domaines) et imprimer le code html pour chacun. Ils ont tous le même SourceDomain. Merci!Comment appliquer une boucle à travailler Python Selenium Script?

#Python 2.6 
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.SourceDomain.com") 
     self.selenium.start() 

    def test_untitled(self): 
     sel = self.selenium 
     sel.open("/dns/www.subdomains.com.html") 
     sel.wait_for_page_to_load("30000") 
     html = sel.get_html_source() 
     print html 

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

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

Répondre

3
#Python 2.6 
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.SourceDomain.com") 
     self.selenium.start() 

    def test_untitled(self): 
     sel = self.selenium 
     spamReader = csv.reader(open('your_file.csv')) 
     for row in spamReader: 
      sel.open(row[0]) 
      sel.wait_for_page_to_load("30000") 
      print sel.get_html_source() 

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

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

BTW, notez qu'il n'y a pas besoin de placer ce script enveloppé dans un testcase unittest. Mieux encore, vous n'avez pas besoin de sélénium pour une tâche aussi simple (au moins à première vue).

Essayez ceci:

import urllib2, csv 

def fetchsource(url): 
    page = urllib2.urlopen(url) 
    source = page.read() 
    return source 

fooReader = csv.reader(open('your_file.csv')) 
for url in fooReader: 
    print fetchsource(url) 
+0

Merci - Je suis en train de tester votre première réponse maintenant. Je ne pouvais pas faire fonctionner urllib2 parce que ces pages utilisent beaucoup de javaScript. Pour qui, Alex Martelli m'a conseillé d'utiliser Selenium. – KenBurnsFan1

+0

J'ai continué à obtenir une erreur de syntaxe parce que j'ai oublié le deuxième crochet de fermeture (open ('votre_fichier.csv')) :-P Cela fonctionne! Je vous remercie! – KenBurnsFan1

+1

Ah, c'est l'une des petites raisons pour lesquelles vous utiliseriez du sélénium dans ce genre de tâches. Content de voir cela aidé. – Santi