【发布时间】:2011-10-22 13:39:15
【问题描述】:
我在此 URL http://www.magicbricks.com/bricks/agentSearch.html 上使用 simpleTest WebBrowser 进行数据抓取。但是,尽管一切似乎都正确,但我总是收到错误 City Field is required。我想问题可能在于当 State 的值发生变化时 city 字段中的值会动态变化。有什么解决办法吗?这是我的代码。
<?php
require_once('simpletest/browser.php');
$browser = &new SimpleBrowser();
$browser->addHeader('User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0.2) Gecko/20100101 Firefox/6.0.2');
$browser->get('http://www.magicbricks.com/bricks/agentSearch.html');
$browser->setField('source','agentSearch');
$browser->setField('_transactionType','1');
$browser->setField('_propertyType','1');
$browser->setField('resultPerPage','50');
$browser->setField('agentSearchType','B');
$browser->setField('state','520');
$browser->setField('city','4320');
$browser->setField('keyword','');
$browser->setField('country','50');
print $browser->submitFormById('searchFormBean');
print $browser->getResponseCode()
?>
【问题讨论】:
-
你不想用
POST代替GET吗?请参阅此处的演示:simpletest.org/en/form_testing_documentation.html#raw(编辑:好的,我看到您正在尝试提交表单,但它正在为两个选择动态绘制列表。) -
看到有两个函数被调用,事件 onChange 在该城市的选择元素上:
-
@jared:是的,但我不能重复。 When state variable is selected some strange content gets posted and I cant replicate the same. @Pabluez:很难找到这些函数的定义位置。
-
您是否使用 Firebug 或 Chrome 控制台网络选项卡来查看填充这些下拉列表的请求?我的猜测是您需要将这些列表拉入(第一个州,然后是城市)并在 PHP 中对其进行迭代。
-
此时更好的问题(也许是另一个问题)是“simpleTest 处理源页面的动态内容加载吗?”您不是在处理标准表单提交,因为州和城市选择选项需要动态的异步请求来填充。
标签: php simpletest