当前位置 : 主页 > 编程语言 > python >

python之selenium操作下拉滚动条方法 || selenium之页面滚动至页面底部的数种解决方

来源:互联网 收集:自由互联 发布时间:2022-06-20
场景:元素在当前显示的页面不可见,拖动页面下拉直到该元素出现,此时才可以定位到该元素。 实例: 比如下面有一个网页,需要进行拖动页面下拉条后才能通过selenium找到密码输入

场景:元素在当前显示的页面不可见,拖动页面下拉直到该元素出现,此时才可以定位到该元素。

实例:

比如下面有一个网页,需要进行拖动页面下拉条后才能通过selenium找到密码输入框的元素:

python之selenium操作下拉滚动条方法 || selenium之页面滚动至页面底部的数种解决方案_javascript

拖动页面下拉条后:

python之selenium操作下拉滚动条方法 || selenium之页面滚动至页面底部的数种解决方案_css_02

方法①

使用js脚本直接操作:

js = "var q=document.getElementById('id').scrollTop=10000"
driver.execute_script(js)

或者:

js = "var q=document.documentElement.scrollTop=10000"
driver.execute_script(js)

【注意】上述代码中的id为滚动条的id属性,因为JavaScript中不存在xpath语法(JavaScript无法识别xpath元素定位),所以一旦滚动条没有id属性,则此方法无法使用。

方法②

使用JavaScript脚本将滚动条拖动到指定地方:

注意:使用该方法需要获取将滚动条拖动至指定的元素对象定位

target = driver.find_element_by_id("id_keypair") # 需要将滚动条拖动至的指定的元素对象定位

driver.execute_script("arguments[0].scrollIntoView();", target) # 将滚动条拖动到元素可见的地方

该方法可以将页面滚动条拖动到需要显示的元素位置,此方法用途比较广,可以使用。

方法③

根据页面显示进行变通:

在本实例中的页面中,密码是输入框,正常手工操作时,可以通过tab键可以从用户框切换到密码框中,所以根据此思路,在python中也可以发送tab键来切换,使元素显示。

from selenium.webdriver.common.keys import Keys # 导入Keys类

driver.find_element_by_id("id_login_method_0").send_keys(Keys.TAB) # 定位元素并操作输入

方法④

send_keys(Keys.END) 模拟向页面发送空格键

注意:发送空格键的元素应该是整个页面对象,比如说定位到页面body后进行操作

#coding=utf-8
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.action_chains import ActionChains
browser=webdriver.Chrome("G:/dj/chromedriver.exe")
wait=WebDriverWait(browser,10)
browser.set_window_size(1400,900)
import time
def search():
try:
browser.get("https://www.taobao.com")
total=wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,"body > div:nth-child(29)")))
for i in range(5):
browser.find_element_by_tag_name('body').send_keys(Keys.Space)
time.sleep(1)
except TimeoutException:
search()
search()

方法⑤

使用鼠标操作

#coding=utf-8
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.action_chains import ActionChains
browser=webdriver.Chrome("G:/dj/chromedriver.exe")
wait=WebDriverWait(browser,10)
browser.set_window_size(1400,900)
import time
def search():
try:
browser.get("https://www.taobao.com")
total=wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,"body > div:nth-child(29)")))
target = browser.find_element_by_css_selector('body > div:nth-child(29)')
actions = ActionChains(browser)
actions.move_to_element(target)
actions.perform()
except TimeoutException:
search()
search()

拓展:

python之selenium操作下拉滚动条方法 || selenium之页面滚动至页面底部的数种解决方案_css_03

 

 

去期待陌生,去拥抱惊喜。

上一篇:python里的StringIO
下一篇:没有了
网友评论