예제 #1
0
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
예제 #2
0
    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()
예제 #3
0
    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()