python+selenium元素定位(滚动条)

场景:
F12能找到这个元素,但是selenium报错,元素没有找到

原因:
由于元素在页面中没有显示,无法进行点击操作

解决办法:
用滚动条的方式进行元素可见

from selenium import webdriver
import time

#百度说 chrome document.documentElement.scrollTop不支持,需要用document.body.scrollTop,
但是最新的selenium应该已经支持了,所以无需对drivername进行判断

# 回到顶部
def scroll_top():

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

# 拉到底部
def scroll_foot():
    js = "var q=document.documentElement.scrollTop=10000"
        #这种方式也可以到浏览器底部
    #js="window.scrollTo (0, document.body.scrollHeight)"
    return driver.execute_script(js)driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.baidu.com")

driver.find_element_by_xpath("//*[@id='kw']").send_keys("selenium")
driver.find_element_by_xpath("//*[@id='su']").click()

time.sleep(2)
scroll_foot()

time.sleep(2)
scroll_top()

time.sleep(2)
#通过CSS定位到第10条搜索结果
target = driver.find_element_by_xpath("//*[@id='10']/h3/a")
#利用js将定位到的元素拖动到可见区域
driver.execute_script("arguments[0].scrollIntoView();", target)
 #还有一种方式就是直接用js进行点击元素,也可以,但是有风险,可能由于页面没有加载完成而导致元素无法点击
,或者本身元素被隐藏,但是js还是可以点击。慎用!
 #driver.execute_script("arguments[0].click();", target)

PS:还有可以指定固定的高度,宽度,这个其实并不是最好的解决方案。
 如果能够直接将元素拖动到可见区域是最好的。如果还是不行,我在考虑有其他解决方式。

****************************************************

1、如果滚动条是针对整个HTML可以用如下方式:

js = "var q=document.documentElement.scrollTop=10000"  # documentElement表示获取根节点元素
self.driver.execute_script(js)

2、如果滚动条是针对整个body可以用如下方式:

js = "var q=document.body.scrollTop=10000"  # documentElement表示获取body节点元素
self.driver.execute_script(js)

3、如果滚动条是针对某个div可以用如下方式:该页面的滚动条就是针对class='main'的div而言的

js = "var q=document.getElementsByClassName('main')[0].scrollTop = 10000"  
# getElementsByClassName表示获取class='main'的元素列表,0表示第一个,所以使用的时候要加索引
self.driver.execute_script(js)
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值