Ghostdriver 1.2.1 + PhantomJS 2.0 + 最新的 Selenium 在 Java 中找不到变量错误
Posted
技术标签:
【中文标题】Ghostdriver 1.2.1 + PhantomJS 2.0 + 最新的 Selenium 在 Java 中找不到变量错误【英文标题】:Ghostdriver 1.2.1 + PhantomJS 2.0 + latest Selenium Can't find variable error in Java 【发布时间】:2016-04-21 19:15:45 【问题描述】:[ERROR - 2016-01-16T02:22:00.898Z] 会话 [e6651a90-bbf7-11e5-9061-cff578894101] - page.onError - msg:ReferenceError:找不到变量:数据
:262 错误 [错误 - 2016-01-16T02:22:00.898Z] 会话 [e6651a90-bbf7-11e5-9061-cff578894101] - page.onError - 堆栈: (匿名函数) (http://www.example.com/ns/common/jquery/jquery.cartActions.js?cd=0:205) o (http://www.example.com/images/common/jquery/jquery.latest.js:2) 火与(http://www.example.com/images/common/jquery/jquery.latest.js:2) w (http://www.example.com/images/common/jquery/jquery.latest.js:4) d (http://www.example.com/images/common/jquery/jquery.latest.js:4) 开放网址 (:0) 打开 (:280) (匿名函数) (:/ghostdriver/request_handlers/session_request_handler.js:495) _execFuncAndWaitForLoadDecorator (:/ghostdriver/session.js:212) _postUrlCommand (:/ghostdriver/request_handlers/session_request_handler.js:494) _handle (:/ghostdriver/request_handlers/session_request_handler.js:91) _reroute (:/ghostdriver/request_handlers/request_handler.js:61) _handle (:/ghostdriver/request_handlers/router_request_handler.js:78) :262 错误
^域被故意删掉。
根据Can't find variable - PhantomJS,此错误与未正确执行 javascript 有关。我不明白这在我的 Java 程序上下文中意味着什么。
我的 Selenium 程序只有一种 Javascript 调用,它的工作方式如下:
((JavascriptExecutor) driver).executeScript("arguments[0].click();", buttonToClick);
上面的行似乎不是问题,因为从我的测试中我可以看到像上面的多行在出现上述错误之前执行没有错误。
此外,Session.NegotiatedCapabilities 具有“acceptSslCerts”:false,我无法使用此代码块作为 PhantomJS 驱动程序初始化程序来解决:
String[] cli_args = new String[]"--debug=false", "--web-security=false", "--ssl-protocol=any", "--ignore-ssl-errors=true";
DesiredCapabilities caps = DesiredCapabilities.phantomjs();
caps.setCapability(PhantomJSDriverService.PHANTOMJS_CLI_ARGS, cli_args);
caps.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY, "/Users/richard/Downloads/phantomjs-2.0.0-macosx/bin/phantomjs");
driver = new PhantomJSDriver(caps);
我可以看到参数正在控制台上传递...
Jan 16, 2016 6:23:40 AM org.openqa.selenium.phantomjs.PhantomJSDriverService <init>
INFO: arguments: [--web-security=no, --ignore-ssl-errors=yes, --webdriver=33238, --webdriver-logfile=/Users/richard/YeezyBot/phantomjsdriver.log]
最后,一切都适用于 Firefox WebDriver。
【问题讨论】:
对于任何阅读本文的人,我必须得出结论,PhantomJS 感觉像是一个不成熟的软件。为了让基本的东西正常工作,必须弄清楚这么多黑客。不推荐。 那么无头浏览器的替代方案是什么? 您可以在无头模式下使用 chrome。 ***.com/questions/53657215/… 【参考方案1】:将 JavaScript 注入网页或任何其他元素是不好的做法。您可以使用 Selenium 代码找到 Element 并单击它,而无需使用任何注入。
等待页面加载
通过 CSS 或 Xpath 表达式查找按钮
等待元素可点击
仅使用 Selenium 代码单击它
WebDriverWait 等待 = new WebDriverWait(驱动程序, timeToWait);
this.by = by;
试试
webElement lastFoundElement = wait.until(ExpectedConditions.visibilityOfElementLocated(by));
wait.until(ExpectedConditions.elementToBeClickable(lastFoundElement));
new Actions(browser).moveToElement(element, offsetX, offsetY).click().build().perform();
捕捉(例外前)
【讨论】:
以上是关于Ghostdriver 1.2.1 + PhantomJS 2.0 + 最新的 Selenium 在 Java 中找不到变量错误的主要内容,如果未能解决你的问题,请参考以下文章
爬虫之PermissionError: [Errno 13] Permission denied: 'ghostdriver.log'问题解决