我想自动滚动网页并点击按钮的任务。但是,当尝试使用driver.find_elements()查找网页元素时,会获取视口中不存在的所有网页元素的列表,因此点击它们会导致错误“MoveTargetOutOfBounds”
def like(self):
likeButtonXpath = '//div[@aria-label="Like"]'
try:
a = ActionChains(self.browser)
likeWebElements = self.browser.find_elements(
By.XPATH, likeButtonXpath)
for element in likeWebElements:
try:
a.move_to_element(element).perform()
sleep(3)
element.click()
except:
print("error while clicking button")
except Exception as e:
print(e)
def scrollLike(self):
last_height = self.browser.execute_script(
"return document.body.scrollHeight")
cnt = self.maxScroll
curHeight = last_height
while cnt >= 0:
self.like()
self.browser.execute_script("window.scrollBy(0,1000)", "")
sleep(30)
new_height = self.browser.execute_script(
"return document.body.scrollHeight")
if new_height == last_height:
break
last_height = new_height
cnt -= 1
1条答案
按热度按时间aiazj4mn1#
不可能告诉
driver.find_elements
限制它在视区中的元素上搜索。一个可能的解决方案是计算元素的坐标,然后滚动到它们,但这通常是一项艰巨的任务,几乎不可能得到精确的坐标。使用javascript和
scrollIntoView
,我们可以很容易地将所需的元素放入视口中。通过添加
block: "center"
,滚动将以元素位于视口中心的方式执行。通过添加behavior: "smooth"
,滚动将变得平滑。