我正在尝试抓取美国新闻 (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 次加载。什么是可能的建议。
答案 0 :(得分:0)
尝试禁用 selenium 驱动程序的浏览器通知,看起来在某些时候启动了一些并阻止与页面元素的进一步交互。