我正在寻找一个PHP库,它允许我废弃网页并关注所有Cookie并使用默认值预填充表单,这就是让我烦恼的原因。
我已经厌倦了必须将每个输入元素与xpath匹配,如果存在更好的东西,我会很高兴。我遇到过 phpQuery ,但手册不太清楚,我无法找到如何发出POST请求。
有人能帮助我吗?感谢。
@Jonathan Fingland:
在browserGet()手册提供的示例中,我们有:
require_once('phpQuery/phpQuery.php');
phpQuery::browserGet('http://google.com/', 'success1');
function success1($browser)
{
$browser->WebBrowser('success2')
->find('input[name=q]')->val('search phrase')
->parents('form')
->submit();
}
function success2($browser)
{
echo $browser;
}
我想所有其他字段都被废弃并在GET请求中发回,我想用phpQuery :: browserPost()方法做同样的事情,但我不知道该怎么做。我试图抓取的表单有一个输入令牌,我很乐意,如果phpQuery足够聪明,可以抓取令牌,让我更改其他字段(在这种情况下是用户名和密码),通过POST提交所有内容。
PS :请放心,不将用于发送垃圾邮件。
答案 0 :(得分:2)
请参阅http://code.google.com/p/phpquery/wiki/Ajax,特别是:
phpQuery::post($url, $data, $callback, $type)
和
# data Object, String
,它将数据参数定义为Object或String。使用查询字符串格式可以 的POST请求,例如:
$data = "username=Jon&password=123456";
$url = "http://www.mysite.com/login.php";
phpQuery::post($url, $data, $callback, $type)
因为phpQuery是一个jQuery端口,所以方法签名是相同的(文档直接链接到jquery站点 - http://docs.jquery.com/Ajax/jQuery.post)
修改强>
两件事:
还有一个phpQuery::browserPost
功能可以更好地满足您的需求。
但是,请注意,仅在submit()
or click()
方法上调用success2回调,因此您可以在此之前填写所有表单字段。
e.g。
require_once('phpQuery/phpQuery.php');
phpQuery::browserGet('http://www.mysite.com/login.php', 'success1');
function success1($browser) {
$handle = $browser
->WebBrowser('success2');
$handle
->find('input[name=username]')
->val('Jon');
$handle
->find('input[name=password]')
->val('123456');
->parents('form')
->submit();
}
function success2($browser) {
print $browser;
}
(请注意,这尚未经过测试,但应该工作)
答案 1 :(得分:1)
我过去曾使用SimpleTest's ScriptableBrowser这样的东西。它是SimpleTest测试框架的一部分,但您可以单独使用它。
答案 2 :(得分:0)