0

如果您访问该站点,您会注意到有一个年龄确认窗口,我想通过scrapy绕过它,但我搞砸了,我不得不继续使用 selenium webdriver,现在我正在使用

driver.find_element_by_xpath('xpath').click()

绕过那个年龄确认窗口。老实说,我不想使用 selenium webdriver,因为它很耗时。有没有办法绕过那个窗口?我在 stackoverflow 和 google 中搜索了很多,但没有得到任何可以解决我的问题的答案。如果您有任何通过 Scrapy 解决它的链接或想法,我们将不胜感激。一条有用的评论将被投票!

4

2 回答 2

2

但是年龄验证“窗口”只是一个div在您按下按钮时被隐藏的窗口,而不是一个真正的单独窗口:

<div class="age-check-modal" id="age-check-modal">

您可以在开发者工具中使用浏览器的网络选项卡来查看当您按下按钮时没有上传或发送新信息。因此,当您请求页面时,所有内容都已加载。“弹出窗口”甚至不是弹出窗口,只是单击按钮时display更改为的元素。none

因此,只要加载了所有 html,Scrapy 并不真正关心要显示的内容。如果元素被加载,它们是可访问的。或者您是否看到某些信息不按按钮不可用?

您应该更多地检查 html 代码以查看每个网站的功能,这可能会使您的抓取任务更容易。

编辑:检查原始 html 后,您可以看到以下内容:

<div class="products-list">
    <div class="products-container-block">
      <div class="products-container">
        <div id="hits" class='row'>
        </div>
      </div>
    </div>
  </div>

还可以看到很多 JS 脚本标签。

浏览器元素检查器向我们展示了以下内容: 在此处输入图像描述

::before部分暴露了这是由 JS 操纵的,因为你不能用简单的 CSS 来做到这一点。有关详细信息,请参阅Granitosaurus 的答案

这意味着您需要以某种方式在这些页面上执行任意 JS 代码。所以你要么需要一个 Scrapy 的解决方案,要么只使用 Selenium,就像很多人一样,而且你已经拥有了。

于 2018-09-18T08:24:15.353 回答
2

扩展辣椒的答案。

年龄验证在这里无关紧要。您要查找的数据是通过 AJAX 请求加载的:

在此处输入图像描述

请参阅相关问题:scrapy 可以用于从使用 AJAX 的网站中抓取动态内容吗?了解它们是如何工作的。

您需要弄清楚https://ns5bwtai8m-dsn.algolia.net/1/indexes/*/queries?x-algolia-agent=Algolia%20for%20vanilla%20JavaScript%203.19.1&x-algolia-application-id=NS5BWTAI8M&x-algolia-api-key=e676b05f3844d3adf54a29732af6e43curl 是如何工作的,以及如何在其中进行检索。

于 2018-09-18T09:21:47.563 回答