Κοινή χρήση τεχνολογίας

Αυτοματισμός Python Selenium χωρίς σύνδεση (cookie και token)

2024-07-12

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

Πίνακας περιεχομένων

Είσοδος χωρίς cookie

Λάβετε cookies μέσω της διεπαφής

Ενεργοποίηση σύνδεσης παράκαμψης προγράμματος περιήγησης

προσθήκη διακριτικού


Η χρήση σύνδεσης μπορεί να μειώσει τις επαναλαμβανόμενες λειτουργίες κάθε σύνδεσης, να χειριστεί απευθείας τη σελίδα μενού μετά τη σύνδεση και επίσης να μειώσει τη σύνδεση επαλήθευσης ασφαλείας, όπως λειτουργίες σύνδεσης επαλήθευσης εικόνας. Σημείωση: Τα cookies και τα token έχουν ημερομηνίες λήξης.

Είσοδος χωρίς cookie

Αποκτήστε cookie απευθείας από τα εργαλεία προγραμματιστή και προσθέστε τα Η παρακάτω εικόνα δείχνει τα cookie πολλών ιστότοπων στην ιστοσελίδα.

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

αύξηση της κλάσης_εξαίρεσης (μήνυμα, οθόνη, stacktrace)
selenium.common.exceptions.InvalidCookieDomainException: Μήνυμα: μη έγκυρος τομέας cookie
(Πληροφορίες περιόδου σύνδεσης: MicrosoftEdge=126.0.2592.87)

Εάν εμφανιστεί το παραπάνω σφάλμα, μπορείτε να προσθέσετε μια γραμμή του wd.get(URL) πριν από το wd.add_cookie(cookie_dict=cookie), ως εξής:

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

Λάβετε cookies μέσω της διεπαφής

Αφού λάβετε δεδομένα cookie μέσω της διεπαφής, προσθέστε τη χρήση cookie σε σελήνιο

  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 ή στο πρόγραμμα περιήγησης edge:chrome://version/   或  edge://version/ 查看配置文件夹路径,Αφαιρέστε το Default στο τέλος και, στη συνέχεια, προσθέστε ––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()