import json
import traceback
from urllib.parse import urlparse

import requests
from lxml import etree
from base.utils import proxy_client, mongo_helper, config, selenuim_helper
from base.utils.log import logger

home_url = 'https://www.baidu.com/s?ie=UTF-8&wd={}'


class BidBaiduSeed():
    def __init__(self):
        self.driver = None
        try:
            if config.LOCAL_ENV == 'dev':
                driver = selenuim_helper.init_local_chrome()
            else:
                logger.info("有代理的driver实例")
                proxy = proxy_client.get_ip()
                logger.info(proxy)
                proxies_selenium = proxy.split("|")[1]
                logger.info("检测到系统是非Mac系统,启动线上环境local_driver")
                driver = selenuim_helper.init_remote_chrome(proxy=proxies_selenium, load_img=False, headless=True,
                                                            group_id='news', business=self.__class__.__name__)
                driver.set_page_load_timeout(150)  # 等待页面相应的最长时间
            self.driver = driver
        except Exception as e:
            self.close()
            raise e

    def close(self):
        try:
            if self.driver:
                self.driver.quit()
                self.driver = None
        except Exception as e:
            logger.error(e)
            self.driver = None

    def _driver_get(self, url):
        try:
            logger.info(f"正在访问:{url} driver_session_id:{self.driver.session_id} ")
            self.driver.get(url)
            # 等待整个页面加载完成
            self.driver.implicitly_wait(10)
            logger.info(url + "访问成功")
        except Exception as e:
            logger.info(url + "访问失败")
            logger.exception(e)
            raise e

    def deal(self):
        with open('bid_source.json', 'rb') as f:
            sstr = f.read()
        word_dict = json.loads(sstr.decode('utf-8'))
        objects = word_dict['object']
        words = objects.values()

        for ll in words:
            for dd in ll:
                word = dd.get('platformName', None)
                if word is None:
                    continue
                url = home_url.format(word)
                self._driver_get(url=url)
                self.parse()

    def parse(self):
        handle_main = self.driver.current_window_handle
        div = self.driver.find_element_by_id('1')

        source = div.find_element_by_xpath('./h3/a[1]/em').text
        div.find_element_by_xpath('./h3/a[1]').click()
        all_handle = self.driver.window_handles
        self.driver.switch_to.window(all_handle[-1])
        print(self.driver.current_url)
        urls = urlparse(self.driver.current_url)
        seed = urls[0] + "://" + urls[1]
        data = {
            'name': source,
            'url': seed,
            'url_search': "",
            'kind': 'bid',
            'tag': 0
        }
        print("--------------要入库的数据-----------------")
        print(data)
        self.driver.close()
        self.driver.switch_to.window(handle_main)
        logger.info(f"seed表入库一个种子，name---{source}，url---{seed}")
        # TODO 由于数据库异常原因,不往mongoDB存数据

        # mongo_helper.insert_one(table=config.DB_TETE, data=data)


if __name__ == '__main__':
    bbs = BidBaiduSeed()
    bbs.deal()
    # bs.query("")
