带有加载按钮的网页抓取动态网页

时间:2021-04-10 17:28:01

标签: javascript selenium button web-scraping scroll

我正在尝试抓取美国新闻 (https://www.usnews.com/best-colleges/rankings/national-universities?_mode=table')。有一个“加载更多”按钮可以动态加载表格。有388个学校,每次加载10个。考虑到页面初始加载时显示的原始 10 次,我应该点击加载更多按钮 37 次。

webapge 的工作方式是,当用户滚动以查看“加载更多”按钮时,下一组的加载会自动触发(但有时不会,您必须物理点击按钮.

所以,我设置了一个 selenium webdriver 并且我有一个 scrollMore() 函数,它 1) 在 HTML 中找到按钮,将按钮滚动到视图中,然后单击它。我也在清除两者之间的 cookie,否则我会被他们的服务器阻止。我最初使用 selenium 函数来单独执行此操作,但我认为一定存在一些竞争条件,因为在一些迭代后尝试找到按钮时会超时。

所以,我正在尝试同步进行,这就是我目前拥有的:

self.driver.execute_script("var button = document.evaluate(\"//button[normalize-space()='Load More']\", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;"\
                           "button.scrollIntoView();"\
                           "button.disabled = false; button.click();")

问题是它恰好适用于 19 次加载,但无论我尝试什么,我都无法获得第 20 次加载。什么是可能的建议。

1 个答案:

答案 0 :(得分:0)

尝试禁用 selenium 驱动程序的浏览器通知,看起来在某些时候启动了一些并阻止与页面元素的进一步交互。