セレンのファントムを使って動的なウェブサイトのスクレイピングをscrapyjsに変更しようとしています。しかし、問題は、私たちがスプラッシュでクリックイベントを書くと、それは働くために収穫要求が必要になるということです。 yieldリクエストを与えると、最初のページがレンダリングされます。そのため、クリックイベントのソースコードの変更は表示されません。つまり、Webページを再レンダリングする必要はありません。セレンでも可能です。同じ機能をスプラッシュで利用できますか?yieldイベントなしで、スプラッシュ+ scrapyjs + scrapyからclickイベントの後にhtmlソースコードを取得するにはどうすればよいですか?
1
A
答えて
0
lua変数を使用する解決策を得ました。splashメタ引数を使用して変数を渡すことができます。 例:
v = 1
yield scrapy.Request(url, meta={'splash': {'endpoint': 'execute','args': {'lua_source': script,'indx':v}},'v':v } , callback=self.parseVariationDetailPage , dont_filter=True)
私たちは「splash.args.indx」で引数を通過したINDXの値を取得することができます。
以下の関数は、要素のクリックを示します。 ===================以下
script = """
function main(splash)
splash:autoload("https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js")
z = splash.args.indx
assert(splash:go(splash.args.url))
assert(splash:wait(1))
assert(splash:runjs("$('#listChipColor li[z]').click()"))
assert(splash:wait(1))
return splash:html()
end """
=====================旧答え====
私はscrapyjsクリックイベントでページをレンダリングせずに解決策を見ることができません。
以下はサンプルコードとその動作です。私はjsでlua変数を書くための解決策を得ることができません。ここでは単純なロジックを使用してクリック要素を取得します。
scrapyjsクリック
script = """
function main(splash)
splash:autoload("https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js")
assert(splash:go(splash.args.url))
assert(splash:runjs("k = window.location.href"))
assert(splash:runjs("l = k.length"))
assert(splash:wait(1))
assert(splash:runjs("k = k.charAt(l - 1)"))
assert(splash:runjs('document.querySelectorAll("ul.colour-swatches-list > li")[k].click();'))
assert(splash:wait(1))
return splash:html()
end """
要求
url = url+"vl="+'%s'%v
yield scrapy.Request(url, self.parseVariationPage,meta={
'splash': {
'args': {'lua_source': script},'endpoint': 'execute'},
'url':url,'type': response.meta['type'],'category':response.meta['category'],'fit':response. meta['fit'],'v':v
})
関連する問題
- 1. Clickイベント - 子要素からフェーズを取得できないようにする
- 2. IEのsIFR埋め込みタグでclickイベントを取得するにはどうすればよいですか?
- 3. Clickイベントを削除するにはどうすればよいですか?
- 4. イベントIDでイベントをフルカレンダーに取得するにはどうすればよいですか?
- 5. haskellでkeydownイベントとkeyupイベントを取得するにはどうすればよいですか?
- 6. HTMLソースコードからフォントの色を取得するにはどうすればよいですか?
- 7. ディレクティブの追加要素からclickイベントを管理するにはどうすればよいですか?
- 8. iPhoneのウェブアプリケーションでキーボードからイベントを取得するにはどうすればよいですか?
- 9. dblclickイベントがclickイベントのように機能するのはなぜですか?
- 10. onClickイベントのリストビューアイテムから特定のアイテムを取得するにはどうすればよいですか?
- 11. 各ループの後にclickイベントでオブジェクト値を取得する
- 12. GoogleカレンダーAPIから現在のイベントを取得するにはどうすればよいですか?
- 13. selectタグのイベントからオブジェクトを取得するにはどうすればよいですか?
- 14. React-Nativeからonresumeイベントを取得するにはどうすればよいですか?
- 15. DOM上のすべてのイベントにイベントをアタッチするにはどうすればよいでしょうか?
- 16. vis.jsのclickイベントで修飾語を使用するにはどうすればよいですか?
- 17. ブレークポイントまで起動したASP.NETイベントのリストを取得するにはどうすればよいですか?
- 18. スパンのng-clickイベントを無効にするにはどうすればよいですか?
- 19. iframeの動的要素にclickイベントを追加するにはどうすればよいですか?
- 20. fullcalendarで日付オブジェクトにイベントの日付を取得するにはどうすればよいですか?
- 21. JQuery:テキストボックスからイベントを変更するhtmlコントロールはhtmlボタン(ライブイベント)からClickイベントをキャンセルしています
- 22. .insertAfter()の後にソースコードを取得するにはどうすればよいですか?
- 23. ディレクティブでclickイベントを実現するにはどうすればよいですか?
- 24. clickイベントでonchangelocationを使用するにはどうすればよいですか?
- 25. 作成したイベントでCTRを取得するにはどうすればよいですか?
- 26. 角度jsのヘッダーでclickイベントを見つけるにはどうすればよいですか?
- 27. ClickイベントをExt.Imgに追加するにはどうすればよいですか?
- 28. 画像に.click()イベントを追加するにはどうすればよいですか?
- 29. onkeydownイベントの後にテキストボックスで新しいコンテンツを処理するにはどうすればよいですか?
- 30. イベントをトリガーしたdivの入力を取得するにはどうすればよいですか?
あなたは、コードのインデントを修正できますか? –
こんにちはPaul、 私はコードの字下げを修正しました。 –