Đăng nhập vào tài khoản gmail không thành công (tự động hóa selen)


8

Tôi có một dịch vụ Selenium phải đăng nhập vào tài khoản gmail của tôi như bước đầu tiên. Chức năng này đã hoạt động vài tuần trước, nhưng đột nhiên đăng nhập bắt đầu không thành công và tôi thấy Lỗi này trong trình duyệt, đã thử cả trong trình điều khiển Chrome và Firefox trong selenium -

nhập mô tả hình ảnh ở đây

Lỗi này xuất hiện sau khi dịch vụ selenium chèn email, mật khẩu và nhấp vào nút đăng nhập. Một lỗi tương tự cũng đã được báo cáo trong Diễn đàn hỗ trợ của Google tại đây- https://support.google.com/accounts/thread/10916318?hl=vi , Họ nói rằng "Google dường như đã giới thiệu phát hiện các công cụ tự động hóa trên luồng đăng nhập của họ!" nhưng không có giải pháp trong chủ đề này.

Một số chi tiết khác có thể hữu ích-

  • Tôi không thể đăng nhập thủ công vào tài khoản Google trong các trình duyệt
    được mở bởi Selenium.
  • Nhưng tôi có thể đăng nhập thủ công vào các tài khoản này trong ứng dụng Google Chrome.

Hãy cho tôi biết nếu bạn cần xem mã, tôi sẽ đăng nó ở đây. Cảm ơn trước!

Chỉnh sửa Thêm mã mẫu để tham khảo.

public void loginGoogleAccount(String emailId, String password) throws Exception {
    ChromeOptions options = new ChromeOptions();
    options.addArguments("--profile-directory=Default");
    options.addArguments("--whitelisted-ips");
    options.addArguments("--start-maximized");
    options.addArguments("--disable-extensions");
    options.addArguments("--disable-plugins-discovery");
    WebDriver webDriver = new ChromeDriver(options);
    webDriver.navigate().to("https://accounts.google.com");
    Thread.sleep(3000);
    try {
        WebElement email = webDriver.findElement(By.xpath("//input[@type='email']"));
        email.sendKeys(emailId);
        Thread.sleep(1000);

        WebElement emailNext = webDriver.findElement(By.id("identifierNext"));
        emailNext.click();
        Thread.sleep(1000);

        WebDriverWait wait = new WebDriverWait(webDriver, 60);
        wait.until(ExpectedConditions.invisibilityOfElementLocated(By.id("identifierNext")));

        Thread.sleep(3000);
        WebElement passwordElement = webDriver.findElement(By.xpath("//input[@type='password']"));
        passwordElement.sendKeys(password);

        Thread.sleep(1000);
        WebElement passwordNext = webDriver.findElement(By.id("passwordNext"));
        passwordNext.click();

    } catch (Exception e) {
        LOGGER.info(String.format("No email/password field available or it is already logged in: [%s]: ",
                e.getMessage()));
    }
}

1
Nghe có vẻ như là một giới hạn với chính Google, có lẽ họ không muốn mọi người sử dụng tự động hóa UI truy cập dịch vụ của họ. Gần đây tôi đã thấy vấn đề này xuất hiện trên StackOverflow và vấn đề luôn luôn như vậy. Có lẽ bạn sẽ gặp may mắn hơn khi sử dụng API của họ.
Christine

Có vẻ như google biết rằng một robot có thể đang cố gắng đăng nhập và họ không muốn điều đó xảy ra như @Christine đã nói ... Hãy thử sửa đổi chromedriver như được đề cập ở đây để họ không thể phát hiện ra robot (tập lệnh). Ngoài ra, trong khi đăng nhập, bạn phải sử dụng chờ ngẫu nhiên trước khi nhấn từng phím trong hộp văn bản, để bạn không nhìn thấy hình ảnh xác thực. Không trực tiếp gửi khóa vào hộp văn bản.
Ali Sajjad

@Christine API nào bạn đang đề cập?
gashu

@AliSajjad Điều đó không có ích, tôi đã thử cả hai với việc sửa đổi chromedriver và cũng sử dụng thời gian chờ ngẫu nhiên.
gashu

Bạn đã thử sửa đổi userAgent được sử dụng chưa? Có thể Selenium tự giới thiệu là Selenium, do đó Google cố gắng chặn nó. Điều này có thể giúp -> stackoverflow.com/a/29966769/2838206
klubi

Câu trả lời:


5

Chuyển đổi "Cho phép truy cập ứng dụng ít an toàn hơn"
Có một cài đặt trên tài khoản của bạn mà bạn có thể chuyển đổi có thể giúp với điều này. Đó là "Cho phép truy cập ứng dụng ít an toàn hơn". Bạn có thể truy cập liên kết bên dưới để chuyển đổi cài đặt đó nếu bạn đã đăng nhập vào tài khoản gmail mà bạn muốn sửa đổi.

Liên kết để thay đổi cài đặt trên tài khoản google: https://myaccount.google.com/lesssecurur xuất hiện lại

Thông tin khác (nguồn): https://support.google.com/accountsals/6010255


Tôi chắc chắn đề xuất giải pháp này, cài đặt này thực sự giúp chúng tôi cố gắng đăng nhập bằng java mail api hoặc sử dụng cấu hình maven mà không cần can thiệp.
Amit Jain

3
Tôi đã thử điều này, Thật không may, điều này đã không khắc phục vấn đề.
gashu

