我有一个asp.net表单,我想自动提交,以便抓取结果(顺便说一句,我所做的一切都是合法的)。
一些表单下拉输入字段是通过ajax动态填充的。其中一个字段是" region“字段,一旦您选择了一个区域,"City”下拉列表就会被填充。如果我在通过Goutte web-crawler输入地区后仅尝试输入城市,则会引发无效值错误。
这可以通过Goutte完成吗,或者我应该使用其他东西?
目标表单本身是用带有viewstate和eventvalidation字段的asp.net编写的。
发布于 2016-12-26 15:36:19
很难甚至不可能与大量使用客户端javascript代码实现的站点进行交互。像Goutte和BrowserKit这样的无头浏览器模拟器不知道这样的客户端代码,也不能执行它。您需要使用浏览器控制器,如Selenium或Sahi。
看看Behat的Mink,它有各种用于无头模拟器和功能齐全的浏览器控制器的驱动程序。使用它的selenium2驱动程序,您可以简单地与目标页面进行交互。下面是一个例子:
<?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。
https://stackoverflow.com/questions/18468380
复制相似问题