例如,如果我创建一个数组并在其上运行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上没有变化而在第二次更改
答案 0 :(得分:1)
请记住:
在每个页面重新加载/刷新对象丢失
示例:find element&gt;刷新页面/导航到类似页面&gt;对先前保存在变量=&gt;中的对象元素执行某些操作来自selenium的陈旧元素错误
确保以正确的方式使用这些方法
示例:find()
方法将返回元素对象,如果找到元素 OR ,如果找不到元素,它将返回null
。
第二个是你的情况,你在getAttribute
上使用null
,你应该处理这种错误(在这种情况下是致命的错误)。
为了处理它,确保找到元素,用find
搜索元素,然后检查返回的是null
,如果是,则抛出异常。