def setupPortal(): # driver = Firefox(log_path=devnull) # ... # capabilities.setCapability("requireWindowFocus", true); # WebDriver driver = new InternetExplorerDriver(capabilities); # r"C:\Automation\IEDriverServer.exe" # options = () # options.IntroduceInstabilityByIgnoringProtectedModeSettings = True # options.IgnoreZoomLevel = True # # options.UnhandledPromptBehavior = un.Accept # options.EnablePersistentHover = True # options.EnableNativeEvents = False # options.EnsureCleanSession = True // this cleansession did the trick def exit_hander(): sleep(200) # driver.quit() print("Error:") atexit.register(exit_hander) capabilities = DesiredCapabilities.INTERNETEXPLORER # capabilities['INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS']=True capabilities['requireWindowFocus'] = True driver = Ie(capabilities=capabilities) # driver = Ie() driver.get("https://ace.cbp.dhs.gov/") driver.set_window_position(1920, 0) driver.maximize_window() driver.implicitly_wait(100) f = open(r"C:\Automation\ACE Login.txt", 'r') read = f.readline() m = search("username: *", read) read = read[m.end():].strip() elem = driver.find_element_by_name('username') elem.clear() elem.send_keys(read) read = f.readline() m = search("password: *", read) read = read[m.end():].strip() elem = driver.find_element_by_name('password') elem.clear() elem.send_keys(read) f.close() # sleep(100) elem = driver.find_element_by_name('Login') # wait = WebDriverWait(driver, 100) # wait.until(EC.element_to_be_clickable(elem)) # elem.send_keys(Keys.ENTER) elem.send_keys(Keys.ENTER) # driver.find_element_by_class_name("wpsToolBar") driver.find_element_by_css_selector("button[accesskey='T']").send_keys( Keys.ENTER) driver.find_element_by_id( "clayView:ns_7_M3ULU7BUVD0M2HFG8D10000000_00000:_idsc00001:_idsc00003_2:_idsc00007" ).send_keys(Keys.ENTER) # clayView:ns_7_CHMCHJ3VMJ3L502FK9QRJ71003_00000:accountListForm:_idsc00058_0:_idsc00065 # sleep(5) driver.implicitly_wait(5) # try: # driver.find_element_by_css_selector('img[href="/ace1/wps/myportal/!ut/p/c5/hZHBcoIwFEW_xS94D2iELhHEgMQqCAIbhhF04oi6yFjh6ytTbZkRMFmenNx3E0jgvk_Zle8zwc-n7AgxJGpqUGZQRwmZo7gEZWv-ufIcVcIZQlhmN17yusghgmTcexTxzuNxij1Lx8ZmSuAG6iQITWQytWY2kR781x7gHbbhP2-HDUT4kfoH7cIqEbm1cV0fal8Wpi4Jc4WLOq5Evl7moRdMdNPaFt-3v0RpimgTDW3Z0diXha3Ed20HJhq2N81HvPq01bfhQ6_Z5ZNW_oP3tuvy1X9_Qc9lAZdSq_iReDvf5sv9aPQD-GwhZg!!/dl3/d3/L0lKQSEvd0pDQUFBISEvWVB3IS9ub3JtYWw!/"]').send_keys(Keys.ENTER) # except: # True minimized = False try: driver.execute_script( "arguments[0].click();", driver.find_element_by_css_selector( 'img[alt="Minimize Manifest"]')) # driver.find_element_by_css_selector('a[href="/ace1/wps/myportal/!ut/p/c5/hZHRboIwFIafxSc4h7IKu8QyLIw6hIHADSGRmRpRLxo3-_STzG0kA9Zefv36n7-FEm77WF_krlbydKwPUEBpVYwLxgMzE4EZUiTe8-M6DiwDlwhZW3_IVupmCzmU89GjiDdezCscWQ52tjDTMLUWaeaiINxb-tS48y97gg_YLPm-HTaQ40OV7O2zuKo81OzyutcJUa5jqHD9LnShxSqKtlmcLhyXKGzYT6LxhOhTG30S2OLFw17if20nJpq2N91H_PV5r2_Hp15zyKe9_DsfbTfkW7_-ip_aBs6tfZUHGr8lvox2s9knEEREDw!!/dl3/d3/L0lKQSEvd0pDQUFBISEvWVB3IS9taW5pbWl6ZWQ!/"]').send_keys(Keys.ENTER) minimized = True except: True sleep(2) driver.implicitly_wait(100) driver.find_element_by_id( "clayView:ns_7_CHMCHJ3VMJ3L502FK9QRJ71003_00000:accountListForm:_idsc00058_0:_idsc00065" ).send_keys(Keys.ENTER) driver.find_element_by_id( "clayView:ns_7_CHMCHJ3VMJ3L502FK9QRJ71003_00000:accountListForm:_idsc00058_1:_idsc00068" ).send_keys(Keys.ENTER) driver.implicitly_wait(2) # driver.implicitly_wait(1) if not minimized: try: # driver.execute_script("arguments[0].click();", driver.find_element_by_css_selector('img[alt="Minimize Manifest"]')) driver.execute_script( "arguments[0].click();", driver.find_element_by_css_selector( 'img[alt="Minimize Manifest"]')) except: True driver.implicitly_wait(100) return driver
def parse(self, response): meta = response.meta item = meta["item"] username = item["username"] driver = Ie(executable_path=self.settings['IE_EXECUTABLE_PATH']) pid = driver.iedriver.process.pid try: wait = ui.WebDriverWait(driver, 20) driver.maximize_window() driver.get(response.url) wait.until(EC.visibility_of_element_located((By.ID, 'skey'))) # 输入密码,准备模拟键盘输入 with Ddxoft(pid) as visual_keyboard: # 输入用户名 driver.execute_script( 'username_input=document.getElementById("skey");' 'username_input.value="%s";' 'username_input.focus();' % username) visual_keyboard.dd_tab() for i in item['password']: visual_keyboard.dd_keyboard(i) sleep(0.5) # 登录 driver.execute_script('doLogin();') # 获取出错信息 try: error_div = wait.until( EC.visibility_of_element_located((By.ID, 'exceptionDiv'))) msg = error_div.text if msg != "": yield from self.error_handle(username, msg, tell_msg=msg) return except TimeoutException: pass # 获取cookie cookies = driver.get_cookies() # 获取余额信息 driver.get(self.balance_url) query_balance_btn = wait.until( EC.visibility_of_element_located((By.ID, '0key2'))) balance_script = query_balance_btn.get_attribute("onclick") driver.execute_script(balance_script) wait.until( EC.visibility_of_element_located( (By.XPATH, '//tr[@class="td2"][2]'))) tr_list = driver.find_elements_by_xpath('//tr[@class="td2"]') for tr in tr_list: balance_type = tr.find_elements_by_xpath("td[2]")[0].text if balance_type == "人民币": item["balance"] = tr.find_elements_by_xpath( "td[7]/table/tbody/tr/td/div")[0].text break # 进入到明细查询页面 yield Request(url=self.account_url, callback=self.parse_account_step1, headers=self.headers, cookies=cookies, meta=meta, dont_filter=True, errback=self.err_callback) except Exception: yield from self.except_handle(username, "光大银行---登录数据解析异常") finally: driver.quit()
def parse(self, response): meta = response.meta item = meta["item"] username = item["username"] driver = Ie(executable_path=self.settings['IE_EXECUTABLE_PATH']) pid = driver.iedriver.process.pid try: # driver = self.getdriver(executable_path=self.settings["CHROME_EXECUTABLE_PATH"], browser_type="CHROME", # use_proxy=False, change_proxy=False) wait_60 = ui.WebDriverWait(driver, 60) wait = ui.WebDriverWait(driver, 20) driver.maximize_window() driver.get(response.url) for i in range(10): try: alert = driver.switch_to.alert alert.accept() sleep(1) except Exception: break wait_60.until(EC.visibility_of_element_located((By.NAME, 'login-iframe'))) # 点击密码输入框 # driver.execute_script("inputPwd();") # sleep(3) # driver.execute_script("var obj_pwd=document.getElementById('password');" # "obj_pwd.readOnly=false;" # "obj_pwd.value='" + item["password"] + "';") # driver.execute_script("var obj_pwd2=document.getElementById('Password');" # "obj_pwd2.value='" + item["password"] + "';") # 输入密码 # pwd_input = wait.until(EC.visibility_of_element_located((By.ID, 'OPassword'))) # pwd_input.send_keys(item["password"]) # 停顿2秒 准备模拟键盘输入 with Ddxoft(pid) as dd_opt: # 输入用户名 driver.execute_script('login_iframe=document.getElementsByName("login-iframe")[0].contentDocument;' 'username_input=login_iframe.getElementById("LoginId");' 'username_input.focus();' 'username_input.value="' + username + '";') # 切换到登录的框架 driver.switch_to.frame("login-iframe") dd_opt.dd_tab() for i in item['password']: dd_opt.dd_keyboard(i) sleep(0.5) # 如果出现验证码 try: # 输入验证码 validation_img = wait.until(EC.visibility_of_element_located((By.ID, 'tokenImg'))) left = validation_img.location['x'] top = validation_img.location['y'] right = validation_img.location['x'] + validation_img.size['width'] bottom = validation_img.location['y'] + validation_img.size['height'] photo_base64 = driver.get_screenshot_as_base64() img_bytes = driver_screenshot_2_bytes(photo_base64, (left, top, right, bottom)) captcha_code = self.ask_image_captcha(img_bytes, username, file_type=".png") token_input = wait.until(EC.visibility_of_element_located((By.ID, 'verCodeToken'))) token_input.send_keys(captcha_code) except CaptchaTimeout: raise except Exception: pass # 点击登录 login_btn = wait.until(EC.visibility_of_element_located((By.ID, 'LoginButton'))) # login_btn.click() driver.execute_script("Javascript: return doSubmit()") # 获取出错信息 try: error_div = wait.until(EC.visibility_of_element_located((By.ID, 'errInfo'))) msg = error_div.text if msg != "": yield from self.error_handle(username, msg, tell_msg=msg) return except TimeoutException: pass # 获取cookie cookies = driver.get_cookies() # 获取余额所在的页面 driver.get(self.balance_url) balance_div = wait.until(EC.visibility_of_element_located((By.XPATH, '//td[@id="CanUseBalanceShow_0"]/div'))) item["balance"] = balance_div.text.strip() # 进入到明细查询页面 yield Request( url=self.prequeryhistory_url, callback=self.parse_prequeryhistory, headers=self.headers, cookies=cookies, meta=meta, dont_filter=True, errback=self.err_callback ) except CaptchaTimeout: yield from self.error_handle(username, "浦发银行---等待验证码超时", tell_msg="等待验证码超时,请刷新页面重试。。") except Exception: yield from self.except_handle(username, "浦发银行---登录数据解析异常") finally: driver.quit()