Selenium Webdriver:如何绕过 Google "accept-cookies" 对话框
Selenium Webdriver: How to bypass Google "accept-cookies" dialog box
我在 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]"));
}
}
不知道为什么浏览器找不到和activate/enable那部分页面
既没有 隐式等待 也没有 显式等待 。 Thread.sleep() 方法似乎不是
在这种情况下的解决方案。
我在 运行 应用程序时收到的唯一错误消息是 “无法定位元素”。
是不是您实际上无法使用 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 从那时起 'I agree' 按钮 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
点击两次'Inspect element'
Locating 'I agree' button's id
您可以通过更新 cookie“CONSENT”来处理它,删除旧的,因为该值是“PENDING”,并添加以下值。
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();
我在 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]"));
}
}
不知道为什么浏览器找不到和activate/enable那部分页面 既没有 隐式等待 也没有 显式等待 。 Thread.sleep() 方法似乎不是 在这种情况下的解决方案。
我在 运行 应用程序时收到的唯一错误消息是 “无法定位元素”。
是不是您实际上无法使用 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 从那时起 'I agree' 按钮 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
点击两次'Inspect element'
Locating 'I agree' button's id
您可以通过更新 cookie“CONSENT”来处理它,删除旧的,因为该值是“PENDING”,并添加以下值。
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();