【问题标题】:PHP Mink when i change session, the data that used in foreach changesPHP Mink 当我更改会话时,foreach 中使用的数据发生了变化
【发布时间】:2016-11-30 17:27:19
【问题描述】:

例如,如果我创建一个数组并在其上运行 foreach

<?php

     $array = [1,2,3,4,5,6,7,8,9,10];

      foreach($array as $number){

        echo $number."<br>";

        $array = ['a','b','c','d'];

      }

 ?>

结果:

1
2
3
4
5
6
7
8
9
10

并在回显数字后更改设置数组,数组不会更改 或者即使我在数组上添加新项目也不会改变结果,我的意思是数组不会在 foreach 中改变

 foreach ....
 echo $number."<br>";
 $array[]='x';
 ...

结果:相同

但是当我做这样的事情时
$selected_category 设置为链接;

$session = Helpers::mink($selected_category);

            $page = $session->getPage();

            $as =  $page->find('css', 'div#seasons-list')->findAll('css','a');

            $items = [];
            foreach ($as as $value) {

                $link = $value->getAttribute('href');



                $session->visit($link);

                $page = $session->getPage();

                $episodes = $page->find('css','div#category-posts')->findAll('css','article.grid-box');


                foreach ($episodes as $episode) {

                /* line 97 */       $link = $episode->find('css','a')->getAttribute('href');    

                    /* line 98 */   $session->visit($link);

                        $page = $session->getPage();

                        $items[] = $a= $page->findAll('css','span.embed-responsive-item')[0]->find('css','iframe')->getAttribute('src');
}

首先得到我期望的数据,当我在会话中设置新的 url 在第 98 行以及返回时 我得到这个错误 致命错误:未捕获的错误:在 null 上调用成员函数 getAttribute() ... 第 97 行

这意味着 $episodes 对象已更改,但是为什么,为什么它在第一次 foreach 中没有更改,而在第二次更改了

【问题讨论】:

    标签: php foreach mink


    【解决方案1】:

    请记住:

    1. 在每个页面重新加载/刷新时,对象都会丢失
      示例:查找元素 > 刷新页面/导航到类似页面 > 对之前保存在变量中的对象元素执行一些操作 => 来自 selenium 的过时元素错误

    2. 确保您以正确的方式使用这些方法
      示例:如果找到元素,find() 方法将返回一个元素对象如果未找到该元素,它将返回 null

    第二种是你的情况,你在null上使用getAttribute,你应该处理这种错误(在这种情况下是致命错误)。

    为了处理它确保找到该元素,搜索带有find的元素,然后检查返回的是否是null,如果是则抛出异常。

    【讨论】:

      猜你喜欢
      • 2021-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-28
      • 2022-01-13
      • 1970-01-01
      • 2018-07-07
      • 2013-06-20
      相关资源
      最近更新 更多