python-3.x - 不能多次滚动一个 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)
解决方案
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
推荐阅读
- macos - 在 mac 上安装 BerkeleyDB Perl 模块时出错
- angular - combineLatest 但仅用于一次发射
- javascript - 回调函数可以是闭包吗?
- java - 运行主窗口摆动时出现异常
- amazon-web-services - 对于 Dynamodb DAX,即使有缓存命中也会收取请求费用,即从 dax 缓存中获取项目
- javascript - 如何使用 fs 从 json 文件中获取 ID
- reactjs - 语法错误 - collectionViewURL 未定义
- javascript - 如何创建一个从用户那里获取值的 java 对象?
- html - 自定义引导程序的导航栏切换器图标
- java - 设置 JTextFrame 的高度