首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Selenium Scroll等待

Selenium Scroll等待
EN

Stack Overflow用户
提问于 2018-09-14 22:39:10
回答 1查看 59关注 0票数 0

我不能理解为什么只返回了部分链接而没有sleep(1);函数。尽管脚本同步工作,并且在$web_driver->executeScript之后已经加载了对象,但是所有链接都已经加载了。

代码语言:javascript
复制
 <?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

EN

回答 1

Stack Overflow用户

发布于 2018-09-15 11:47:12

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

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

有了sleep,你就可以让它实现这种可能性。

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52334213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档