【问题标题】:Selenium Scroll Wait硒滚动等待
【发布时间】:2019-02-19 09:34:54
【问题描述】:

我不明白为什么没有sleep(1); 函数只返回部分链接。虽然脚本是同步运行的,并且在$web_driver->executeScript 对象已经加载之后,所有链接都已经加载完毕。

 <?php

  require_once('vendor/autoload.php');
  use Facebook\WebDriver\Remote\RemoteWebDriver;
  use Facebook\WebDriver\WebDriverBy;

  $caps = array("platform"=>"SIERRA", "browserName" => "chrome", "version" => "69");
  $web_driver = RemoteWebDriver::create(
    "http://localhost:4444/wd/hub",
    $caps
  );
  $web_driver->get("https://winestyle.ru/wine/gerard-bertrand/");

  $web_driver->executeScript('window.scrollTo(0,document.body.scrollHeight);');
  sleep(1);

  $element = $web_driver->findElements(WebDriverBy::cssSelector(".bg-text[title='Артикул']"));
  foreach ($element as $e){
    echo $e->getText().'<br>';
  }

  $web_driver->quit();
?>

不眠不休地返回:

Артикул:в101222 Артикул:в99863 Артикул:в99981 Артикул:в101225 Артикул:в101212 Артикул:в101224 Артикул:в101211 Артикул:в92722 Артикул:в92723 Артикул:в101208 Артикул:в101210 Артикул:в99979 Артикул:в101223 Артикул:в101220 Артикул:в101213 Артикул:в101221 Артикул:в101227 Артикул:в101218 Артикул:в101217 Артикул:в101215

睡眠返回:

Артикул:в101222 Артикул:в99863 Артикул:в99981 Артикул:в101225 Артикул:в101212 Артикул:в101224 Артикул:в101211 Артикул:в92722 Артикул:в92723 Артикул:в101208 Артикул:в101210 Артикул:в99979 Артикул:в101223 Артикул:в101220 Артикул:в101213 Артикул:в101221 Артикул:в101227 Артикул:в101218 Артикул:в101217 Артикул:в101215 Артикул:в101226 Артикул:в99980 Артикул:в85254 Артикул:в66382 Артикул:в66386 Артикул:в66387 Артикул:в85253 Артикул:в101214 Артикул:в101219

【问题讨论】:

  • 您还应该解释这里的问题是什么,发生了什么,预期什么以及您已经尝试过什么来解决问题...

标签: php selenium google-chrome webdriver


【解决方案1】:

页面很可能已经实现了延迟加载 - 任何额外信息 - 新元素,只有在用户滚动到页面末尾时才通过 ajax 请求。

这就是你的脚本中发生的事情 - 你已经执行了 js 以滚动到最后。如果您此时在没有睡眠的情况下执行findElements,则页面将没有时间发送ajax请求,等待解析响应并更新DOM。因此,您将仅获得当前存在的元素。

有了sleep,你就给了它这种可能性。

请记住,硬编码值 1s 有时可能有效,有时 - 无效;如果后端需要更多时间来生成响应,或者网络速度很慢 - 可能无法及时接收到新数据。

另一种解决方案是每 X 毫秒轮询 DOM 以获取目标元素的数量,并在该数量增加后继续。但是,这必须适应没有更多结果的情况(不再有 артикулы 俄语?артикули 保加利亚语?:),并打破轮询循环(如果页面上有总结果计数器或类似情况,可以这样做) .

【讨论】:

    猜你喜欢
    • 2011-12-08
    • 2017-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-01
    • 2018-07-08
    • 2018-12-15
    • 1970-01-01
    相关资源
    最近更新 更多