@gashu Bạn có thể hướng dẫn tôi chính xác những gì bạn đang cố gắng thực hiện với bài kiểm tra này không? Có một số công cụ hiện có mà bạn có thể cố gắng cách ly hoặc sửa chữa những gì đang diễn ra. Một công cụ như vậy được đề cập trong bài viết này. Nếu bạn cung cấp cho tôi chi tiết cụ thể hơn về cách thiết lập thử nghiệm, hành động nào được thực hiện và những gì được khẳng định khi kết thúc thử nghiệm, nó sẽ giúp chỉ cho bạn một hướng có thể giúp ích. Medium.com/@levz0r/ từ
NANfan

4
Không làm việc cho tôi.
Sur ngạc nhiên

1
Câu hỏi đặc biệt liên quan đến Selenium, mà cài đặt ứng dụng ít thành công không liên quan gì, bởi vì với Google, Selenium không phải là một ứng dụng và chắc chắn không phải là một ứng dụng được hỗ trợ. Google có thể phát hiện ra rằng đăng nhập được bắt đầu từ một trình duyệt bằng cách sử dụng webdo và khối mới này đặc biệt nhắm mục tiêu đó. Hiện tại không có giải pháp được biết đến.
Moonstone

3

Tôi vừa thử một cái gì đó hoạt động cho tôi sau vài giờ dùng thử và lỗi.

Thêm args: ['--disable-web-security', '--user-data-dir', '--allow-running-insecure-content' ]vào cấu hình của tôi đã giải quyết vấn đề.

Sau đó tôi nhận ra rằng đây không phải là điều giúp tôi khi tôi thử với một email khác và nó không hoạt động. Sau một số quan sát, tôi đã tìm ra một cái gì đó khác và điều này đã được thử và kiểm tra.

Sử dụng tự động hóa :

Tới https://stackoverflow.com/users/login Chọn Log in with Chiến lược Google Nhập tên người dùng và mật khẩu Google Đăng nhập vào Stackoverflow Đến https://gmail.com (hoặc bất kỳ ứng dụng Google bạn muốn truy cập)

Sau khi thực hiện việc này liên tục trong cả ngày (khoảng 24 giờ), hãy thử tự động đăng nhập trực tiếp vào gmail (hoặc bất kỳ ứng dụng Google nào bạn muốn truy cập) ... Tôi đã có ít nhất hai người khác làm điều này thành công. Tái bút - Bạn có thể muốn tiếp tục đăng nhập stackoverflow cho đến khi ít nhất bạn nhận được yêu cầu captcha vì tất cả chúng ta cũng đã trải qua giai đoạn đó.


1

Vấn đề này là do hồ sơ chrome selenium. Tạo một hồ sơ chrome mới và đăng nhập vào nó với id email mà bạn đang gặp phải vấn đề. Sau đó bật đồng bộ hóa.

Với cấu hình chrome này, tôi có thể bỏ qua các bước đăng nhập và trực tiếp thực hiện quy trình chính. Sử dụng:Chrome Options để thêm hồ sơ chrome mới được tạo làm đối số.

ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.setBinary("Binary path of the Chrome");

Hy vọng điều này sẽ giúp bạn.


1
Cảm ơn đã trả lời! Nhưng tôi đang tìm kiếm một giải pháp mà chúng ta không phải tạo chrome Profile, với hồ sơ nếu tôi không sai selen có thể mở một trình duyệt cùng một lúc, phải không? Tôi bắt đầu nhận được các lỗi như hồ sơ Chrome đã được sử dụng.
gashu

1

Kiểm tra xem phiên bản Chrome của bạn có> = 79 không và nếu có, hãy hạ cấp xuống 78. Đây là những gì tôi đã làm (Windows):

Tôi đã gỡ cài đặt "Chrome bán lẻ" liên tục tự nâng cấp lên phiên bản mới nhất bằng các thủ thuật lén lút như dịch vụ Google Chrome sẽ kiểm tra các bản cập nhật trong nền.

Ngay cả việc vô hiệu hóa các dịch vụ hệ thống đó cũng không giúp ích được vì Chrome bán lẻ cũng cài đặt các sự kiện hẹn giờ sẽ kích hoạt lại các dịch vụ nói vào giữa đêm, vì vậy bạn sẽ thức dậy với phiên bản mới và thậm chí không nhận thấy cho đến khi mọi thứ bị hỏng.

Tôi đã cài đặt v78 từ "trình cài đặt ngoại tuyến" được tìm thấy ở đây, dường như không cài đặt bất kỳ tính năng nâng cấp tự động "hữu ích" nào: https://www.neowin.net/news/google-chrome-780490470-offline-installer/

Vấn đề trên đã biến mất như ma thuật. Dường như v79 có một số tính năng chống được tích hợp trong đó gọi về nhà với thông tin cho phép Google kết luận rằng bot đang hoạt động.

Hy vọng điều này hiệu quả với bạn ... nếu không, bạn có thể đầu tư nhiều thời gian và tạo "trình giả lập Chrome" của riêng mình bằng cách vá và biên dịch Chromium phù hợp ...


Tôi đã sai khi nghĩ Chrome v78 không cài đặt các tính năng nâng cấp tự động lén lút. Nó chỉ đơn giản là thay thế chính nó thường xuyên với phiên bản 80+ khi khởi động lại. Cách duy nhất tôi tìm thấy để ngăn chặn hành vi này là xem xét C:\Users\USERNAME\AppData\Local\Google\Chrome\Applicationtrước khi bắt đầu chrome. Nếu có một tệp new_chrome.exevà / hoặc một thư mục có tên 80.*(hoặc cao hơn tại thời điểm bạn đọc tệp này), thì nó đã kích hoạt tự động cập nhật bắt buộc. Xóa new_chrome.exe, sau đó khởi chạy chrome.exe. Nó sẽ là tầm thường để viết một tập tin hàng loạt xóa new_chrome.exetrước khi bắt đầu chrome.exe.
Blitter
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.