消除由selenium - Java自动进入QR - Whatsapp网络

时间:2018-04-14 13:25:46

标签: java selenium cookies local-storage whatsapp

我正试图在第一次之后消除QR码的过程。

通过网络驱动程序运行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/");

}

}

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

但是我得到了下一个例外:

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

如果我正在尝试保存Cookie,则设置的Cookie为空(无法保存任何Cookie,仍然不知道原因)。

如何在第一次跳过此QR过程?如果有人知道如何跳过它而不做一次,它也会有所帮助(但我觉得现在太难了)。

提前致谢!

3 个答案:

答案 0 :(得分:3)

使用个人资料!

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 :(得分:1)

Marcelo的回答是正确的,但我认为解释不力,所以这对我有用:

在项目目录中创建一个文件夹,以存储chromedriver会话将创建的所有缓存(忽略.gitignore文件中的内容也很不错)。

enter image description here

然后,启动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/')

答案 2 :(得分:0)

如果您不使用,则可以在第一次尝试后跳过二维码扫描

ChromeOptions options = new ChromeOptions();
options.addArguments("--incognito"); 
options.addArguments("--no-sandbox");

删除--incognito类型选项