PHP Mink当我改变会话时,foreach中使用的数据会发生变化

时间:2016-11-30 17:27:20

标签: php foreach mink

例如,如果我创建一个数组并在其上运行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');
}

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

这意味着$ episodes对象发生了变化,但是为什么,为什么它在第一次foreach上没有变化而在第二次更改

1 个答案:

答案 0 :(得分:1)

请记住:

  1. 在每个页面重新加载/刷新对象丢失
    示例:find element&gt;刷新页面/导航到类似页面&gt;对先前保存在变量=&gt;中的对象元素执行某些操作来自selenium的陈旧元素错误

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

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

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