首页 > 解决方案 > 不能多次滚动一个 div | 硒 | Python

问题描述

当我运行它时,它只能向下滚动一次,并抛出“消息:元素不可交互”错误。(它应该滚动两次)。当我尝试循环运行它(尝试并忽略错误)并手动滚动它时,它会不断将我推回到特定位置。但这很奇怪,因为我在这里使用箭头键,而不是移动到元素:

ActionChains(driver).move_to_element(driver.sl.find_element_by_id('my-id')).perform()

我已经尝试过:给所有东西更多的时间来加载睡眠,将鼠标悬停在元素上并单击它以使其可交互,使用其他方法滚动,例如这个和其他类似的方法:driver.execute_script("window.scrollTo(0, Y)")

我现在很迷茫,不知道该怎么办

from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
from selenium import webdriver
from datetime import date
from datetime import datetime
from time import sleep
from random import *
import random, json, selenium, os.path, os


driver = webdriver.Chrome('/Users/apple/Downloads/chromedriver')

driver.maximize_window()
driver.get('https://instagram.com')

sleep(7)

username_form = driver.find_element_by_xpath('/html/body/div[1]/section/main/article/div[2]/div[1]/div/form/div/div[1]/div/label/input')
username_form.clear()
username_form.send_keys('ENTER INSTA USER HERE')

password_form = driver.find_element_by_xpath('/html/body/div[1]/section/main/article/div[2]/div[1]/div/form/div/div[2]/div/label/input')
password_form.clear()
password_form.send_keys('ENTER INSTA PASS HERE')

button_click = driver.find_element_by_xpath('/html/body/div[1]/section/main/article/div[2]/div[1]/div/form/div/div[3]/button')
try:
    button_click.click()
except:
    driver.execute_script("arguments[0].click();", button_click)

sleep(4)

driver.get('https://instagram.com/p/CQ_sfAeFl5s/')

sleep(4)

like_meter = driver.find_element_by_class_name('zV_Nj')
like_meter.click()

sleep(1)

try:
    scroll_zone = driver.find_element_by_xpath('/html/body/div[5]/div/div/div[2]/div/div')
except:
    scroll_zone = driver.find_element_by_xpath('/html/body/div[4]/div/div/div[2]/div/div')


scroll_zone.click()

sleep(0.5)

hover = ActionChains(driver).move_to_element(scroll_zone)
hover.perform()

sleep(0.5)

scroll_zone.send_keys(Keys.ARROW_DOWN)
scroll_zone.send_keys(Keys.ARROW_DOWN)

标签: python-3.xseleniumweb-scrapingselenium-chromedriver

解决方案


If you want to scroll that list of persons liked that page you can do this:

like_meter = driver.find_element_by_class_name('zV_Nj')
like_meter.click()

sleep(1)

elem = driver.find_element_by_css_selector("div[role='dialog'] div[style*='padding']")

for n in range(10):
    driver.execute_script("arguments[0].scrollDown += 20", elem)

The range of 10 and 20 pixels scrolling can be changed according to your needs


推荐阅读