通過簡書網學習 ActionChains,selenium webdriver 學習第3篇

      網友投稿 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 天。

      可以

      關注

      我,

      我、

      通過簡書網學習 ActionChains,selenium webdriver 學習第3篇

      評論

      我、

      我啦。

      Selenium

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:DRS是啥你都不知道?不是吧,不是吧
      下一篇:段后間距0.5行怎么設置(如何設置段后間距0.5行)
      相關文章
      亚洲成a人片77777老司机| 久久亚洲中文字幕精品一区四| 亚洲无码日韩精品第一页| 亚洲丶国产丶欧美一区二区三区| 亚洲a级在线观看| 亚洲国产综合在线| 亚洲国产日韩女人aaaaaa毛片在线 | 亚洲人成色7777在线观看不卡| 人人狠狠综合久久亚洲| 亚洲AV无码一区二区三区性色 | 亚洲一区免费在线观看| 亚洲a级成人片在线观看| 亚洲一区中文字幕在线观看| 亚洲精品国产免费| 91亚洲精品自在在线观看| 亚洲另类春色国产精品| 亚洲AV无码一区二区三区人| 亚洲国产成a人v在线观看| 国产亚洲精品VA片在线播放| 亚洲 欧洲 视频 伦小说| 亚洲人成人无码.www石榴 | 亚洲av永久无码精品古装片| 久久久久亚洲av无码专区蜜芽| 亚洲av无码国产精品色午夜字幕| 亚洲av午夜成人片精品网站| 亚洲国产综合专区在线电影| 精品日韩亚洲AV无码一区二区三区| 亚洲美女视频免费| 亚洲最大成人网色香蕉| 亚洲日韩亚洲另类激情文学| 亚洲AV日韩AV一区二区三曲 | 7777久久亚洲中文字幕蜜桃 | 亚洲伊人久久精品| 亚洲精品无码人妻无码| 国产亚洲综合久久| 久久青青草原亚洲av无码| 亚洲国产精品成人久久| 亚洲美女激情视频| 亚洲色精品三区二区一区| 日韩亚洲综合精品国产| 国产黄色一级毛片亚洲黄片大全|