如何刮取需要用户进行现场验证的表单?

时间:2017-03-09 06:56:36

标签: forms vba excel-vba web-scraping excel

我正试图从这个网站上榨取价格: https://www.pensketruckrental.com/quote/start.html

我可以轻松输入表单数据,然后激活“获取引用”按钮并单击它。

我似乎无法做的是使用网络刮刀提交表单数据(我只是在VBA中进行)。当我使用刮刀输入文本时,按钮保持灰色,甚至在按钮上进行.click调用只会在表单上显示错误,告知您不要将字段留空。显然它只能在您使用输入设备时识别数据?

当我手动输入时,其中一个必填字段pickupLocation的代码如下(因此按钮有效并且表单可以提交):

<input 
    type="text" 
    id="pickUpLocation" 
    name="pickUpLocation" 
    class="penskeValidateField penskeGoogleTypeAhead penskeInlineError ng-isolate-scope ng-touched ng-focused ng-dirty ng-valid-penske-err_loc_empty_sa ng-valid ng-valid-parse ng-valid-required"        
    aria-invalid="false" 
    aria-required="false" 
    country="rentalEntryCtrl.formItems.country" 
    penske-validate-field="pickuplocation" 
    required="" 
    autocompelete="off" 
    data-penske-placeholder="rentalEntryCtrl.activePlaceHolders.pickUpLocation" 
    ng-model="rentalEntryCtrl.formItems.pickupLocationSearchCriteria.address" 
    autocomplete="off">

当我使用刮刀自动输入数据时,标签&amp;属性如下:

<input 
    type="text"
    id="pickUpLocation"
    name="pickUpLocation" 
    class="penskeValidateField penskeGoogleTypeAhead penskeInlineError ng-pristine ng-isolate-scope ng-invalid ng-invalid-required placeholder ng-touched"  
    aria-invalid="true" 
    aria-required="true"  
    country="rentalEntryCtrl.formItems.country"
    penske-validate-field="pickuplocation"
    required=""  
    autocomplete="off"  
    data-penske-placeholder="rentalEntryCtrl.activePlaceHolders.pickUpLocation"
    ng-model="rentalEntryCtrl.formItems.pickupLocationSearchCriteria.address" 
    autocompelete="off">

当然,我尝试使用setAttribute()将第一个代码块中的字段复制到第二个代码块中,但即使我可以更改属性,我仍然无法正确提交表单。

我看过其他人处理过与自动更正有些相似的事情;他们的解决方案涉及查看标题和响应,只是使用直接XHR循环自动完成查询,但我正在抓取的定价信息是在几页表单提交之后,所以这不是一个选项。

我认为我被卡住了;关于如何填充表格的任何想法,然后点击按钮/通过我的刮刀提交?

0 个答案:

没有答案