python-爬虫-解决反爬机制-登录淘宝
#-*- coding: utf-8 -*- """ 1、先手动登录获取cookie 2、获取cookie保存在taobaoCookies.pickle 文件中 3、使用cookie去请求网页 """ import os import pickle import time from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWait brower = webdriver.Chrome() wait = WebDriverWait(brower, 10) #获取driver打开浏览器的对象 def get_browser(): options = webdriver.ChromeOptions() #打开开发者模式 options.add_experimental_option('excludeSwitches', ['enable-automation']) #打开浏览器后不关闭 options.add_experimental_option("detach", True) #禁用Blink功能 options.add_argument("--disable-blink-features=AutomationControlled") driver = webdriver.Chrome(options=options) #覆盖window.navigate.webdriver #打开浏览器后在控制台输入:window.navigator.webdriver 看返回是否是undefined-说明浏览器没有识别是selenium打开的浏览器、如果是true说明是被反爬了 driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", { "source": """ Object.defineProperty(navigator, 'webdriver', { get: () => undefined }) """ }) return driver #获取cookie def get_cookie(index_url, login_url): driver = get_browser() driver.get(login_url) while True: time.sleep(5) while driver.current_url == index_url: #获取登陆后的cookie信息 # #返回一个列表字典-每个个字典中含有一个 name:value 键值对 、这个就是cookie的 名称和值 tbCookies = driver.get_cookies() driver.quit() #print(tbCookies) print('==' * 60) #遍历cookie cookies = {} for item in tbCookies: #取出每个字典中的name和value 的值 cookies[item['name']] = item['value'] #保存cookie output_path = open('taobaoCookies.pickle', 'wb') #将 Python 对象序列化保存到文件中 #pickle.load(文件名) 反序列化、将文件内容反序列化为python对象 pickle.dump(cookies, output_path) output_path.close() #print(cookies) return cookies #读取获取的cookie信息 def read_cookies(index_url, login_url): if os.path.exists('taobaoCookies.pickle'): read_path = open('taobaoCookies.pickle', 'rb') #pickle.load(read_path) 反序列化、将文件内容反序列化为 python对象 tbCookies = pickle.load(read_path) else: tbCookies = get_cookie(index_url, login_url) return tbCookies #使用cookie去访问网页 def request_adress(index_url): tbCookies = read_cookies(index_url, login_url) driver = get_browser() driver.get(index_url) #向当前浏览器会话中添加一个cookie for cookie in tbCookies: driver.add_cookie({ "domain": ".taobao.com", #这是cookie的域名、域名前有一个 . 表示对所有的子域名都有效 "name": cookie, #cookie名称 "value": tbCookies[cookie], #cookie的值 "path": '/', #这是cookie的路径。'/'表示该cookie对于域名的所有路径都是有效的 "expires": None #这是cookie的过期时间。None表示该cookie没有过期时间,即它是一个会话cookie,当浏览器会话结束时它会被删除 }) #再次请求网页-带cookie请求 driver.get(index_url) print("登录后在这里针对淘宝做一些操作了。。。。。。。。。。。。") if __name__ == '__main__': index_url = "https://www.taobao.com/" #淘宝首页 login_url = "https://login.taobao.com/member/login.jhtml" #淘宝登录界面 #第一次登录要打开此函数用来获取cookie #get_cookie(index_url, login_url) #time.sleep(2) #当获取cookie后打开这个函数去访问网页就不需要再登陆了 request_adress(index_url)
本文作者:little小新
本文链接:https://www.cnblogs.com/littlecc/p/18244299
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步