使用硒:如何在whatsapp中关闭Python中的驱动程序后保持登录状态



我不想在 https://web.whatsapp.com 一遍又一遍地登录。我已经尝试了一些解决方案,但它无法使用硒铬驱动程序。

options=Options
options.add_argument("user-data-dir=C:\Users\oyoAppData\Local\Google\Chrome\User Data")
browser = webdriver.Chrome("chrome_options=options")
TypeError: add_argument() missing 1 required positional argument: 'argument'

我能够通过向 chrome 添加开始选项来保存会话 -> 您需要添加选项--user-data-dir <folder> .

我使用了这些地方的代码。

  • Java 或 C# 中的会话示例 - https://stackoverflow.com/a/50637211/406423
  • Whatsapp in Python with Selenium - https://www.geeksforgeeks.org/whatsapp-using-python/

我在 Ubuntu 18.04 下运行此代码。

运行此代码之前关闭谷歌浏览器。否则 Selenium 将重用当前的浏览器实例,并且无法使用 --user-data-dir <folder> -选项运行它。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
# Replace below path with the absolute path
# to chromedriver in your computer
options = webdriver.ChromeOptions();
options.add_argument("user-data-dir=~/.chrome_driver_session")
# Create the folder. Change path accordingly
driver = webdriver.Chrome('./chromedriver_78/chromedriver', chrome_options=options)
driver.get("https://web.whatsapp.com/")
wait = WebDriverWait(driver, 600)
# Replace 'Friend Name' with the name of your friend or the name of a group
target = '"Friend Name"'
# Replace the below string with your own message
# I'm unsure why it needs two empty spaces in front of it.
string = "  " + "Nachricht von Wichtel_Whatsapp"
x_arg = '//span[contains(@title,' + target + ')]'
group_title = wait.until(EC.presence_of_element_located((By.XPATH, x_arg)))
group_title.click()
print("Clicked")
default_input = "Schreib eine Nachricht"
# Change the Text with the default of the input-field
inp_xpath = "//div[contains(.,'" + default_input + "')]"
input_box = wait.until(EC.presence_of_element_located((By.XPATH, inp_xpath))).find_element_by_xpath('..')
input_box.send_keys(string)
# If the Text is written in the input field, use this line:
# input_box.send_keys(string + Keys.ENTER)

为了将您的会话从一个浏览器实例转移到另一个浏览器实例,您需要做的就是将 Cookie 从第一个会话复制到第二个会话。Selenium提供了多种允许cookie操作的方法,您将需要:

  1. driver.get_cookies() - 从您登录的会话中获取 cookie
  2. add_cookie() - 将 Cookie 还原到新的浏览器实例中

在您的情况下,您可以将 cookie 存储到临时文件中,作为第一次执行的最后一步,并在第二次执行的第一步从文件中读取它们。

示例代码:

#Store cookies
cookies = driver.get_cookies()
for cookie in cookies:
    with open('cookies.txt', 'a') as stored_cookies:
        stored_cookies.write(str(cookie) + 'n')
#Restore cookies
with open('cookies.txt') as stored_cookies:
    cookie = eval(stored_cookies.readline())
    driver.add_cookie(cookie)
import os
from selenium import webdriver
dir_path = os.getcwd()
profile = os.path.join(dir_path, "profile", "wpp")
options = webdriver.ChromeOptions()
options.add_argument(
        r"user-data-dir={}".format(profile))
browser = webdriver.Chrome("./chromedriver.exe", chrome_options=options)
browser.get("https://web.whatsapp.com")

我认为这是最好的方式

相关内容

最新更新