我正在使用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()
不起作用,因为它单击了正文中的链接。
有没有更好的方法可以做到这一点?特别是,我有点担心使用当前方法时打开的右键单击菜单可能会弄乱其余的抓取。至少有一种方法可以保证它不会干扰吗?另一种解决方案可能是以某种方式"选择"或单击硒中的身体元素,那么对此有什么建议吗?
您可以尝试使用 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)