【问题标题】:Can't scroll through a div more than once | Selenium | Python不能多次滚动一个 div |硒 | Python
【发布时间】:2021-07-07 15:01:56
【问题描述】:

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

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)

【问题讨论】:

  • Q1:哪一行和元素抛出“不可交互”? Q2:你为什么希望它滚动两次?我在您的代码中只看到一个 move_to_element。
  • 你试过driver.execute_script("arguments[0].scrollIntoView();", scroll_zone)吗?
  • 如果他们回答了您的问题,请不要忘记接受答案。
  • @ConradAlbrecht 当我第一次滚动时发生不可交互错误:scroll_zone.send_keys(Keys.ARROW_DOWN),但由于某些奇怪的原因它仍然滚动。另外, move_to_element 只是悬停,这是我尝试使其可交互的。是的,@Burakudo 我试过了
  • @Burakudo nvm 在我再次尝试后再次工作,非常感谢

标签: python-3.x selenium web-scraping selenium-chromedriver


【解决方案1】:

如果您想滚动喜欢该页面的人员列表,您可以这样做:

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)

10到20像素的滚动范围可以根据需要改变

【讨论】:

  • 嗯,我不认为这条线是 pythonic JavascriptExecutor jsExec = (JavascriptExecutor) driver;
  • 对不起,它来自 Java。很快会尝试在 Python 中提供它
  • 如果可以的话,那就太棒了。我假设您正在尝试在这里执行 JS,我们这样做是这样的:driver.execute_script()。驱动程序是 chrome 驱动程序。我试过了,但由于某种原因没有用
  • 我对 JavaScript 不是很熟悉。请让我知道这是否有效
  • 没用,也没给我任何错误
猜你喜欢
  • 1970-01-01
  • 2016-04-21
  • 1970-01-01
  • 2016-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-03
  • 1970-01-01
相关资源
最近更新 更多