在Scrapy响应中执行内联JavaScript

时间:2017-06-22 10:10:01

标签: javascript python scrapy scrapy-splash

我正在尝试使用Scrapy登录网站,但收到的回复是一个仅包含内联JavaScript的HTML文档。 JS重定向到我想从中抓取数据的页面。但Scrapy不执行JS,因此不会路由到我想要的页面。

我使用以下代码提交所需的登录表单:

    def parse(self, response):
      request_id =   response.css('input[name="request_id"]::attr(value)').extract_first()
      data = {
          'userid_placeholder': self.login_user,
          'foilautofill': '',
          'password': self.login_pass,
          'request_id': request_id,
          'username': self.login_user[1:]
      }
      yield   scrapy.FormRequest(url='https://www1.up.ac.za/oam/server/auth_cred_submit',   formdata=data,
                               callback=self.print_p)

print_p回调函数如下:

def print_p(self, response):
    print(response.text)

我看过scrapy-splash但是我找不到用scrapy-splash在响应中执行JS的方法。

2 个答案:

答案 0 :(得分:3)

我建议使用Splash作为渲染服务。就个人而言,我发现它比Selenium更可靠。使用scripts,您可以指示它与页面进行交互。

答案 1 :(得分:2)

可能selenium可以帮助你传递这个JS。

如果您尚未检查,可以使用this等示例。如果你有幸找到它,那么你可以获得页面网址:

self.driver.current_url

然后刮掉它。