javascript - Headless Chrome 和 document.location.href 更改

标签 javascript java selenium selenium-chromedriver

我正在尝试自动化页面上的搜索流程,这需要您登录才能访问搜索表单。我将 chromedriver 与 java 结合使用,配置如下:

    ChromeOptions chromeOptions = new ChromeOptions();
    chromeOptions.setHeadless(true);

    chromeOptions.addArguments("--disable-gpu");
    chromeOptions.addArguments("--disable-extensions");
    chromeOptions.setExperimentalOption("useAutomationExtension", false);
    chromeOptions.addArguments("--enable-javascript");
    chromeOptions.addArguments("--no-sandbox","--disable-dev-shm-usage'");

登录后,我可以通过在相关文本框中输入正确的数据来进行搜索。搜索结果页面有一个返回搜索查询页面的按钮,相关按钮及js函数如下:

<input class="button" type="button" name="NAME" value="Search Again" onClick="somefunc('some_hash_params_etc')">
.....
function somefunc(url){document.location.href=url; }

但在 headless 模式下,单击此按钮最终会进入主页,它会再次要求我提供登录凭据。

对于相同的流程,非 headless 测试工作得很好,每次单击按钮都会将我重定向到搜索表单,而不会强制我重新登录。

我尝试将 url 手动设置为发送给 js 函数的值,并尝试在代码中执行 js,但结果与 headless 模式相同,重定向回主页而不是搜索表单。

在初始化网络驱动程序或 headless 模式需要代码中的一些其他逻辑时,我是否应该添加任何其他选项?

最佳答案

对于 headless 浏览器,您必须设置要在事件上触发的窗口大小。因为 headless 浏览器无法识别在没有窗口大小的情况下单击的位置。请告诉我它是否有效。

ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("headless");
chromeOptions.addArguments("window-size=1920,1080");

关于javascript - Headless Chrome 和 document.location.href 更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56107847/

相关文章:

java - 无法使用 Selenium Java 中的 sendKeys() 将文件上传到 "browse"按钮

javascript - 单击按钮时切换 div 标签

javascript - 任何人都可以看到这个 js/jQuery 有什么问题吗?

java - 我可以将 EMF/ECore 用于基于 XML 的模型吗?

python - 在服务器上运行 selenium 浏览器 (Flask/Python/Heroku)

java - xpath 已验证但获取 "no such element: Unable to locate element"

javascript - 从 javascript 调用 WCF 服务

javascript - 将 d3.parset 可视化旋转 90 度(水平而不是垂直)

java - 如何停止模型类中的自动排序字段?

java - spring-hateoas 0.8.0.RELEASE 与 Spring 4 的兼容性