scrapy-splash模拟鼠标点击

scrapy-splash模拟鼠标点击

跟网上其他教程一样,配置好scrapysplash

网上的教程大多都没提及这一点,都是用的render.html,但是这个没法执行lua_source的脚本

重写 start_requests

#!/usr/bin/env python 
# -*- coding: utf-8 -*-

import scrapy
from scrapy_splash import SplashRequest
from scrapy_splash import SplashMiddleware

# 模拟点击采用js的方式
script = """
function main(splash, args)
  splash.images_enabled = false
  assert(splash:go(args.url))
  assert(splash:wait(1))
  js = string.format("document.querySelector('#sxxz > li:nth-child(3) > a').click();", args.page)
  splash:runjs(js)
  assert(splash:wait(1))
  return splash:html()
end
"""


class TestSpider(scrapy.Spider):
    name = 'sspider'

    start_urls = ['http://www.gdzwfw.gov.cn/portal/branch-hall?orgCode=006940060#']

    def start_requests(self):
        for url in self.start_urls:
        	# endpoint其他教程都是写的render.html,但是模拟点击需要修改为 '/execute'
            yield SplashRequest(url=url, callback=self.parse_m, endpoint='execute', args={
                'wait': 10, 'images': 0, 'lua_source': script
            })

    def parse_m(self, response):

        # print(response.text)
        # print(response.encoding)
        print(response.xpath('//*[@id="branch-tab1"]').extract()[0])
重点就是 endpoint 这个参数
  • render.html:是 Return the HTML of the javascript-rendered page. (返回javascript呈现页面的HTML。)
  • render.png:是 Return an image (in PNG format) of the javascript-rendered page.(返回javascript呈现页面的图像(PNG格式)。)
  • render.jpeg
  • render.har
  • render.json
  • execute: Execute a custom rendering script and return a result.(执行自定义渲染脚本并返回结果。)

详细可参考 官方文档

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值