【问题标题】:Interacting with popup scrollbar与弹出滚动条交互
【发布时间】:2022-01-24 09:46:54
【问题描述】:

我正在尝试在此处向下滚动弹出窗口:(请注意,您需要单击页面上的任何食物项目才能显示有问题的弹出窗口)

https://www.just-eat.co.uk/restaurants-mcdonalds-claphamjunction/menu

我尝试使用以下代码向下滚动此弹出窗口,首先使用其 css 选择器识别弹出滚动条,然后向其发送向下箭头键。

popup = browser.find_element_by_css_selector("body > div:nth-child(3) > div:nth-child(4) > div.c-megaModal.MegaModal_c-megaModal_3w2Fg.u-overlay.c-itemSelector.c-modal--popUp--belowMid.is-fullHeight")
popup.send_keys(Keys.ARROW_DOWN)

但是,我收到以下错误消息:

selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable

我设法使用 FireFox 很好地向下滚动,但无法在 Chrome 上运行(由于其他原因需要使用 Chrome)。

任何帮助将不胜感激

编辑:

我尝试了以下操作,但它没有滚动(没有出现错误消息,它只是通过代码而不滚动)。

        wait = WebDriverWait(browser, 20)
        for _ in range(8):
            wait.until(EC.visibility_of_element_located(
                (By.XPATH, "//div[contains(@class,'MegaModal_c-megaModal-document--scrollable')]")))
            browser.execute_script(
                "document.querySelector('div[class*=MegaModal_c-megaModal-document--scrollable]').scrollDown += 250")

【问题讨论】:

  • 不幸的是,我们面临着一个What happened? This request was blocked by the security rules Your IP: w.x.y.z Proxy IP: a.b.c.d (ID 105544-900) Incident ID: 1122000560206975379-103202147123456789
  • 啊,是的,您可能需要 VPN 才能访问英国以外的地方

标签: python selenium selenium-chromedriver


【解决方案1】:
  1. 您使用了错误的定位器
  2. 用户不能直接交互此元素。这就是为什么您不能使用 Selenium 向它发送密钥的原因。
    您可以使用 JavaScript 执行器滚动它,而不是向该元素发送箭头键。
    请试试这个
wait.until(EC.visibility_of_element_located((By.XPATH, "//div[contains(@class,'MegaModal_c-megaModal-document--scrollable')]")))
driver.execute_script("document.querySelector('div[class*=MegaModal_c-megaModal-document--scrollable]').scrollDown += 250")

为了使用上述显式条件,您将需要这些导入

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

并初始化等待对象

wait = WebDriverWait(driver, 20)

【讨论】:

  • 我已经尝试了上面的代码,但是我得到了同样的错误信息,看起来发现元素不是问题,因为它是立即定位的,然后出现与上面相同的错误。如果我使用了错误的定位器,我不确定哪个是正确的?
  • 我明白了。您不能使用发送箭头键滚动它,但是您可以使用 JavaScript 滚动来滚动它。请查看更新后的答案
  • 这似乎没有任何效果。我最初是自己尝试的,然后把它放在一个循环中,只是为了检查它肯定没有滚动。我已经编辑了上面的问题以显示我是如何把它放进去的。似乎元素已经定位,但是滚动动作不起作用
  • 我尝试使用browser.execute_script("window.scrollBy(0, 2500)", ""),但它只是滚动了弹出窗口后面的窗口。有没有办法可以切换到滚动弹出窗口?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-15
  • 2022-01-18
  • 1970-01-01
相关资源
最近更新 更多