問題
- Scpapy は JavaScript で生成されたコンテンツにアクセスできないため、例えば、確認のために表示されるアラートウィンドウの「OK」をクリックして先に進む、などができないことがある。
根本的な解決策
- JavaScriptを制御できるSeleniumなどを併用する。
- (参考記事)StackOverflow
- ScrapyとSeleniumを併用するサンプルコードもある
- (参考記事)StackOverflow
簡単な解決策(条件付き)
- 場合によっては もっと簡単に解決できる。
- 以下のform送信ボタンのように、
onclick
処理でJavaScriptのイベントが発動している場合には、scrapyの機能で回避できる。
<input type="submit" onclick="return confirm('確定していいですか?')" name="submit" value="確定" class="button">
- クラスオブジェクト
scrapy.FormRequest.from_response
のパラメータdont_click
をTrue
に指定することで、送信ボタンのクリックを省略して form を送信できる。これを利用すれば、onclick
によって発動するイベントを回避して form が送信される。
def submit_form(self, response):
yield scrapy.FormRequest.from_response(
response,
formcss = 'table#table1 > tr:nth-child(1) > td.value > form',
formdata = dict( decision = '1' ),
dont_click = True
)
〜おしまい〜