有些時候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)