我正在使用Selenium python,并且想在单击一个元素后在页面上向下滚动。单击元素会弹出一个菜单,然后当我尝试某些滚动方法时,它们会在原始页面上滚动。
我选择了出现的新元素的主体并尝试了此操作:
from selenium import webdriver
from selenium import Keys
driver = webdriver.get(url)
button = driver.find_element_by_xpath(pathto)
button.click()
body = driver.find_element_by_css('body')
body.send_keys(Keys.PAGE_DOWN)
这实际上并没有做任何事情。但是,如果在执行body.send_keys(Keys.PAGE_DOWN)
之前先手动单击新的弹出元素,它会滚动。
我解决此问题的一种方法是使用ActionChains
在向下滚动之前右键单击正文。在主体上直接使用.click()
无效,因为它单击了主体中的链接。
有没有更好的方法可以做到这一点?特别是,我有点担心使用我当前的方法时打开的右键单击菜单可能会与其余的抓取操作混淆。至少有一种方法可以保证它不会干扰?另一个解决方案可能是以某种方式“选择”或单击硒中的body元素,因此对此有什么建议吗?
答案 0 :(得分:0)
您可以尝试使用END键而不是DOWN键。值得一试:
from selenium.webdriver.common.keys import Keys
driver = webdriver.get(url)
button = driver.find_element_by_xpath(pathto)
button.click()
driver.find_element_by_tag_name('body').send_keys(Keys.END)
您可能还需要单击弹出窗口才能首先将其聚焦:
from selenium.webdriver.common.keys import Keys
driver = webdriver.get(url)
button = driver.find_element_by_xpath(pathto)
button.click()
# click popup menu to get it into focus
popup_menu = driver.find_element_by_xpath(pathToPopupMenu)
popup_menu.click()
driver.find_element_by_tag_name('body').send_keys(Keys.END)