栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何更快地制作selenium脚本?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何更快地制作selenium脚本?

因此,您的代码在这里几乎没有缺陷。

  1. 当scrapy Selectors更快,更高效时,您可以使用硒来解析页面内容。
  2. 您为每个响应启动一个webdriver。

这可以通过使用scrapy’s很好地解决

Downloadermiddlewares
。您想创建一个自定义的下载器中间件,该中间件将使用硒而不是scrapy下载器下载请求。

例如我用这个:

# middlewares.pyclass SeleniumDownloader(object):    def create_driver(self):        """only start the driver if middleware is ever called"""        if not getattr(self, 'driver', None): self.driver = webdriver.Chrome()    def process_request(self, request, spider):        # this is called for every request, but we don't want to render        # every request in selenium, so use meta key for those we do want.        if not request.meta.get('selenium', False): return request        self.create_driver()        self.driver.get(request.url)        return HtmlResponse(request.url, body=self.driver.page_source, encoding='utf-8')

激活您的中间件:

# settings.pyDOWNLOADER_MIDDLEWARES = {    'myproject.middleware.SeleniumDownloader': 13,}

然后,在您的Spider中,您可以通过添加meta参数来指定要通过selenium驱动程序下载的URL。

# you can start with seleniumdef start_requests(self):    for url in self.start_urls:        yield scrapy.Request(url, meta={'selenium': True})def parse(self, response):    # this response is rendered by selenium!    # also can use no selenium for another response if you wish    url = response.xpath("//a/@href")    yield scrapy.Request(url)

这种方法的优点是您的驱动程序仅启动一次,仅用于下载页面源代码,其余的则留给适当的异步刮刮工具使用。
缺点是您无法单击周围的按钮,因为您没有被驱动程序暴露。大多数时候,您可以通过网络检查器对按钮的功能进行逆向工程,而您根本不需要对驱动程序本身进行任何单击。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/470983.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号