用 goutte/guzzle 填写表格 |交响乐 4
Fill form with goutte/guzzle | symfony 4
我正在尝试创建一个应用程序来抓取广告(例如公寓租赁),并且只需在外部网站上单击一下即可创建类似的广告。抓取已完成,但我不知道如何处理添加此广告。授权很简单,所以我自己做了,但我不知道如何进入这个表格,因为在我填写这个表格之前,我必须选择一些带有js按钮的选项,如下面的gif所示。
部分授权,登录。
$crawler = $client->request('GET', 'https://www.gumtree.pl/login.html');
dump($crawler->html());
$form = $crawler->filter("form")->form();
$crawler = $client->submit($form, array(
'email' => 'email',
'password' => 'password'
));
我没有将另一部分附加到表格中,因为它无论如何都不起作用。
URL 形式:https://www.gumtree.pl/post.html
外观:https://i.imgur.com/F00oLab.gifv
@edit
我通过浏览器发出请求,然后我尝试通过 symfony 应用程序发出相同的请求,但它仍然无法正常工作。
我的chrome请求:
我对 symfony 的尝试:
$res = $client->get('https://www.gumtree.pl/post.html', [
'auth' => [
'username',
'password'
],
'form_params' => [
'locationId' => '3200025',
'categoryId' => '9073',
'machineId' => 'xxxx',
'DwellingForSaleBy' => 'ownr',
'DwellingType' => 'flat',
'AreaInMeters' => '50',
'NumberRooms' => '3',
'NumberBathrooms' => '10',
'Parking' => 'grage',
'Title' => 'titleeeeeeeee',
'Description' => '<p>test desc</p>',
'priceTypes' => 'FIXED',
'Price' => '459999',
'currencyValues' => 'PLN',
'UserName' => 'username',
'Email' => 'email',
]
]);
但是 Symfony 中的请求 return 代码为 200,而它应该 return 302。
响应转储:
有什么处理方法吗?
您正在抓取的页面充满了 ajax,我认为您应该直接 post 使用 Guzzle 的表单数据
http://docs.guzzlephp.org/en/stable/quickstart.html#post-form-requests
$response = $client->request('POST', 'https://www.gumtree.pl/post.html', [
'form_params' => [
'field_name' => 'abc',
'other_field' => '123',
'nested_field' => [
'nested' => 'hello'
]
]
]);
我正在尝试创建一个应用程序来抓取广告(例如公寓租赁),并且只需在外部网站上单击一下即可创建类似的广告。抓取已完成,但我不知道如何处理添加此广告。授权很简单,所以我自己做了,但我不知道如何进入这个表格,因为在我填写这个表格之前,我必须选择一些带有js按钮的选项,如下面的gif所示。
部分授权,登录。
$crawler = $client->request('GET', 'https://www.gumtree.pl/login.html');
dump($crawler->html());
$form = $crawler->filter("form")->form();
$crawler = $client->submit($form, array(
'email' => 'email',
'password' => 'password'
));
我没有将另一部分附加到表格中,因为它无论如何都不起作用。
URL 形式:https://www.gumtree.pl/post.html
外观:https://i.imgur.com/F00oLab.gifv
@edit
我通过浏览器发出请求,然后我尝试通过 symfony 应用程序发出相同的请求,但它仍然无法正常工作。
我的chrome请求:
我对 symfony 的尝试:
$res = $client->get('https://www.gumtree.pl/post.html', [
'auth' => [
'username',
'password'
],
'form_params' => [
'locationId' => '3200025',
'categoryId' => '9073',
'machineId' => 'xxxx',
'DwellingForSaleBy' => 'ownr',
'DwellingType' => 'flat',
'AreaInMeters' => '50',
'NumberRooms' => '3',
'NumberBathrooms' => '10',
'Parking' => 'grage',
'Title' => 'titleeeeeeeee',
'Description' => '<p>test desc</p>',
'priceTypes' => 'FIXED',
'Price' => '459999',
'currencyValues' => 'PLN',
'UserName' => 'username',
'Email' => 'email',
]
]);
但是 Symfony 中的请求 return 代码为 200,而它应该 return 302。
响应转储:
有什么处理方法吗?
您正在抓取的页面充满了 ajax,我认为您应该直接 post 使用 Guzzle 的表单数据 http://docs.guzzlephp.org/en/stable/quickstart.html#post-form-requests
$response = $client->request('POST', 'https://www.gumtree.pl/post.html', [
'form_params' => [
'field_name' => 'abc',
'other_field' => '123',
'nested_field' => [
'nested' => 'hello'
]
]
]);