有些时候Selenium并不能帮我们完成页面上的所有操作,例如滚动条的控制就比较难处理,而且有些时候click()方法也会失灵即便我们定位按钮没问题也有点击不了的情况,这些情况下我们就可以借助Python可以执行JS的机制,借助JS来辅助我们完成一些任务。
方法封装
class JS_Assistance: # 定义类
def __init__(self, driver):
self.driver = driver
def single_click(self, element):
try:
# 判断页面元素状态
if element.is_enabled() and element.is_displayed():
# 调用js单击元素
self.driver.execute_script("arguments[0].click();", element)
else:
print("该元素不可点击")
except Exception as e:
raise e
def scroll_to_bottom(self):
"""
滚动条滚动到页面底部
:return:
"""
self.driver.execute_script("document.documentElement.scrollTop=10000")
def scroll_to_top(self):
"""
滚动条滚动到页面顶部
:return:
"""
self.driver.execute_script("document.documentElement.scrollTop=0")
def scrolltobottom(self):
"""
滚动条滚动到页面底部
:return:
"""
self.driver.execute_script("window.scrollTo(0,100000)")
def scrolltotop(self):
"""
滚动条滚动到页面顶部
:return:
"""
self.driver.execute_script("window.scrollTo(0,1)")
def vertical_to_middle(self):
"""
纵向滚动条滚动到页面中部
:return:
"""
self.driver.execute_script("window.scrollBy(0, 0-document.body.scrollHeight *1/2)")
def horizontal_to_middle(self):
"""
滚动水平滚动条到页面中部
:return:
"""
self.driver.execute_script("window.scrollBy(0, 0-document.body.scrollWidht *1/2)")
def scroll_to_element(self, element):
"""
滚动到具体页面元素可见位置
:param element:
:return:
"""
self.driver.execute_script("arguments[0].scrollIntoView(true);", element)
def scroll_to_bottom_page(self):
"""
滚动条滚动到页面底部
:return:
"""
self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")
方法调用
def test_js(self): # 定义测试方法
chrome_driver = webdriver.Chrome()
chrome_driver.get("http://www.baidu.com")
chrome_driver.find_element_by_id("kw").send_keys("davieyang")
chrome_driver.find_element_by_id("su").click()
JS_Assistance(chrome_driver).scroll_to_bottom() #滚动页面到底部
time.sleep(3)
JS_Assistance(chrome_driver).scroll_to_top() #滚动页面到顶部
time.sleep(3)
JS_Assistance(chrome_driver).scroll_to_bottom_page() #滚动页面到底部
time.sleep(3)
JS_Assistance(chrome_driver).scrolltotop() #滚动页面到顶部
time.sleep(3)
JS_Assistance(chrome_driver).scrolltobottom() #滚动页面到底部
time.sleep(3)
element = chrome_driver.find_element_by_xpath("//*[@id='help']/a[3]")
JS_Assistance(chrome_driver).single_click(element) # 单击该页面元素
time.sleep(3)