在 Chrome Selenium 弹出窗口 Python 上使用箭头键

Using arrow keys on Chrome Selenium popup Python

我想在下一页的弹出窗口中使用滚动条。如果您单击页面上的任何产品,它将打开一个弹出窗口,您可以在其中添加额外的项目。我正在尝试使用 Keys.send_keys(Keys.ARROW_DOWN) 向下滚动弹出窗口,但我在 Chrome 中找不到滚动条元素。我试过使用其他方法移动到元素但没有成功,所以想尝试使用箭头键。

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

我设法在 FireFox 的弹出窗口中使用箭头键,但无法在 Chrome 中复制。

我喜欢在使用 Selenium 时使用 JavaScript 向下滚动。根据我的经验,它更可靠。

尝试以下操作:

X = 500
DRIVER_NAME.execute_script("window.scrollBy(0, X)")

另一种选择是通过在网页中注入 CSS 来规避滚动的需要。您可以编写几行 CSS 代码,使弹出窗口的字体和行高非常小;这样,您就可以在不滚动的情况下将所有内容都放入屏幕中。

这是这样的:

new_css = "body{background-color: white;}"
DRIVER_NAME.executeScript("$('<style type=\"text/css\">new_css</style>').appendTo('html > head');");

以上两种解决方案之一应该可以解决您的问题。

您可以尝试在弹出窗口中找到一个元素,然后使用该元素进行滚动。这里的技巧是 确保该元素是可聚焦的 以便您可以使用它来使用箭头键进行滚动。 可获得焦点的元素是那些可以接收键盘事件的元素,这些元素在其中声明了焦点函数。由于w3c文档http://www.w3.org/TR/DOM-Level-2-HTML/html.html长期不更新,我们没有可聚焦元素的列表,但是根据它的一些可聚焦元素是HTMLInputElement, HTMLSelectElement, HTMLTextAreaElement, HTMLIFrameElement 、HTMLButtonElement、HTMLAnchorElement 和任何带有 tabindex 的元素。

以下是供您参考的示例代码片段。

from selenium.webdriver.common.keys import Keys

focusable_element_in_popup = driver.find_element_by_id('id_of_the_element')
focusable_element_in_popup.send_keys(Keys.ARROW_DOWN)

#or you can use //a magic using xpath to return you the any first link on popup, like below

#driver.find_element_by_xpath('//div[@class="some-class"]//a') 

或者您也可以使用 move_to_element 或 scrollIntoView,如下所示。如果这没有按预期工作,请尝试在 move_to_element 之后添加 actions.click() 以聚焦它。

from selenium.webdriver.common.action_chains import ActionChains

element = driver.find_element_by_id("my-id")

actions = ActionChains(driver)
actions.move_to_element(element).perform()

#actions.move_to_element(element)
#actions.click()
#actions.send_keys("SOME DATA")
#actions.perform()

#or 

driver.execute_script("arguments[0].scrollIntoView();", element)

首先可能需要反复试验才能使其适合您的用例。

我不确定您已经尝试了什么,什么失败了,但是既然您提到了弹出窗口 window,您需要确保您在正确的 [=21] 上操作=](即弹出窗口)。

请点击这里了解更多详情:focus different window

一旦您确认您在正确的 window 上操作,上面的回复应该可以解决问题。您可能还会发现此 link 对 scroll a webpage

有用

最后但并非最不重要的一点是,始终建议您分享一个可重现的代码示例以帮助其他人帮助您;) 祝你好运

您可以使用driver.switch_to.active_element来关注弹出窗口并在其上使用Keys.ARROW_DOWN

driver.find_element_by_css_selector('[data-test-id="menu-item"]').click()  # open the popup
driver.find_element_by_class_name('c-modal-titleContainer').click()  # make the popup the active element
popup = driver.switch_to.active_element  # and switch to driver focus to it
for _ in range(10):
    popup.send_keys(Keys.ARROW_DOWN)