기술나눔

로그인 없이 Python Selenium 자동화(쿠키 및 토큰)

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

목차

쿠키 없는 로그인

인터페이스를 통해 쿠키 가져오기

브라우저 우회 로그인 활성화

토큰 추가하기


로그인을 이용하면 로그인할 때마다 반복되는 작업을 줄일 수 있고, 로그인 후 메뉴 페이지를 직접 조작할 수 있으며, 이미지 인증 로그인 작업 등 보안 인증 로그인 작업도 줄일 수 있습니다. 참고: 쿠키와 토큰에는 만료 날짜가 있습니다.

쿠키 없는 로그인

개발자 도구에서 직접 쿠키를 얻어 추가하세요. 아래 그림은 웹페이지에 있는 여러 사이트의 쿠키를 보여줍니다. 필요한 쿠키를 선택하여 추가하세요.

  1. from selenium import webdriver
  2. from selenium.webdriver.edge.options import Options
  3. # 一般只需要name和value
  4. cookie = {'name': 'ZY44', 'value': 'tLonhTkz50iHzxjhIsaaaafferr:C'}
  5. options = Options()
  6. # options.add_argument('--headless')
  7. wd = webdriver.Edge(options=options)
  8. wd.add_cookie(cookie_dict=cookie)
  9. #for c in cookies: # 如果是多个cookie要添加,cookies存储为列表是,使用循环添加
  10. # wd.add_cookie(c)
  11. wd.refresh() # 刷新页面
  12. wd.get(URL)
  13. wd.quit()

예외 클래스(메시지, 화면, 스택 추적)를 발생시킵니다.
selenium.common.exceptions.InvalidCookieDomainException: 메시지: 잘못된 쿠키 도메인
(세션 정보: MicrosoftEdge=126.0.2592.87)

위의 오류가 발생하면 다음과 같이 wd.add_cookie(cookie_dict=cookie) 앞에 wd.get(URL) 줄을 추가할 수 있습니다.

  1. wd.get(URL)
  2. wd.add_cookie(cookie_dict=cookie)
  3. wd.get(URL)

인터페이스를 통해 쿠키 가져오기

인터페이스를 통해 쿠키 데이터를 얻은 후 셀레늄에 쿠키 사용량을 추가합니다.

  1. def get_cookies():
  2. headers = {
  3. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36',
  4. }
  5. host = 'https://baike.baidu.com'
  6. req = requests.get(host, headers=headers)
  7. cookie_data = req.cookies.get_dict()
  8. cookies = []
  9. for key, value in cookie_data.items():
  10. cookies.append(dict(name=key, value=value))
  11. return cookies

브라우저 우회 로그인 활성화

Google 또는 엣지 브라우저에 입력하세요.chrome://version/   或  edge://version/ 查看配置文件夹路径,끝에서 기본값을 제거한 다음 경로 앞에 --user-data-dir=을 추가하여 원하는 경로를 연결합니다.

profile_directory = r'--user-data-dir=C:UsersxxxAppDataLocalMicrosoftEdgeUser Data'

  1. # 这里使用模糊匹配,把edge开头的进程都杀掉
  2. if platform.system() == "Windows":
  3. os.system("taskkill -im msedge* -f")
  4. else:
  5. os.system("killall -9 msedge*")
  6. user_data = r'C:UsersxxxAppDataLocalMicrosoftEdgeUser Data'
  7. profile_directory = rf'--user-data-dir={user_data}'
  8. options = Options()
  9. # options.add_argument('--headless')
  10. options.add_argument(profile_directory)
  11. wd = webdriver.Edge(options=options)
  12. wd.maximize_window()
  13. wd.get(URL)
  14. wd.quit()

참고: 이 방법을 사용할 경우 해당 브라우저 프로그램을 닫아야 합니다. 그렇지 않으면 오류가 보고되므로 실행하기 전에 해당 브라우저 프로세스를 종료해야 합니다. 위의 코드는 퍼지 일치 쿼리를 사용하여 프로세스를 종료하고 다음은 전체 일치입니다.

  1. returnCode=os.system('taskkill /F /iM chrome.exe') # 谷歌
  2. returnCode=os.system('taskkill /F /iM iexplore.exe') # IE
  3. returnCode=os.system('taskkill /F /iM firefox.exe') # 火狐
  4. returnCode=os.system('taskkill /F /iM msedge.exe') # edge
  5. assert returnCode==0 #判断浏览器进程是否杀完

토큰 추가하기

  1. token = "my_token"
  2. options = Options()
  3. options.add_argument('--headless')
  4. wd = webdriver.Edge(options=options)
  5. wd.execute_script("window.localStorage.setItem('token', '%s');" % token) # 使用selenium执行js的操作添加token
  6. wd.maximize_window()
  7. wd.get(url)
  8. wd.quit()