在 Scrapy 响应中执行内联 JavaScript
Posted
技术标签:
【中文标题】在 Scrapy 响应中执行内联 JavaScript【英文标题】:Execute inline JavaScript in Scrapy response 【发布时间】:2017-11-25 13:18:45 【问题描述】:我正在尝试使用 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 的方法。
【问题讨论】:
您是否尝试过手动转到 JS 重定向将您带到的页面? (也就是说,在print_p
中报废一个url 并产生一个对该页面的请求)
@Pablo JS 构建一个 url,然后重定向到。
docs.scrapy.org/en/latest/topics/dynamic-content.html
【参考方案1】:
大概 selenium 可以帮你通过这个 JS。
如果您还没有检查过,可以使用this 等示例。如果您有幸到达它,那么您可以通过以下方式获取页面网址:
self.driver.current_url
然后刮掉它。
【讨论】:
【参考方案2】:我建议使用Splash 作为渲染服务。就个人而言,我发现它比 Selenium 更可靠。使用scripts,您可以指示它与页面交互。
【讨论】:
以上是关于在 Scrapy 响应中执行内联 JavaScript的主要内容,如果未能解决你的问题,请参考以下文章
在 Outlook 中修改 HTMLBody 以进行内联响应