Selenium Webdriver:如何绕过 Google 的“接受 cookie”对话框

问题描述

我在 Java 中有一个非常简单的 Selenium WebDriver 项目,我在其中使用了 FireFox 驱动程序。

我的目标是导航到 Google 的页面 (https://www.google.com) 并在提示接受时 Cookies 能够点击“我同意”按钮来摆脱它并进一步继续自动化过程。但由于某种原因,我无法让浏览器找到它。

这是我目前使用的指令:

package main;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;

public class SeleniumGoogleTest {

    public static void main(String[] args) {

        WebDriver driver = new FirefoxDriver();
        driver.get("https://www.google.com");
        WebElement acceptButton = driver.findElement
        (By.xpath("/html/body/div/c-wiz/div[2]/div/div/div/div/div[2]/form/div/div[2]"));
        
    
    }
}


我不知道为什么浏览器找不到它并激活/启用页面的那部分 既没有隐式等待,也没有显式等待Thread.sleep() 方法似乎不是 在这种情况下的解决方案。

我在运行应用程序时收到的唯一错误消息是“无法定位元素”



A screenshot of where I get stuck


是你真的不能用 Selenium WebDriver 自动化一些东西还是我在这里误解了一些重要的概念?

非常感谢所有提示

解决方法

弹出窗口位于 iFrame 上,首先您必须切换到 iFrame:

driver.switchTo().frame(yourFrame);

找到接受按钮后,点击它:

driver.findElement(By.id("id")).click();
,
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
import time
driver = webdriver.Chrome('chromedriver.exe')

driver.get('https://google.com/xhtml')

time.sleep(2) # seconds until popup appears

try: # 2 different popups
    frame = driver.find_element_by_xpath('//*[@id="cnsw"]/iframe')
    driver.switch_to.frame(frame)
    driver.find_element_by_xpath('//*[@id="introAgreeButton"]').click()

except NoSuchElementException:
    driver.find_element_by_xpath('//*[@id="zV9nZe"]').click()
,

我使用了与 Jus 相同的解决方案,但 Chrome 从那时起更改了“我同意”按钮 id

更新后的解决方案应该是什么样子

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
import time
driver = webdriver.Chrome('chromedriver.exe')

driver.get('https://google.com/xhtml')

time.sleep(2) # seconds until popup appears

try: # 2 different popups
    frame = driver.find_element_by_xpath('//*[@id="cnsw"]/iframe') #<-locating chrome cookies consent frame 
    driver.switch_to.frame(frame) 
    driver.find_element_by_xpath('//*[@id="introAgreeButton"]').click()#<-looking for introAgreeButton button,but seems google has changed its name since and  it only works in old chrome versions.

except NoSuchElementException:
    driver.find_element_by_xpath('//*[@id="L2AGLb"]').click() #<- pay attention to new id.

如果这个 id 会过期,我建议你像这样自己检查元素:

Inspect Element

单击两次“检查元素”

Locating 'I agree' button's id