gpt4 book ai didi

webkit - 如何生成对scrapy+webkit的javascript请求?

转载 作者:行者123 更新时间:2023-12-02 19:33:33 28 4
gpt4 key购买 nike

我需要废弃一个由Javascript生成的网页。href是这样的:

<a href="javascript:__doPostBack('pager','4')" style="margin-right:5px;">[4]</a>

我用 scrapy 编写了一个 WebkitDownloader 并且它可以工作。

class WebkitDownloader( object ):
def process_request( self, request, spider ):
if spider.name in settings.WEBKIT_DOWNLOADER:
if( type(request) is not FormRequest ):
print '===================Processing non-FormRequest=================='
webview = webkit.WebView()
webview.connect( 'load-finished', lambda v,f: gtk.main_quit() )
webview.load_uri( request.url )
gtk.main()
js = jswebkit.JSContext( webview.get_main_frame().get_global_context() )
renderedBody = str( js.EvaluateScript( 'document.documentElement.innerHTML' ) )
#print renderedBody
return HtmlResponse( request.url, body=renderedBody )

我仍然不知道如何在我的蜘蛛解析模块中向 WebkitDownloader 发送请求。我可以使用这样的东西: request.append('javascript:__doPostBack('pager','4')') 并将 Javascript 请求发送到 WebkitDownloader 吗?或者如何构建 Javascript 请求?

最佳答案

您可以在中间件中使用此代码

from scrapy.http import HtmlResponse

import gtk
import webkit
import jswebkit

class WebkitDownloader( object ):

def stop_gtk(self, v, f):
gtk.main_quit()

def _get_webview(self):
webview = webkit.WebView()
props = webview.get_settings()
props.set_property('enable-java-applet', False)
props.set_property('enable-plugins', False)
props.set_property('enable-page-cache', False)
return webview

def process_request( self, request, spider ):
if 'renderjs' in request.meta:
webview = self._get_webview()
webview.connect('load-finished', self.stop_gtk)
webview.load_uri(request.url)
gtk.main()
ctx = jswebkit.JSContext(webview.get_main_frame().get_global_context())
url = ctx.EvaluateScript('window.location.href')
html = ctx.EvaluateScript('document.documentElement.innerHTML')
return HtmlResponse(url, encoding='utf-8', body=html.encode('utf-8'))

关于webkit - 如何生成对scrapy+webkit的javascript请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16432104/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com