消除通过Selenium自动化进入Whatsapp Web的QR码扫描步骤 - Java

10

我正在尝试在第一个二维码后消除二维码流程。

我的代码通过Web驱动程序运行Whatsapp:

public class DriverTester {

public static void main(String[] args) {

    DesiredCapabilities capabilities = DesiredCapabilities.chrome();
    capabilities.setCapability(CapabilityType.UNEXPECTED_ALERT_BEHAVIOUR, UnexpectedAlertBehaviour.IGNORE);
    ChromeDriverService service = new ChromeDriverService.Builder()
            .usingDriverExecutable(new File("C:\\whatsup\\src\\main\\resources\\chromedriver.exe"))
            .usingAnyFreePort()
            .build();

    ChromeOptions options = new ChromeOptions();
    options.merge(capabilities);
    ChromeDriver driver = new ChromeDriver(service, options);

    driver.navigate().to("https://web.whatsapp.com/");

    while (driver.findElements(By.xpath(XPaths.autoStartReady)).size() == 0);

    LocalStorage localStorage = driver.getLocalStorage();

    driver.close();

    driver = new ChromeDriver(service, options);

    for (String key : localStorage.keySet()){
        String value = localStorage.getItem(key);
        driver.executeScript("window.localStorage.setItem('"+key+"', '"+value+"');");
    }

    driver.navigate().to("https://web.whatsapp.com/");

}

当浏览器首次打开时,我正在手机上执行QR码例行程序。在执行javascript代码时引发了异常。

但是我得到了下一个异常:

Exception in thread "main" org.openqa.selenium.NoSuchSessionException: no such session

如果我试图保存cookie,那么cookie设置为空(无法保存任何cookie,仍然不知道为什么)。

如何跳过第一次扫码的过程?如果有人知道如何在不进行一次扫码的情况下跳过它,那也会很有帮助(但我现在认为这太困难了)。

提前致谢!


如果遇到相同的问题,请发布您找到的解决方案。 - ishandutta2007
@DebanjanB,你有任何想法吗?我们已经等待了一段时间的答案。 - ishandutta2007
3个回答

15

使用个人资料!

from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_argument(r"user-data-dir=D:\Python\Memory\WebWhatsAppBot")

navegador = webdriver.Chrome(
executable_path="D:\Python\WebWhatsAppBot\chromedriver.exe", chrome_options=options)
navegador.get("https://web.whatsapp.com/")

1
你能解释一下你的解决方案吗? - Roni Koren Kurtberg
是的,配置文件是绕过每次扫描QR码的正确方法。您只需要扫描一次。我也使用了配置文件。 - Shyam

5

我认为Marcelo的答案是正确的,但解释得不太清楚,以下是我成功实践的步骤:

在项目目录下创建一个文件夹,用于存储chromedriver会话生成的所有缓存(也可以将其内容添加到.gitignore文件中)。

输入图像描述

然后,启动webdriver选项并设置该目录。

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
import time

options = webdriver.ChromeOptions()
options.add_argument(r"user-data-dir=./driver/data")
driver = webdriver.Chrome(executable_path=r'./driver/chromedrive84_win', options=options)
driver.get('https://web.whatsapp.com/')

1
如果您没有使用过,第一次尝试后可以跳过扫描QR码。
ChromeOptions options = new ChromeOptions();
options.addArguments("--incognito"); 
options.addArguments("--no-sandbox");

在移除 --incognito 类型选项之后


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接