当前位置: 首页 > 知识库问答 >
问题:

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

万俟招
2023-03-14

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

https://www . just-eat . co . uk/restaurants-McDonalds-Victoria London/menu

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

共有3个答案

邬宜然
2023-03-14

我不知道你已经尝试了什么,什么是失败的,但因为你提到了弹出窗口的存在,你需要确保你在正确的窗口(即弹出)上操作。

请点击这里了解更多详情:关注不同的窗口

一旦你确认了你在正确的窗口上操作,上面的回复应该会起作用。您可能也会发现此链接对滚动网页很有用

最后但同样重要的是,最好分享您的代码的可复制示例,以帮助其他人帮助您;)祝你好运

孔宇
2023-03-14

我喜欢在使用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');");

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

乐城
2023-03-14

您可以尝试在弹出窗口中找到一个元素,然后使用该元素进行滚动。这里的技巧是确保元素是可聚焦的,这样你就可以使用箭头键来滚动。可聚焦元素是那些可以接收键盘事件的元素,这些元素内部声明了一个聚焦函数。由于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或滚动IntoView,如下所示。如果这没有按预期工作,请尝试添加操作。在move_to_element后单击()将其聚焦。

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)

一开始可能需要一些试验和错误,以使它适合您的用例。

 类似资料:
  • 问题内容: 我正在尝试创建一个简单游戏的开始。我要做的第一件事是将图形导入到我的代码中,然后在屏幕上移动它。我能够在屏幕上画一个球并四处移动,但是当我从文件导入图形时,无法四处移动。我想念什么或做错什么? 我的司机是在另一个班级,如下所示: 问题答案: 这里有两个大问题: 您正在从中读取文件。 永远 不要这样做,因为这会不必要地减慢绘图速度。可能在构造函数中读取一次图像,然后在图形中使用存储的im

  • 问题内容: 我在JScrollPane中有一个JTextArea组件,并且文本区域不可编辑。我想使用向上和向下箭头键滚动文本区域(即,按箭头键将文本区域滚动一行)。任何想法如何实现这一目标? 问题答案: 是的,键绑定是必经之路,但是您不一定总是需要创建自己的动作。Swing组件带有您经常可以重用的默认操作。 有关这些操作的完整列表,请参见键绑定。 现在您知道了动作名称,您可以将其绑定到keyStr

  • 问题内容: 我要使第二个选择框箭头与第一个相同。但是我不知道它们为什么不同,因为我没有设置箭头的样式。 问题答案: 在大多数情况下,浏览器和操作系统会确定选择框的样式,几乎不可能仅通过CSS对其进行更改。您必须研究替换方法。主要技巧是应用appearance: none,使您可以覆盖某些样式。 它不会替代OS选择菜单UI元素,因此与该操作相关的所有问题都不存在(无法以长列表为主要内容脱离浏览器窗口

  • 我现在正在实验JavaFX,教自己如何使用箭头键移动文本和项。我做了一个程序,如果按下箭头键,就可以简单地在舞台上移动文本。 我想使一个圆圈移动我的窗格,而不是文本。要使用箭头键移动我的圆圈,我必须做哪些更改?

  • 如何在按钮中显示向上箭头符号?分别,我希望它在单击向下箭头时发生更改。我该怎么做?? 我试过了,但是。。。。

  • 问题内容: 我正在将ReactJS与Babel和Webpack一起使用,并使用ES6以及针对箭头功能的建议类字段。我知道箭头函数通过不重新创建每个呈现的函数(类似于构造函数中的绑定工作方式)来使事情更高效。但是,我不确定100%是否正确使用了它们。以下是我的代码在三个不同文件中的简化部分。 我的代码: Main.js SecondClass.js ThirdClass.js 题: 我上面的代码使用