【问题标题】:Fill form with goutte/guzzle | symfony 4用 goutte/guzzle 填写表格 | symfony 4
【发布时间】:2018-07-19 04:41:59
【问题描述】:

我正在尝试创建一个应用程序来抓取广告(例如公寓出租),并且只需单击外部网站即可创建类似的广告。抓取已完成,但我不知道如何处理添加此广告。授权很简单,所以我自己做的,但我不知道如何获得这个表格,因为在我填写这个表格之前,我必须选择一些带有js按钮的选项,如下图所示。

部分授权,登录。

$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'
        ));

我没有用表单附加另一部分,因为它无论如何都不起作用。

网址格式: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 中的请求返回代码 200,而它应该返回 302。

响应转储:

有什么办法解决吗?

【问题讨论】:

  • 我认为它不应该返回 302,因为它是一个 ajax 请求。我认为重定向是由javascript处理的

标签: php symfony web-scraping guzzle goutte


【解决方案1】:

你正在报废的页面都是ajax,我认为你应该直接使用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'
        ]
    ]
]);

【讨论】:

  • 我尝试了你的建议,但它似乎对我不起作用,编辑了主帖子,如果可能,请检查它,谢谢 :)
猜你喜欢
  • 1970-01-01
  • 2016-10-04
  • 2014-03-25
  • 1970-01-01
  • 2016-10-27
  • 1970-01-01
  • 2013-08-11
  • 1970-01-01
  • 2014-02-17
相关资源
最近更新 更多