Java 是否可以修改selenium 3.7.1以允许在加载页面之前设置cookie
不久前,我编辑了java selenium standalone的2.5.3版,以删除在从cookie所属的域加载页面之前尝试设置cookie时出现的错误消息“无法设置cookie”。该修改涉及编辑一些javascript以删除错误检查 是否可以在selenium 3.7.1中对java构建进行类似的修改,以改变java chrome 目前,我正在使用以下maven依赖项。我还没有修改开源软件Java 是否可以修改selenium 3.7.1以允许在加载页面之前设置cookie,java,selenium,cookies,Java,Selenium,Cookies,不久前,我编辑了java selenium standalone的2.5.3版,以删除在从cookie所属的域加载页面之前尝试设置cookie时出现的错误消息“无法设置cookie”。该修改涉及编辑一些javascript以删除错误检查 是否可以在selenium 3.7.1中对java构建进行类似的修改,以改变java chrome 目前,我正在使用以下maven依赖项。我还没有修改开源软件 <dependency> <groupId>org.s
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-chrome-driver</artifactId>
<version>3.7.1</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-remote-driver</artifactId>
<version>3.7.1</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.7.1</version>
</dependency>
./javascript/node/selenium webdriver/lib/error.js:474包含以下代码
/**
* A request to set a cookie’s value could not be satisfied.
*/
class UnableToSetCookieError extends WebDriverError {
/** @param {string=} opt_error the error message, if any. */
constructor(opt_error) {
super(opt_error);
}
} has the
./java/client/src/org/openqa/selenium/remote/ErrorCodes.java:245有以下代码
public static final int UNABLE_TO_SET_COOKIE = 25;
.add(new KnownError(UNABLE_TO_SET_COOKIE, "unable to set cookie", 500, UnableToSetCookieException.class, true, true))
显然无法设置Cookie异常可能很重要。因此,我取得了以下成绩
grep -rnw './' -e "UnableToSetCookieException"
./java/client/src/org/openqa/selenium/remote/ErrorCodes.java:45:import org.openqa.selenium.UnableToSetCookieException;
./java/client/src/org/openqa/selenium/remote/ErrorCodes.java:245: .add(new KnownError(UNABLE_TO_SET_COOKIE, "unable to set cookie", 500, UnableToSetCookieException.class, true, true))
./java/client/src/org/openqa/selenium/BUCK:128: 'UnableToSetCookieException.java',
./java/client/src/org/openqa/selenium/UnableToSetCookieException.java:25:public class UnableToSetCookieException extends WebDriverException {
./java/client/src/org/openqa/selenium/UnableToSetCookieException.java:26: public UnableToSetCookieException() {
./java/client/src/org/openqa/selenium/UnableToSetCookieException.java:29: public UnableToSetCookieException(String message) {
./java/client/src/org/openqa/selenium/UnableToSetCookieException.java:33: public UnableToSetCookieException(Throwable cause) {
./java/client/src/org/openqa/selenium/UnableToSetCookieException.java:37: public UnableToSetCookieException(String message, Throwable cause) {
./java/client/test/org/openqa/selenium/remote/ErrorHandlerTest.java:54:import org.openqa.selenium.UnableToSetCookieException;
./java/client/test/org/openqa/selenium/remote/ErrorHandlerTest.java:460: exceptions.put(ErrorCodes.UNABLE_TO_SET_COOKIE, UnableToSetCookieException.class);
显然,下面的类抛出了cookie异常
/**
* Thrown when a driver fails to set a cookie.
*
* @see org.openqa.selenium.WebDriver.Options#addCookie(Cookie)
*/
public class UnableToSetCookieException extends WebDriverException {
public UnableToSetCookieException() {
}
public UnableToSetCookieException(String message) {
super(message);
}
然而,我还不知道这与产生错误的addCookie方法有何关系
driver.manage().addCookie(aCookie);
随着我了解更多信息,我将继续更新我的研究…方法
addCookie
处理cookie就像浏览器一样,如果您不先调用get
,则需要一个缺少的域。网页无法在其他域上设置cookie。如果是这样的话,任何页面都可以从谷歌或Facebook会话中重写cookies。单独使用Selenium可以在浏览器级别设置Cookie,但它需要一个特定的实现,这取决于驱动程序/浏览器。@FlorentB。我理解你的评论。看起来,在加载过程中很早就打开的站点就可以使用浏览器作为人工cookie。如果我使用购物车加载购物网站,则购物车中的项目在加载页面之前就已存在。如果我与selenium进行相同的交互,那么不再次加载页面是不可能的。这是非常明显的区别。我希望selenium的工作方式与浏览器在第一次加载或页面加载cookie时的工作方式相同。selenium java chrome驱动程序是否可以实现这一点?如果您的目标是重用会话,则使用带有参数--user data dir=“path to Default directory”
的静态配置文件。否则,请使用廉价资源设置域,如https://www.google.com/favicon.ico
或调用devtool API在浏览器级别设置cookie:将产品添加到购物车,保存浏览器配置文件,并在每次打开浏览器时使用该配置文件。“应该能行。”弗洛伦特说。我用firefox和早期版本的selenium测试了--user data dir方法,可能是3.5.1,我不确定,但是我没有发现它能有效地处理cookies。把favicon.ico称为廉价资源是个好建议。如果可能的话,希望Selenium可以创建一些逻辑来设置域,然后用cookies加载域,就像浏览器已经在工作一样。也许这是不可行的?方法addCookie
处理cookie就像处理浏览器一样,如果不先调用get
,则需要一个缺少的域。网页无法在其他域上设置cookie。如果是这样的话,任何页面都可以从谷歌或Facebook会话中重写cookies。单独使用Selenium可以在浏览器级别设置Cookie,但它需要一个特定的实现,这取决于驱动程序/浏览器。@FlorentB。我理解你的评论。看起来,在加载过程中很早就打开的站点就可以使用浏览器作为人工cookie。如果我使用购物车加载购物网站,则购物车中的项目在加载页面之前就已存在。如果我与selenium进行相同的交互,那么不再次加载页面是不可能的。这是非常明显的区别。我希望selenium的工作方式与浏览器在第一次加载或页面加载cookie时的工作方式相同。selenium java chrome驱动程序是否可以实现这一点?如果您的目标是重用会话,则使用带有参数--user data dir=“path to Default directory”
的静态配置文件。否则,请使用廉价资源设置域,如https://www.google.com/favicon.ico
或调用devtool API在浏览器级别设置cookie:将产品添加到购物车,保存浏览器配置文件,并在每次打开浏览器时使用该配置文件。“应该能行。”弗洛伦特说。我用firefox和早期版本的selenium测试了--user data dir方法,可能是3.5.1,我不确定,但是我没有发现它能有效地处理cookies。把favicon.ico称为廉价资源是个好建议。如果可能的话,希望Selenium可以创建一些逻辑来设置域,然后用cookies加载域,就像浏览器已经在工作一样。也许这不可行?
driver.manage().addCookie(aCookie);