Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法将cookie从Selenium webdriver传递到clojure中的httpclient cookie存储区_Java_Selenium_Cookies_Clojure - Fatal编程技术网

Java 无法将cookie从Selenium webdriver传递到clojure中的httpclient cookie存储区

Java 无法将cookie从Selenium webdriver传递到clojure中的httpclient cookie存储区,java,selenium,cookies,clojure,Java,Selenium,Cookies,Clojure,我想使用Selenium登录到一个站点,然后将cookie导出到httpclient (defn convert-selemium-cookie-to-httpclient-cookie [x] (let [sf (SimpleDateFormat. "yyyy-MM-dd") fake-date (.parse sf "2018-08-06")] (doto (BasicClientCookie. (:name x) (:value x))

我想使用Selenium登录到一个站点,然后将cookie导出到httpclient

(defn convert-selemium-cookie-to-httpclient-cookie [x]
  (let [sf (SimpleDateFormat. "yyyy-MM-dd")
        fake-date (.parse sf "2018-08-06")]
    (doto
        (BasicClientCookie. (:name x) (:value x))
        (.setDomain (:domain x))
        (.setPath (:path x))
        (.setExpiryDate (if (:expiry x) (:expiry x) fake-date))
        (.setSecure (:secure? x)))))

(defn add-selenium-cookies-to-httpclient-cookie-store [x]
  (let [cs (clj-http.cookies/cookie-store)
        http-cookies (map convert-selemium-cookie-to-httpclient-cookie x)]
    (mapv (fn[x] (.addCookie cs x)) http-cookies)
    cs))

(def driver (new-driver {:browser :firefox}))
(def a (login driver ...)) ;; login
(def c (cookies driver)) ;; get the cookies
(def cs (add-selenium-cookies-to-httpclient-cookie-store c))
(println (client/get "some web site"
                     {:cookie-store cs
                      :client-params {"http.useragent"
                                      "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.20 (KHTML, like Gecko) Chrome/11.0.672.2 Safari/534.20"}}))

虽然我在webdriver中成功登录,并且该站点跨会话保存cookie,但将cookie复制到cookies存储后,
client/get
仍然返回未登录的页面。我曾在python中尝试过类似的事情,它可以成功地将cookies从webdriver传输到请求(http client for python)。不确定java/clojure的问题出在哪里。

是否尝试了selenium请求?
您尚未指定依赖项的版本。我已使用以下内容测试了您的代码:

[org.clojure/clojure "1.8.0"]
[clj-webdriver "0.7.2"]
[org.seleniumhq.selenium/selenium-server "3.0.0-beta4"]

Firefox 48.0.2
Mac OS Sierra 10.12
我的答案末尾的REPL会话表明它是有效的(我使用了
https://httpbin.org/
来测试它)

要进行故障排除,我将检查以下内容:

[org.clojure/clojure "1.8.0"]
[clj-webdriver "0.7.2"]
[org.seleniumhq.selenium/selenium-server "3.0.0-beta4"]

Firefox 48.0.2
Mac OS Sierra 10.12
  • 打印从驱动程序返回的Cookie,或在浏览器控制台中检查登录页面的响应是否包含设置正确Cookie的标题
  • 打印http客户端cookiestore包含的内容
  • 为http客户端启用调试日志记录(或在服务器中启用调试日志记录),以查看向受登录保护的页面发送的实际请求,以及请求是否包含登录页面设置的cookie
在REPL会话中,您可以看到从selenium返回的cookie包含第一个请求设置的cookie。它们也存在于http客户端cookie存储中,并由
https://httpbin.org/cookies
URL,指示它们已随http客户端的请求一起发送

(需要“[clj-webdriver.taxi:as-taxi]”)
(需要“[clj-http.client:作为客户端])
(需要“[clj-http.cookies:作为cookies])
(需要“[clojure.pprint:请参阅[pprint]”)
(导入java.text.simpleDataFormat)
(导入org.apache.http.impl.cookie.BasicClientCookie)
(defn将selemium cookie转换为httpclient cookie[x]
(让[sf(简化格式“yyyy-MM-dd”)
假日期(.parse sf“2018-08-06”)]
(多托
(基本客户端帐户。(:名称x)(:值x))
(.setDomain(:域x))
(.setPath(:路径x))
(.setExpiryDate(如果(:到期日x)(:到期日x)假日期))
(.setSecure(:secure?x()())))
(defn将selenium cookie添加到httpclient cookie存储[x]
(让[cs(饼干/饼干店)
http cookie(将selemium cookie映射为httpclient cookie x)]
(mapv(fn[x](.addCookie cs x))http cookies)cs)
(def cookie名称(str“c1”(系统/当前时间毫秒)))
(def cookie值(str“v1”(系统/当前时间毫秒)))
(pprint cookie名称)
;; “c11475935066134”
(pprint cookie值)
;; “v11475935066814”
(def驱动程序(出租车/新驱动程序{:浏览器:firefox}))
(出租车/出租车司机(格式)https://httpbin.org/cookies/set?%s=%s“cookie名称(cookie值))
(出租车司机)
(pprint硒饼干)
;; #{{:饼干
#object[org.openqa.selenium.Cookie 0x4dc96ce8“c11475935066134=v11475935066814;path=/;domain=httpbin.org”,
;;:名称“c11475935066134”,
;:值“v11475935066814”,
;:路径“/,
到期日为零,
;;:域名“httpbin.org”,
;;:安全?错误}
(def http客户端cookie存储(将selenium cookies添加到httpclient cookie存储selenium cookies))
(pprint http客户端cookie存储)
;; #对象[org.apache.http.impl.client.BasicCookieStore 0x6dfa86f5”[[version:0][name:c11475935066134][value:v11475935066814][domain:httpbin.org][path://][expiration:Mon Aug 06 00:00:00 CEST 2018]]
(def)http客户端响应
(客户/获取)
"https://httpbin.org/cookies"
{:cookie存储http客户端cookie存储})
(pprint http客户端响应)
;; {:现状200,
标题
;;{“服务器”“nginx”,
“日期”2016年10月8日星期六13:58:01 GMT,
;;“内容类型”“应用程序/json”,
;;“内容长度”为“64”,
;;“连接”“关闭”,
;;“访问控制允许原点”“*”,
;;“访问控制允许凭据”“true”},
身体
;;“{\n\“cookies\”:{\n\“c11475935066134\”:“v11475935066814\”\n}\n}\n“,
请求时间1001,
;:跟踪重定向https://httpbin.org/cookies"],
;;:原始内容编码nil}

我正在使用clojure而不是python。对于python版本,我已经做到了。