【问题标题】:Selenium Python: How to Scroll Down in a Pop Up windowSelenium Python:如何在弹出窗口中向下滚动
【发布时间】: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 的观点。到目前为止,我添加了我的代码以使其更加完整。

标签: javascript python selenium web-scraping linkedin


【解决方案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 或文档已被刷新。有什么办法可以在没有时间的情况下解决它。睡一堆?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多