抓取天天基金网上的基金净值
fund1.py
# -*- coding: utf-8 -*- import os, sys from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import Select from selenium.common.exceptions import NoSuchElementException from selenium.common.exceptions import NoAlertPresentException import unittest, time, re class ParametrizedTestCase(unittest.TestCase): """ TestCase classes that want to be parametrized should inherit from this class. """ def __init__(self, methodName='runTest', param=None): super(ParametrizedTestCase, self).__init__(methodName) self.param = param @staticmethod def parametrize(testcase_klass, param=None): """ Create a suite containing all tests taken from the given subclass, passing them the parameter 'param'. """ testloader = unittest.TestLoader() testnames = testloader.getTestCaseNames(testcase_klass) suite = unittest.TestSuite() for name in testnames: suite.addTest(testcase_klass(name, param=param)) return suite class Fund(ParametrizedTestCase): def setUp(self): ch_driver = os.path.abspath(r"D:\selenium\chromedriver.exe") os.environ["webdriver.chrome.driver"]= ch_driver self.driver = webdriver.Chrome() self.driver.implicitly_wait(30) self.base_url = "http://fund.eastmoney.com" self.verificationErrors = [] self.accept_next_alert = True print self.param self.fp = open(self.param+'.txt','w') def test_fund(self): f1 = self.param fp = self.fp driver = self.driver driver.get(self.base_url + "/f10/jjjz_%s.html" % (f1)) assert f1 in driver.title try: div = driver.find_element_by_id("jztable") table = div.find_elements_by_tag_name("table") tbody = table[0].find_elements_by_tag_name("tbody") t_rows = tbody[0].find_elements_by_tag_name('tr') for row in t_rows: fp.write(f1+' ') tds = row.find_elements_by_tag_name('td') for td in tds[0:4]: fp.write(td.text +' ') fp.write('\n') except Exception as msg: print msg # def is_element_present(self, how, what): try: self.driver.find_element(by=how, value=what) except NoSuchElementException as e: return False return True def is_alert_present(self): try: self.driver.switch_to_alert() except NoAlertPresentException as e: return False return True def close_alert_and_get_its_text(self): try: alert = self.driver.switch_to_alert() alert_text = alert.text if self.accept_next_alert: alert.accept() else: alert.dismiss() return alert_text finally: self.accept_next_alert = True def tearDown(self): self.fp.close() self.driver.quit() self.assertEqual([], self.verificationErrors) if len(sys.argv) ==2: f1 = sys.argv[1] if len(f1) !=6: sys.exit(2) ## unittest 单元测试框架 改传参数 suite = unittest.TestSuite() suite.addTest(ParametrizedTestCase.parametrize(Fund, param=f1)) unittest.TextTestRunner(verbosity=2).run(suite) else: print ' usage: fund1.py fundcode ' sys.exit(1)
例如:python fund1.py 150103