2014-11-14 96 views
1

Amazon Create Wish List Link其中弹出窗体。表格中包含以下方式提交按钮:Goutte:如何提交没有价值的表单按钮?

<span class="a-button-inner"><input data-action="reg-create-submit" data-reg-create-submit="{&quot;sid&quot;:&quot;192-7611799-5529931&quot;}" class="a-button-input a-declarative" type="submit" aria-labelledby="a-autoid-162-announce"><span class="a-button-text" aria-hidden="true" id="a-autoid-162-announce"> 
    Create a Wish List 
</span></span> 

我使用下面的代码,但它不取形式:

require_once 'goutte.phar'; 
error_reporting(E_ALL); 
use Goutte\Client; 

$crawler = $client->request('GET',$url); 
$status_code = $client->getResponse()->getStatus(); 
$form = $crawler->selectButton('Sign in')->form(); 
$crawler = $client->submit($form, array('email' => '[email protected]', 'password' => 'amazonpasswd')); 
//Create a Wish List 
$crawler = $client->request('GET',"http://www.amazon.com/gp/registry/wishlist/ref=nav_wishlist_create?ie=UTF8&triggerElementID=createList"); 
sleep(5); 
$form = $crawler->selectButton(' 
     Create a Wish List 
     ')->form(); 

print_r($form); //It returns Nothing 

的问题是,可能是selectButton()匹配确切的文本这在我的情况是不在那里。请帮助

+0

$ crawler输出是什么?也尝试$ crawler-> selectButton('Create a Wish List') - > form();也许在换行方面存在一些问题 – 2014-11-26 00:10:02

回答

1

那么让我们来看看这个。 你需要的是到达你的目标“form”元素,对于这个问题,你并不需要严格使用“selectButton”函数,只需要一个XPath表达式就可以获得这个元素。

我认为自发布这个以来,网络结构发生了变化,因为现在“创建愿望清单”按钮显然具有“createNew”值,但为了使用没有任何价值的按钮来抓取网站,您可以这样做:

require_once 'goutte.phar'; 

use Goutte\Client; 

$client = new Client(); 

$crawler = $client->request('GET', 'http://www.amazon.com/gp/registry/wishlist/ref=nav_wishlist_create?ie=UTF8&triggerElementID=createList'); 

$form = $crawler->filterXPath('//h1[@class="a-nowrap"]/form')->form(); 

print_r ($form); 

这样,你可以访问形式没有selectButton功能,并可以形成输入正常方式:

$crawler = $client->submit($form, array('input_name1' => 'value1', 'input_name2' => 'value2')); 

希望这有助于。