python 解决,能让程序的cookies根据浏览器cookies而变,或者有其他的思路 ?

2019-01-02 20:32发布

# python+selenium 模拟登陆,

直接把谷歌浏览器cookies复制保存到项目里面用,可过一段时间本地浏览器的会变,程序还要再复制粘贴,有没有什么办法解决,能让程序的cookies根据浏览器cookies而变,或者有其他的思路 ;直接cookies文件的,不能出现输入账号密码 ,最好有代码
像这样:
driver = webdriver.Chrome()
driver.get("https://baidu.com/login")
driver.add_cookie(cookie_dict=cookies)
driver.get("https://baidu.com/home")
或者遍历本地浏览器保存的cookies文件
这个目录下的,转换为python格式的
C:\Users\许亦凡\AppData\Local\Google\Chrome\User Data\Default\Cache,
然后 拿出来cookies直接用

标签:
3条回答
一个人的天荒地老
2楼-- · 2019-01-02 20:44

以登录清博大数据举例,登录后需要把cookie存本地,每次跑selenium时候就用谷歌跑:

#清博账号登录以及保存cookie
class Qingbo():
    url = 'http://www.gsdata.cn/member/login'

    def __init__(self):
        self.data_path = cookie_path
        if not os.path.exists('cookie'):
            os.makedirs(self.data_path)
        cap = webdriver.DesiredCapabilities.PHANTOMJS
        cap["phantomjs.page.settings.resourceTimeout"] = 1000

        # self.driver = webdriver.PhantomJS(desired_capabilities=cap)
        self.driver = webdriver.Chrome()
        self.driver.set_page_load_timeout(30)

    def __del__(self):
        self.driver.quit()

    def save_cookie_to_file(self):
        cookies = self.driver.get_cookies()
        # print cookies
        with codecs.open(cookie_path, mode='w+', encoding='utf-8') as f:
            for cookie in cookies:
                line = json.dumps(cookie, ensure_ascii=False) + '\n'
                f.write(line)

    def retry_get(self, url):
        for retry in range(3):
            try:
                self.driver.get(url)
                break
            except TimeoutException:
                self.driver.execute_script('window.stop()')


    def login_in(self):
        # try:
            self.retry_get(self.url)
            is_code = self.driver.find_element_by_xpath('//*[@id="wxLogin"]/p')
            print(is_code.text)
            if u'微信扫一扫' in is_code.text:
                user_log_button = self.driver.find_element_by_xpath('/html//div[contains(@class,"login-box")]/div[contains(@class,"login-body")]/a[@class="login-type current"]')
                print(user_log_button)
                user_log_button.click()
            uin_input = self.driver.find_element_by_name('username')
            uin_input.clear()
            uin_input.send_keys(QINGBO_USERNAME)
            pwd_input = self.driver.find_element_by_name("password")
            pwd_input.clear()
            pwd_input.send_keys(QINGBO_PASSWORD)
            pwd_input.send_keys(Keys.ENTER)
            self.save_cookie_to_file()
            self.__del__()
查看更多
长期被迫恋爱
3楼-- · 2019-01-02 20:53

直接从谷歌的cookie文件里抓信息就好了,谷歌的cookie是个小数据库,可以用sql语句直接读出来cookie信息就行了,然后该干嘛干嘛

查看更多
浅入江南
4楼-- · 2019-01-02 21:01

我找到了 问题解决办法,就是调用本地的谷歌文件,程序里这样写:
options = webdriver.ChromeOptions()

把谷歌浏览器,配置文件 加入浏览器启动里面

options.add_argument("--user-data-dir=" + r"C:\Users\许亦凡\AppData\Local\Google\Chrome\User Data")
driver = webdriver.Chrome(chrome_options=options)

解决了 我上面的问题 ,可是还有新的问题,就是启动的时候,不能打开浏览器,如果有已打开的浏览器,程序只会打开浏览器,不会进行后面的动作,如果没有打开谷歌浏览器,程序将正常运行

查看更多
登录 后发表回答