selenium之跳过手机验证码登陆
使用selenium模拟用户登录时,还会碰到这样的情况:每次打开网页,都需要登录。
这个是没什么难度,但如果每次都让你进行人工验证,就很崩溃了,比如前面文章就写了验证码登录,滑块登录,就解决了一部分问题。
但现在又碰到过每次登录都需要输入手机验证码,这不就让人抓狂了嘛!那有什么解决办法呢?
方法1:电脑连接手机。登录时发送验证码到的手机卡装在手机里,通过读取手机信息来输入验证码。解决一个问题,需要一直连接一个手机和手机卡,成本太高啊,那有没有更好的解决办法呢?当然有 的,那就是方法2。
方法2:携带cookies登录。首先人工登录一次,登录后获取cookies信息,保存在本地,以后每次登录都读取cookies,登录成功后,更新本地cookies,以便后续使用。
思路有了,直接上干货:
第一次运行时,去掉77 和78 行注释,人工登录,会保存cookies到本地文件。
后续再次运行时,注释77 和78 行,只需要运行79和80行即可。
如果cookies过期时间比较快,可以定时登录来更新cookies。
1 from selenium import webdriver 2 import time 3 import json 4 5 6 def browser_first(): 7 """" 8 进行浏览器初始化 9 """ 10 options = webdriver.ChromeOptions() 11 options.add_argument("--disable-blink-features=AutomationControlled") 12 browser = webdriver.Chrome(options=options) # 打开浏览器 13 browser.maximize_window() # 浏览器最大化 14 log_url = 'https://seller.shopee.ph/' 15 return log_url, browser 16 17 18 def get_cookies(log_url, browser): 19 """ 20 获取cookies保存至本地 21 """ 22 browser.get(log_url) 23 time.sleep(120) # 进行扫码 24 dictCookies = browser.get_cookies() # 获取list的cookies 25 jsonCookies = json.dumps(dictCookies) # 转换成字符串保存 26 27 with open('cookie.txt', 'w') as f: 28 f.write(jsonCookies) 29 print('cookies保存成功!') 30 31 32 def browser_second(): 33 """" 34 浏览器初始化,并打开大麦网购票界面(未登录状态) 35 """ 36 options = webdriver.ChromeOptions() 37 options.add_argument("--disable-blink-features=AutomationControlled") 38 browser = webdriver.Chrome(options=options) # 打开浏览器 39 browser.maximize_window() # 浏览器最大化 40 browser.get('https://seller.shopee.ph/') 41 return browser 42 43 44 def login_shop(browser): 45 """ 46 从本地读取cookies并刷新页面,成为已登录状态 47 """ 48 with open('cookie.txt', 'r', encoding='utf8') as f: 49 listCookies = json.loads(f.read()) 50 51 # 往browser里添加cookies 52 for cookie in listCookies: 53 cookie_dict = { 54 'domain': '.shopee.ph', 55 'name': cookie.get('name'), 56 'value': cookie.get('value'), 57 "expires": '', 58 'path': '/', 59 'httpOnly': False, 60 'HostOnly': False, 61 'Secure': False 62 } 63 browser.add_cookie(cookie_dict) 64 browser.get('https://seller.shopee.ph/') 65 browser.refresh() # 刷新网页,cookies才成功 66 67 time.sleep(2) # 登录后等待下 68 dictCookies = browser.get_cookies() # 获取list的cookies 69 jsonCookies = json.dumps(dictCookies) # 转换成字符串保存 70 71 with open('cookie.txt', 'w') as f: 72 f.write(jsonCookies) 73 print('cookies保存成功!') 74 75 76 if __name__ == "__main__": 77 # tur = browser_first() 78 # get_cookies(tur[0], tur[1]) 79 browser = browser_second() 80 login_shop(browser)
参考:https://blog.csdn.net/weixin_43821172/article/details/105199481