Selenium Python:如何在弹出窗口中向下滚动
Posted
技术标签:
【中文标题】Selenium Python:如何在弹出窗口中向下滚动【英文标题】:Selenium Python: How to Scroll Down in a Pop Up window 【发布时间】:2018-02-08 05:01:39 【问题描述】:我正在做一个 Linkedin 网页抓取项目。我正在尝试获取某人感兴趣的公司列表(注意我没有使用 API)。这是一个动态网站,所以我需要在抓取公司名称时向下滚动。我知道如何在主窗口中执行此操作,但由于兴趣是一个弹出窗口this 滚动解决方案不起作用。到目前为止,我的代码是:
from selenium.webdriver.common.keys import Keys
bar = driver.find_element_by_xpath('//ul[@class="entity-list row"]')
bar.send_keys(Keys.END)
既然不行,我也试过了:
bar = driver.find_element_by_xpath('//ul[@class="entity-list row"]')
driver.execute_script('arguments[0].scrollTop = arguments[0].scrollHeight', bar)
问题是我不是在弹出窗口上操作,而是在主窗口上操作,所以它没有达到预期的效果。
enter image description here
【问题讨论】:
找到“向下滚动”箭头css并点击直到找到元素?人类就是这样做的。 请参阅:How do I do X? SO 的期望是,提出问题的用户不仅会进行研究以回答他们自己的问题,还会分享该研究、代码尝试和结果。这表明您已经花时间尝试帮助自己,它使我们免于重复明显的答案,最重要的是它可以帮助您获得更具体和相关的答案!另见:How to Ask 是的,我同意 JeffC 的观点。到目前为止,我添加了我的代码以使其更加完整。 【参考方案1】:您可以尝试在弹出窗口中查找元素(可以聚焦的元素),例如某个锚点:
element_inside_popup = driver.find_element_by_xpath('//div[@class="entity-list-wrapper ember-view"]//a')
然后使用下面的代码向下滚动弹出窗口:
from selenium.webdriver.common.keys import Keys
element_inside_popup.send_keys(Keys.END)
【讨论】:
澄清一下:'//a' 到底是做什么的?我意识到没有它,代码就无法聚焦元素。驱动程序如何知道元素何时结束,从而不再需要向下滚动?//a
表示在弹出窗口中返回任何第一个链接。你想滚动到弹出窗口的最底部还是特定元素?
谢谢!我现在明白'//a'的魔力了。我想获取所有公司的列表,但我意识到只有在我到达元素末尾时才会完全显示。
哦。我知道了。您需要在未收到完整列表时制作 XHR 吗?在 while 循环中尝试 element_inside_popup.send_keys(Keys.END)
。您应该检查公司的数量,如果在某些迭代中没有新公司 - 打破循环
我收到这个错误 selenium.common.exceptions.StaleElementReferenceException: Message: The element reference of stale;元素不再附加到 DOM 或文档已被刷新。有什么办法可以在没有时间的情况下解决它。睡一堆?以上是关于Selenium Python:如何在弹出窗口中向下滚动的主要内容,如果未能解决你的问题,请参考以下文章
如何在 selenium webdriver(python)中禁用 chrome 的“保存密码”弹出窗口
如何使用 Python 和 Selenium 发送 ESC 键以关闭弹出窗口?
如何在 Python / Selenium 中关闭麦克风/相机弹出窗口?
如何使用 python selenium 关闭另一个 chrome 弹出窗口