Grab the fund net value of Tiantian Fund Online
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 unit test framework change parameters 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)
For example: python fund1.py 150103