我在Java中做了类似的事情(括号中的数字是行号。它们不在实际代码中。)
(1) driver.get(URL1);
(2) driver.findElement(By.xpath(xpath)).click();
(3) WebDriverWait wait = new WebDriverWait(driver, 15);
(4) wait.until(webDriver -> ((JavascriptExecutor) driver).executeScript("return document.readyState").toString().equals("complete"));
(5) driver.get(URL2);但是5 driver.get(URL2);在执行这段代码时会被忽略,但是如果我逐步(调试)通过这些行,它就能正常工作。
我加了两行像这样
System.out.println(new Date());在3点之前和4点之后,结果很奇怪:
当运行程序“正常”时,这些打印总是同时返回。换句话说,wait在1秒内返回。但是,当调试和跨行时,这些时间戳之间会有4到5秒的长时间延迟,即使我尽可能快地执行。
我怀疑,用于验证页面已加载的3-4的执行速度如此之快,以至于它们会检查上一页(当前)页(URL1)的状态,而不是等待单击导致的页面状态。然后浏览器正忙着加载一个新页面,因此无法处理5.中发送的命令。
如何解决这个问题?
我在SE上阅读了数十个关于如何让Selenium等待页面加载的问题,但我已经使用了这些问题中提出的最常见的解决方案之一(第3-4行)。
发布于 2020-12-02 01:05:59
我在Python中使用Selenium和Web驱动程序已有一段时间了。我刚刚使用Python中的delay()方法休息一下。你能上传完整的代码或其他东西来找出如何帮助你吗?谢谢!
https://stackoverflow.com/questions/65100716
复制相似问题