直接把谷歌浏览器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,放到程序里面用
我找到了 问题解决办法,就是调用本地的谷歌文件,程序里这样写:
options = webdriver.ChromeOptions()
options.add_argument("--user-data-dir=" + r"C:\Users\许亦凡\AppData\Local\Google\Chrome\User Data")
driver = webdriver.Chrome(chrome_options=options)
解决了 我上面的问题 ,可是还有新的问题,就是启动的时候,不能打开浏览器,如果有已打开的浏览器,程序只会打开浏览器,不会进行后面的动作,如果没有打开谷歌浏览器,程序将正常运行
已解决,打开浏览器后面不会有其他操作,解决
加上无界面请求浏览器
代码: # 开启无界面模式
# options.add_argument('headless')
k看你用python电脑用户名用的汉子就知道是大佬
以登录清博大数据举例,登录后需要把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__()
Thank you very much, but that's not what I want. Thank you
@许亦凡: 为什么本地要换浏览器 每次换浏览器cookie就会失效 不利于爬虫或者跑自动化测试
@ycyzharry: 本地的谷歌浏览器cookies会变,但不会让重新输入账号密码,程序里的不换cookies的话,就会让重新输入账号密码,能不能让程序开启本地浏览器,而不是一个纯净的谷歌浏览器,或者跑程序之前,拿到最新的cookies,放到程序里面用
直接从谷歌的cookie文件里抓信息就好了,谷歌的cookie是个小数据库,可以用sql语句直接读出来cookie信息就行了,然后该干嘛干嘛
Thank you irrelevant answer
我能抓,也能读,可抓之前,是不是还要登陆,我就是不想再登陆,才来问这个问题的
@许亦凡: 你不登录怎么会有cookie?? 总得有第一步,只要登录一次就可以了
@jqw2009: 登陆一次,获取cookies,然后本地的谷歌浏览器cookies会变,但不会让重新输入账号密码,程序里的不换cookies的话,就会让重新输入账号密码,最后还是要去浏览器取cookies ,
@许亦凡: 你刚不是说你能读能抓 那还有问题?? 登录过后cookie在它的有效期内是不会变的
@jqw2009: 就是会过效期,我问这个问题 ,你好好看看我的问题
@许亦凡: 如果你一直在请求数据,是不会过期的,我不会知道你怎么搞得,你自己想吧,最好爬数据之前先理解一下网站的原理