首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Goutte:如何提交通过Javascript填充输入的表单

Goutte:如何提交通过Javascript填充输入的表单
EN

Stack Overflow用户
提问于 2013-08-27 22:33:34
回答 1查看 1.1K关注 0票数 0

我有一个asp.net表单,我想自动提交,以便抓取结果(顺便说一句,我所做的一切都是合法的)。

一些表单下拉输入字段是通过ajax动态填充的。其中一个字段是" region“字段,一旦您选择了一个区域,"City”下拉列表就会被填充。如果我在通过Goutte web-crawler输入地区后仅尝试输入城市,则会引发无效值错误。

这可以通过Goutte完成吗,或者我应该使用其他东西?

目标表单本身是用带有viewstateeventvalidation字段的asp.net编写的。

EN

回答 1

Stack Overflow用户

发布于 2016-12-26 15:36:19

很难甚至不可能与大量使用客户端javascript代码实现的站点进行交互。像GoutteBrowserKit这样的无头浏览器模拟器不知道这样的客户端代码,也不能执行它。您需要使用浏览器控制器,如Selenium或Sahi。

看看Behat的Mink,它有各种用于无头模拟器和功能齐全的浏览器控制器的驱动程序。使用它的selenium2驱动程序,您可以简单地与目标页面进行交互。下面是一个例子:

代码语言:javascript
复制
<?php
// You need to run selenium-*.jar for this to work.

use Behat\Mink\{Mink, Session, Driver\Selenium2Driver};

$mink = new Mink([
    'selenium2' => new Session(
        new Selenium2Driver('firefox', null, 'http://example.com')
    ),
));

$page = $mink->getSession('selenium2')->getPage();

$page->findField('regoin-select-field-name')
     ->selectOption('target-region-value');

$page->wait(5000, 'JS code to check if the select is now populated...')
     ->select('city-select-field-name)
     ->selectOption('target-city-value');

这是未经测试的代码,但您可以理解其中的含义。另请参见how wait() works

此外,您可能希望了解一下facebook/php-webdriver;selenium webdriver的PHP客户端,而不是使用Mink。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18468380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档