瀏覽器重啟會話重拾
阿新 • • 發佈:2018-10-01
sleep cti ext 文檔 拾取 .get 失敗 頁碼 exc
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.common.exceptions import TimeoutException, NoSuchElementException driver_list=[‘1‘,‘2‘] driver_list[0]=webdriver.Chrome() wait=WebDriverWait(driver_list[0],10) d_f_e=driver_list[0].find_element #容易出錯的地方是陳舊的driver session="21e0d1dbb207391e66143672a16fef1f"被加載到文檔導致信息不一致,解決辦法是函數執行操作時重新拾取最新的session #自定義方法 def EC_located(value): #重新獲取最新的session============ wait = WebDriverWait(driver_list[0], 10)#重點在這==============d_f_e = driver_list[0].find_element#重點在這==================== try: ecl=wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,value))) return ecl except TimeoutException: print(value,‘元素未加載成功,等待超時‘) #點擊下一頁的操作 u_r_l=[‘1‘,‘2‘] tb_url=u_r_l[0] def next_page():try: #先記錄總頁數1.先看總頁數是否存在 2.記錄總頁數 total=EC_located(‘.total‘).text sub_page=int(re.findall(‘\d+‘,total)[0]) #先記錄當前高亮頁碼 page[0]=(int(EC_located(‘.item.active span‘).text)) # 檢查激活頁碼下一個是不是已經加載出來 next = EC_located(‘.item.active+li>a‘) next.click() #檢查高亮的頁碼選項是不是比剛才的+1 time.sleep(1) if next_ok(page[0]) ==True: print(‘ok‘) else: print(‘翻頁失敗,正在重試...‘) return next_page() except: print(driver_list[0]) #IP不能用了的處理辦法 print(‘IP不能用了,正在重啟瀏覽器‘) off_sta() def off_sta(): deiver = driver_list[0] # 先預先記錄本頁url地址,以備後面翻頁失敗後重啟調用url u_r_l[0] = driver_list[0].current_url tb_url = u_r_l[0] ‘‘‘關閉重試‘‘‘ try: driver_list[0].close() except: pass driver_list[0] = webdriver.Chrome() driver_list[0].get(tb_url) next_page() page=[‘haha‘,‘xixi‘] def next_ok(page_num): print(‘執行了next_ok(page_num)函數‘) if int(page_num)==int(EC_located(‘.item.active span‘).text): print(‘翻頁不成功‘) yes=False else: print(‘翻頁成功‘) yes=True return yes
瀏覽器重啟會話重拾