問題:系統增加了登錄驗證碼功能,腳本不能正常執行。
解決方案:
A.跟開發溝通設置萬能碼
B.使用添加Cookie跳過驗證碼
Note:這個方法一般只試用測試環境,正式環境由於安全問題,使用該方法無效,而且session更新會使之前的value無效,所以需要不斷更新,建議寫配置文件。
1.輸入驗證碼后成功登錄,點擊F12。
2獲取到:PHPSESSID和_csrf后編寫登錄腳本:
1 class CreateADNAppAndroid(unittest.TestCase): 2 def setUp(self): 3 self.options = webdriver.ChromeOptions() 4 5 self.options.add_experimental_option("excludeSwitches", ["ignore-certificate-errors"]) 6 7 # browser = webdriver.Chrome(chrome_options=options) 8 self.driver = webdriver.Chrome(chrome_options=self.options) 9 #調用chrome瀏覽器並窗口最大化 10 self.driver.maximize_window() 11 self.driver.implicitly_wait(30) 12 self.base_url = "http://e.shiqutech.com" 13 self.verificationErrors = [] 14 self.accept_next_alert = True 15 16 def test_CreateADNAppAndroid(self): 17 """投放管理:ADN應用推廣:Create ADN App Android AD""" 18 driver = self.driver 19 driver.get(self.base_url + "/user/login") 20 testdata = open ("F:\\Auto-social\\ChromeAuto\\Advertiser\\data\\ADN\\csv\\CreateADNAppAndroid.csv",'rb') 21 user = testdata.readline() 22 driver.find_element_by_id("loginform-username").clear() 23 driver.find_element_by_id("loginform-username").send_keys(user) 24 time.sleep(2) 25 pw = testdata.readline() 26 driver.find_element_by_id("loginform-password").send_keys(pw) 27 time.sleep(2) 28 source1 = open("F:\\Auto-social\\ChromeAuto\\Advertiser\\data\\csrf.txt","r") 29 csrf = source1.read(166) 30 source1.close() 31 source2 = open("F:\\Auto-social\\ChromeAuto\\Advertiser\\data\\PHPSESSID.txt","r") 32 PHPSESSID = source2.read(26) 33 source2.close() 34 driver.add_cookie({'name':'_csrf', 'value':csrf}) 35 driver.add_cookie({'name':'PHPSESSID', 'value':PHPSESSID}) 36 driver.find_element_by_name("login-button").click() 37 time.sleep(4)
如果addcookie(34-35)后不需要再添加code#(22-26),直接點擊登錄就可以了,但是這個會根據server端設置session過期時間而定,如果輸入'_csrf'和'PHPSESSID'值無效了,就重新獲取下