java Selenium Web驱动程序:如何绕过Google "接受Cookie"对话框

u4vypkhs  于 2023-03-06  发布在  Java
关注(0)|答案(5)|浏览(139)

我有一个非常简单的Java Selenium WebDriver项目,我在其中使用FireFox驱动程序。
我的目标是导航到谷歌的页面(https://www.google.com),当提示接受Cookie时,可以点击“我同意”按钮,以摆脱它,并继续进一步的自动化过程。但由于某种原因,我就是不能让浏览器找到它。
这是我目前使用的指令:

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() 方法似乎也不是这种情况下的解决方案。
我在运行应用程序时得到的唯一错误消息是**“无法定位元素”**。

是因为你实际上不能用Selenium WebDriver自动化一些东西,还是我误解了这里的一些重要概念?
非常感谢所有的提示!

oyjwcjzk

oyjwcjzk1#

您可以通过更新cookie“同意”来处理,删除旧的cookie,因为值为“待定”,并添加以下值。

driverManager.driver.manage().deleteCookieNamed ("CONSENT");
driverManager.driver.manage().addCookie(new Cookie("CONSENT","YES+shp.gws-"+LocalDate.now().toString().replace("-","")+"-0-RC2.en+FX+374"));
driverManager.driver.navigate().refresh();
eqoofvh9

eqoofvh92#

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

driver.switchTo().frame(yourFrame);

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

driver.findElement(By.id("id")).click();
ds97pgxw

ds97pgxw3#

我使用了与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

a8jjtwal

a8jjtwal4#

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()
tzdcorbm

tzdcorbm5#

对于任何想找到Ahmed Hammad代码片段Python版本的人:

driver.delete_cookie("CONSENT")
driver.add_cookie({'name': 'CONSENT', 'value': "YES+shp.gws-"+str(date.today()).replace("-","")+"-0-RC2.en+FX+374"})
driver.refresh()

相关问题