使用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
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
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) # 转换成字符串保存
27 with open('cookie.txt', 'w') as f:
28 f.write(jsonCookies)
29 print('cookies保存成功!')
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
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())
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才成功
67 time.sleep(2) # 登录后等待下
68 dictCookies = browser.get_cookies() # 获取list的cookies
69 jsonCookies = json.dumps(dictCookies) # 转换成字符串保存
71 with open('cookie.txt', 'w') as f:
72 f.write(jsonCookies)
73 print('cookies保存成功!')
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