Technologieaustausch

Python Selenium-Automatisierung ohne Login (Cookie und Token)

2024-07-12

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

Inhaltsverzeichnis

Cookie-freier Login

Holen Sie sich Cookies über die Schnittstelle

Aktivieren Sie die Browser-Bypass-Anmeldung

Token hinzufügen


Durch die Verwendung der Anmeldung können die wiederholten Vorgänge bei jeder Anmeldung reduziert, die Menüseite nach der Anmeldung direkt bedient und auch die Sicherheitsüberprüfungsanmeldung, z. B. Bildüberprüfungs-Anmeldevorgänge, reduziert werden. Hinweis: Cookies und Token haben ein Ablaufdatum.

Cookie-freier Login

Rufen Sie Cookies direkt von den Entwicklertools ab und fügen Sie sie hinzu. Das Bild unten zeigt die Cookies mehrerer Websites auf der Webseite. Wählen Sie einfach die aus, die Sie benötigen, und fügen Sie sie hinzu.

  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()

Ausnahmeklasse auslösen (Nachricht, Bildschirm, Stacktrace)
selenium.common.exceptions.InvalidCookieDomainException: Meldung: ungültige Cookie-Domäne
(Sitzungsinfo: MicrosoftEdge=126.0.2592.87)

Wenn Sie die obige Fehlermeldung erhalten, können Sie wie folgt eine Zeile von wd.get(URL) vor wd.add_cookie(cookie_dict=cookie) hinzufügen:

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

Holen Sie sich Cookies über die Schnittstelle

Nachdem Sie Cookie-Daten über die Schnittstelle erhalten haben, fügen Sie die Cookie-Nutzung in Selenium hinzu

  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

Aktivieren Sie die Browser-Bypass-Anmeldung

Geben Sie in Google oder Edge-Browser ein:chrome://version/   或  edge://version/ 查看配置文件夹路径,Entfernen Sie den Standardwert am Ende und fügen Sie dann ––user-data-dir= vor dem Pfad hinzu, um den gewünschten Pfad zusammenzufügen.

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()

Hinweis: Wenn Sie diese Methode verwenden, müssen Sie das entsprechende Browserprogramm schließen. Andernfalls wird ein Fehler gemeldet. Daher müssen Sie den entsprechenden Browserprozess vor der Ausführung beenden. Der obige Code verwendet eine Fuzzy-Matching-Abfrage, um den Prozess abzubrechen, und der folgende Code ist ein vollständiger Matching.

  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 #判断浏览器进程是否杀完

Token hinzufügen

  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()