PHP Mink 当我更改会话时,foreach 中使用的数据发生更改
PHP Mink when i change session, the data that used in foreach changes
例如,如果我创建一个数组并运行 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 设置为 link;
$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 行,当这个 returns
我收到这个错误
致命错误:未捕获错误:调用成员函数 getAttribute() on null ... line 97
这意味着 $episodes 对象改变了,但为什么,为什么它在第一个 foreach 上没有改变而在第二个中改变
请记住:
在每一页上reload/refresh对象丢失
示例:查找元素 > 刷新页面/导航到类似页面 > 对之前保存在变量中的对象元素执行一些操作 => 来自 selenium
的陈旧元素错误
确保您使用的方法正确
示例:如果找到元素,find()
方法将 return 一个元素对象 或 如果找不到元素,它将 return null
找到了。
第二种是你的情况,你在null
上使用getAttribute
,你应该处理这种错误(在这种情况下是致命错误)。
为了处理它确保找到元素,搜索带有 find
的元素然后检查 returns 是否是 null
,如果是则抛出异常.
例如,如果我创建一个数组并运行 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 设置为 link;
$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 行,当这个 returns 我收到这个错误 致命错误:未捕获错误:调用成员函数 getAttribute() on null ... line 97
这意味着 $episodes 对象改变了,但为什么,为什么它在第一个 foreach 上没有改变而在第二个中改变
请记住:
在每一页上reload/refresh对象丢失
示例:查找元素 > 刷新页面/导航到类似页面 > 对之前保存在变量中的对象元素执行一些操作 => 来自 selenium 的陈旧元素错误
确保您使用的方法正确
示例:如果找到元素,find()
方法将 return 一个元素对象 或 如果找不到元素,它将 returnnull
找到了。
第二种是你的情况,你在null
上使用getAttribute
,你应该处理这种错误(在这种情况下是致命错误)。
为了处理它确保找到元素,搜索带有 find
的元素然后检查 returns 是否是 null
,如果是则抛出异常.