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)
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
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