예제 #1
0
 def load_cookie(self):
     try:
         self._cookies.load(ignore_discard=True, ignore_expires=True)
     except :
         logger.warn("Failed to load cookie file {0}".format(self._cookie_file))
     finally:
         self._cookies.save(ignore_discard=True, ignore_expires=True)
예제 #2
0
 def load_cookie(self):
     try:
         self._cookies.load(ignore_discard=True, ignore_expires=True)
     except :
         logger.warn("Failed to load cookie file {0}".format(self._cookie_file))
     finally:
         self._cookies.save(ignore_discard=True, ignore_expires=True)
예제 #3
0
 def __init__(self, cookie_file=COOKIE_FILE):
     if not os.path.isdir(os.path.dirname(cookie_file)):
         os.mkdir(os.path.dirname(cookie_file))
     self._cookie_file = cookie_file
     self._cookies = _get_cookiejar(cookie_file)
     try:
         self._cookies.load(ignore_discard=True, ignore_expires=True)
     except:
         logger.warn("Failed to load cookie file {0}".format(
             self._cookie_file))
     self.session = requests.session()
     self.session.cookies = self._cookies
예제 #4
0
    def login(self):
        wait = WebDriverWait(self._driver, 20)
        logger.info('正在登录网页')
        self._driver.get('http://m.qzone.com')
        wait.until(EC.presence_of_element_located((By.ID, "go")))
        self._driver.find_element_by_id('u').clear()
        self._driver.find_element_by_id('u').send_keys(self.config[QQ])
        self._driver.find_element_by_id('p').clear()
        self._driver.find_element_by_id('p').send_keys(self.config[PASSWORD])
        self._driver.find_element_by_id('go').click()
        try:
            wait.until(EC.element_to_be_clickable((By.ID, 'header')))
            logger.info('登陆完成')
            time.sleep(5)
        except:
            try:
                iframe = self._driver.find_element_by_id(
                    'tcaptcha_iframe')  # 找到“嵌套”的iframe
                time.sleep(2)  # 等待资源加载
                self._driver.switch_to.frame(iframe)  # 切换到iframe
                logger.info('切换iframe')

                #等待滑条加载
                WebDriverWait(self._driver, 30).until(
                    EC.presence_of_element_located(
                        (By.ID, "tcaptcha_drag_button")))

                logger.info('处理验证滑条')
                button = self._driver.find_element_by_id(
                    'tcaptcha_drag_button')  # 找到“蓝色滑块”
                # 开始拖动 perform()用来执行ActionChains中存储的行为
                distance = 195
                offset = 5
                times = 0
                while True:
                    action = ActionChains(self._driver)
                    action.click_and_hold(button).perform()
                    action.reset_actions()  # 清除之前的action
                    logger.info(distance)
                    track = self._get_track(distance)
                    for i in track:
                        action.move_by_offset(xoffset=i, yoffset=0).perform()
                        action.reset_actions()
                    time.sleep(0.5)
                    action.release().perform()
                    time.sleep(5)

                    # 判断某元素是否被加载到DOM树里,并不代表该元素一定可见
                    try:
                        alert = self._driver.find_element_by_class_name(
                            'tcaptcha-title').text
                    except Exception as e:
                        logger.info('get alert error: %s' % e)
                        alert = ''
                    if alert:
                        logger.info('滑块位移需要调整: %s' % alert)
                        distance -= offset
                        times += 1
                        time.sleep(5)
                    else:
                        logger.info('滑块验证通过')
                        break
                wait.until(EC.element_to_be_clickable((By.ID, 'header')))
                logger.info('登陆完成')
            except:
                pass

        logger.info('尝试登录webqq')
        self._driver.get('http://web2.qq.com')
        try:
            self._driver.switch_to_frame('ptlogin')
            time.sleep(2)
            wait.until(EC.element_to_be_clickable(
                (By.CLASS_NAME, 'face'))).click()
            time.sleep(2)
            wait.until(EC.element_to_be_clickable(
                (By.CLASS_NAME, 'face'))).click()
        except:
            pass

        logger.info('正在验证登陆')
        self._driver.get('http://web2.qq.com')
        try:
            wait.until(EC.element_to_be_clickable(
                (By.CLASS_NAME, 'face'))).click()
            logger.warn('需重新登陆')
        except:
            logger.info('登陆成功')

        session = requests.session()
        for item in self._driver.get_cookies():
            session.cookies.set(item['name'], item['value'])

        session.cookies.set('ptwebqq',
                            self._driver.execute_script('return mq.ptwebqq'))
        session.cookies.set('vfwebqq',
                            self._driver.execute_script('return mq.vfwebqq'))
        session.cookies.set(
            'psessionid', self._driver.execute_script('return mq.psessionid'))

        #登陆qun.qq.com
        # self._driver.get('http://qun.qq.com/')
        # wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'user-info'))).click()
        # time.sleep(2)
        # self._driver.switch_to_frame('login_frame')
        # time.sleep(2)
        # wait.until(EC.element_to_be_clickable(
        #     (By.ID, 'switcher_plogin'))).click()
        # wait.until(EC.presence_of_element_located((By.ID, "login_button")))
        # self._driver.find_element_by_id('u').clear()
        # self._driver.find_element_by_id('u').send_keys(self.config[QQ])
        # self._driver.find_element_by_id('p').clear()
        # self._driver.find_element_by_id('p').send_keys(self.config[PASSWORD])
        # self._driver.find_element_by_id('login_button').click()

        # time.sleep(10)
        # for item in self._driver.get_cookies():
        #     session.cookies.set(item['name'], item['value'])

        logger.debug(session.cookies)
        requests.utils.cookiejar_from_dict(
            {c.name: c.value
             for c in session.cookies}, self._cookies)
        self._driver.close()
        time.sleep(2)
        self._cookies.save(COOKIE_FILE,
                           ignore_discard=True,
                           ignore_expires=True)
        return True