Excel如何設置動態求和 Excel設置動態求和方法
912
2025-04-01
本篇博客學習 selenium webdriver 控制窗口句柄,以及模擬鼠標鍵盤操作等內容。
控制 BOSS 直聘網站窗口句柄
本次先通過 BOSS 直聘網進行測試,打開網站首頁的頭圖。
切換句柄,用到的核心函數是 driver.switch_to.window(all_handles[0]),其中 all_handlers 為列表類型,在很多博客中,你會看到被廢棄的方法 switch_to_window,需要留意一下。
使用 driver.current_window_handle 可以獲取當前窗口句柄。
from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By driver = webdriver.Chrome() driver.get("https://www.zhipin.com/?ka=header-home") locator = (By.CLASS_NAME, 'firstRow') try: WebDriverWait(driver, 10).until(EC.presence_of_element_located(locator)) except TimeoutError as e: print(e) btn = driver.find_elements_by_css_selector('tr.firstRow td:nth-child(1)>a')[0] btn.click() # 打開一個新選項卡窗口 all_handles = driver.window_handles # 獲取所有窗口句柄 print(all_handles) driver.switch_to.window(all_handles[0]) # 切換到首頁句柄
與 switch_to.window 函數相似功能的還有 switch_to.frame() 方法、switch_to.alert 屬性,這里這個 alert 屬性非常有趣,可以捕獲到網頁彈窗,測試代碼如下:
from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By import time driver = webdriver.Chrome() driver.get("https://www.zhipin.com/?ka=header-home") locator = (By.CLASS_NAME, 'firstRow') try: WebDriverWait(driver, 10).until(EC.presence_of_element_located(locator)) except TimeoutError as e: print(e) btn = driver.find_elements_by_css_selector('tr.firstRow td:nth-child(1)>a')[0] btn.click() # 打開一個新選項卡窗口 all_handles = driver.window_handles # 獲取所有窗口句柄 driver.switch_to.window(all_handles[0]) # 切換到首頁句柄 time.sleep(2) js = "alert('提示彈窗')" # js 代碼 driver.execute_script(js) # 執行JS alt = driver.switch_to.alert # 捕獲網頁彈窗 print(alt.text) # 打印彈窗文本
最終輸出彈窗文本,【提示彈窗】。
與 switch_to.frame() 配合使用的還有兩個方法需要學習,分別是跳轉父級窗口 driver.switch_to.parent_frame(),跳轉回默認頁 driver.switch_to.default_content()。
通過簡書網學習 ActionChains
ActionChains 稱為動作鏈,主要用于模擬鼠標操作,例如單擊、雙擊、右鍵、拖拽,也可以操作鍵盤,例如按鍵按下與松開。
使用前需要導入相關類:
from selenium.webdriver.common.action_chains import ActionChains # 導入模塊
需要注意當我們調用 ActionChains 的方法之后,它不會立即執行,他會把所有操作都放在一個隊列中,當我們調用 perform() 方法之后,隊列依次執行。
下面實現第一個功能,打開簡書,點擊導航欄中的 IT 技術選項卡。
from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains # 導入模塊 driver = webdriver.Chrome() driver.maximize_window() driver.get("https://www.jianshu.com/") # 打開簡書 it = driver.find_element_by_link_text("IT技術") # 找到所在標簽 ActionChains(driver).click(it).perform() # 點擊所在標簽
接下來用 ActionChains 實現簡書首頁的閱讀更多操作,下述代碼有個位置需要移動兩次鼠標,為了讓閱讀更多首次加載,可以使用運行 JS 代碼實現。
from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains # 導入模塊 driver = webdriver.Chrome() driver.maximize_window() driver.get("https://www.jianshu.com/") # 打開簡書 # 下述代碼用于找到閱讀更多 change = driver.find_element_by_link_text("涂檬-原創插畫社區") ActionChains(driver).move_to_element(change).move_to_element(change).perform() more = driver.find_element_by_link_text("閱讀更多") ActionChains(driver).move_to_element(more).click(more).perform() # 點擊閱讀更多
ActionChains 更多方法如下所示:
關于鼠標
click(on_element=None):普通單擊;
click_and_hold(on_element=None):按住左鍵不松開;
context_click(on_element=None):右擊;
double_click(on_element=None):雙擊;
drag_and_drop(source, target):拖動某個元素到目標元素;
drag_and_drop_by_offset(source, xoffset, yoffset):拖拽某個元素到某個坐標;
move_by_offset(xoffset, yoffset) :移動鼠標到某個位置;
move_to_element(to_element):移動鼠標到某個元素;
move_to_element_with_offset(to_element, xoffset, yoffset):移動鼠標到 距某個元素(左上角坐標)指定的位置;
release(on_element=None):釋放鼠標左鍵。
關于鍵盤
send_keys(*keys_to_send):發送內容到當前焦點的元素;
send_keys_to_element(element, *keys_to_send):發送內容到指定元素;
key_down(value, element=None): 按下某個鍵盤上的鍵;
key_up(value, element=None) :松開某個鍵。
下面實現打開簡書,向搜索框輸入數據,然后點擊查詢的動作鏈操作。
from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains # 導入模塊 driver = webdriver.Chrome() driver.maximize_window() driver.get("https://www.jianshu.com/") # 打開簡書 search_box = driver.find_element_by_id("q") # 搜索框 # print(search_box) search_btn = driver.find_element_by_class_name('search-btn') # 搜索按鈕 ActionChains(driver).send_keys_to_element(search_box, "夢想橡皮擦").move_to_element(search_btn).click(search_btn).perform()
學習了 key_down 與 key_up 方法之后,可以配合 Keys 類,實現對簡書的如下控制,通過下拉滾動條實現【閱讀更多】操作。
from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains # 導入模塊 from selenium.webdriver.common.keys import Keys driver = webdriver.Chrome() driver.maximize_window() driver.get("https://www.jianshu.com/") # 打開簡書 # 模擬按下鍵盤上下鍵 500 次 for i in range(500): ActionChains(driver).key_down(Keys.DOWN).key_up(Keys.DOWN).perform() more = driver.find_element_by_link_text("閱讀更多") ActionChains(driver).move_to_element(more).click(more).perform() # 點擊閱讀更多
記錄時間
今天是持續寫作的第
280
/ 365 天。
可以
關注
我,
我、
評論
我、
我啦。
Selenium
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。