首页 新闻 会员 周边

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

0
悬赏园豆:100 [已解决问题] 解决于 2018-12-17 15:26

# 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直接用

问题补充:

本地的谷歌浏览器cookies会变,但不会让重新输入账号密码,程序里的不换cookies的话,就会让重新输入账号密码,能不能让程序开启本地浏览器,而不是一个纯净的谷歌浏览器,或者跑程序之前,拿到最新的cookies,放到程序里面用

许凌晨的主页 许凌晨 | 初学一级 | 园豆:122
提问于:2018-12-07 13:19
< >
分享
最佳答案
0

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

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

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

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

许凌晨 | 初学一级 |园豆:122 | 2018-12-08 09:38

已解决,打开浏览器后面不会有其他操作,解决
加上无界面请求浏览器
代码: # 开启无界面模式
# options.add_argument('headless')

许凌晨 | 园豆:122 (初学一级) | 2018-12-08 13:40

k看你用python电脑用户名用的汉子就知道是大佬

自说自话唉 | 园豆:193 (初学一级) | 2018-12-10 10:14
其他回答(2)
0

以登录清博大数据举例,登录后需要把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__()
收获园豆:50
ycyzharry | 园豆:25653 (高人七级) | 2018-12-07 13:32

Thank you very much, but that's not what I want. Thank you

支持(0) 反对(0) 许凌晨 | 园豆:122 (初学一级) | 2018-12-07 13:41

@许亦凡: 为什么本地要换浏览器 每次换浏览器cookie就会失效 不利于爬虫或者跑自动化测试

支持(0) 反对(0) ycyzharry | 园豆:25653 (高人七级) | 2018-12-07 13:44

@ycyzharry: 本地的谷歌浏览器cookies会变,但不会让重新输入账号密码,程序里的不换cookies的话,就会让重新输入账号密码,能不能让程序开启本地浏览器,而不是一个纯净的谷歌浏览器,或者跑程序之前,拿到最新的cookies,放到程序里面用

支持(0) 反对(0) 许凌晨 | 园豆:122 (初学一级) | 2018-12-07 13:50
0

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

收获园豆:50
jqw2009 | 园豆:2439 (老鸟四级) | 2018-12-07 15:32

Thank you irrelevant answer

支持(0) 反对(0) 许凌晨 | 园豆:122 (初学一级) | 2018-12-07 15:50

我能抓,也能读,可抓之前,是不是还要登陆,我就是不想再登陆,才来问这个问题的

支持(0) 反对(0) 许凌晨 | 园豆:122 (初学一级) | 2018-12-07 16:01

@许亦凡: 你不登录怎么会有cookie?? 总得有第一步,只要登录一次就可以了

支持(0) 反对(0) jqw2009 | 园豆:2439 (老鸟四级) | 2018-12-07 17:04

@jqw2009: 登陆一次,获取cookies,然后本地的谷歌浏览器cookies会变,但不会让重新输入账号密码,程序里的不换cookies的话,就会让重新输入账号密码,最后还是要去浏览器取cookies ,

支持(0) 反对(0) 许凌晨 | 园豆:122 (初学一级) | 2018-12-07 17:18

@许亦凡: 你刚不是说你能读能抓 那还有问题?? 登录过后cookie在它的有效期内是不会变的

支持(0) 反对(0) jqw2009 | 园豆:2439 (老鸟四级) | 2018-12-07 17:20

@jqw2009: 就是会过效期,我问这个问题 ,你好好看看我的问题

支持(0) 反对(0) 许凌晨 | 园豆:122 (初学一级) | 2018-12-07 17:49

@许亦凡: 如果你一直在请求数据,是不会过期的,我不会知道你怎么搞得,你自己想吧,最好爬数据之前先理解一下网站的原理

支持(0) 反对(0) jqw2009 | 园豆:2439 (老鸟四级) | 2018-12-10 08:51
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册