0

全部。我在域上获取 cookie 时遇到问题。我尝试获取cookie:

def "go to site"() {
    when:
        go "http://bla-bla-bla.bla"
    then:
        title == "Bla-bla-bla"
        // check cookies
        String cookies = driver.manage().getCookieNamed("name1").getValue()
        println cookies
}

但是 cookie 可以name1在其他域上获取,而不是http://bla-bla-bla.blaname1它是域上的 cookie,http://ululu.ulu并尝试获取所有域(站点)上的所有 cookie,但我没有得到。

请帮我获取所有域(站点)上的所有 cookie。谢谢你。我的英语很烂。

4

3 回答 3

3

Selenium 仅允许您访问当前活动域的 cookie。也就是说,与当前浏览器状态相关的 cookie。

据我所知,没有办法解决这个问题。

于 2013-02-14T13:00:22.617 回答
2

使用 Mozilla firefox插件可以解决此问题,该插件会将所有 cookie 以 XML 格式保存在当前配置文件目录下。这个附加组件将保存来自所有域的 cookie,并且可以使用 webdriver 访问。

有关实现的更多详细信息,请参阅以下博客: http ://automationoverflow.blogspot.in/2013/07/getting-cookies-from-all-domains.html

如果这个答案对您有帮助,请记得投票。

于 2013-08-30T18:42:33.823 回答
2

您不需要使用插件来获取所有 cookie(包括 httpOnly 和安全 cookie)。如果您使用 ChromeDriver,则可以从浏览器配置文件文件夹中获取所有 cookie。

它们存储在 ./profile/Default/Cookies 中的 sqlite 数据库文件中

java/selenium 的示例:

//set Browsers profile folder with ChromeOptions:

String intendedProfileDestinationPath = "C:/temp/somefolder";
ChromeOptions options = new ChromeOptions();
options.addArguments("user-data-dir="+intendedProfileDestinationPath);
WebDriver driver = new ChromeDriver(options);

//...visit one or more pages...    

//use sqlite to access file:

try {
  // db parameters
  String url = "jdbc:sqlite:"+pathToSqliteCookiesFile;
  // create a connection to the database
  conn = DriverManager.getConnection(url);
} catch (SQLException e) {
  System.out.println(e.getMessage());
}
String sql = "SELECT * FROM cookies";
ResultSet result = conn.createStatement().executeQuery(sql);
//... iterate resultset ...

通过 maven 获取 sqlite 驱动程序:

<!-- https://mvnrepository.com/artifact/org.xerial/sqlite-jdbc -->
<dependency>
    <groupId>org.xerial</groupId>
    <artifactId>sqlite-jdbc</artifactId>
    <version>3.28.0</version>
</dependency>

如果您只需要访问过的页面中的 cookie,请确保在重新启动 selenium 浏览器时删除完整的文件夹内容。

于 2019-12-06T16:20:37.393 回答