【月更23】通過簡書網(wǎng)學習 ActionChains,selenium webdriver 學習第3篇

      網(wǎng)友投稿 1030 2025-04-08

      本篇博客學習 selenium webdriver 控制窗口句柄,以及模擬鼠標鍵盤操作等內(nèi)容。

      控制 BOSS 直聘網(wǎng)站窗口句柄

      本次先通過 BOSS 直聘網(wǎng)進行測試,打開網(wǎng)站首頁的頭圖。

      切換句柄,用到的核心函數(shù)是 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 函數(shù)相似功能的還有 switch_to.frame() 方法、switch_to.alert 屬性,這里這個 alert 屬性非常有趣,可以捕獲到網(wǎng)頁彈窗,測試代碼如下:

      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) # 執(zhí)行JS alt = driver.switch_to.alert # 捕獲網(wǎng)頁彈窗 print(alt.text) # 打印彈窗文本

      最終輸出彈窗文本,【提示彈窗】。

      與 switch_to.frame() 配合使用的還有兩個方法需要學習,分別是跳轉(zhuǎn)父級窗口 driver.switch_to.parent_frame(),跳轉(zhuǎn)回默認頁 driver.switch_to.default_content()。

      通過簡書網(wǎng)學習 ActionChains

      ActionChains 稱為動作鏈,主要用于模擬鼠標操作,例如單擊、雙擊、右鍵、拖拽,也可以操作鍵盤,例如按鍵按下與松開。

      使用前需要導(dǎo)入相關(guān)類:

      from selenium.webdriver.common.action_chains import ActionChains # 導(dǎo)入模塊

      需要注意當我們調(diào)用 ActionChains 的方法之后,它不會立即執(zhí)行,他會把所有操作都放在一個隊列中,當我們調(diào)用 perform() 方法之后,隊列依次執(zhí)行。

      下面實現(xiàn)第一個功能,打開簡書,點擊導(dǎo)航欄中的 IT 技術(shù)選項卡。

      from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains # 導(dǎo)入模塊 driver = webdriver.Chrome() driver.maximize_window() driver.get("https://www.jianshu.com/") # 打開簡書 it = driver.find_element_by_link_text("IT技術(shù)") # 找到所在標簽 ActionChains(driver).click(it).perform() # 點擊所在標簽

      接下來用 ActionChains 實現(xiàn)簡書首頁的閱讀更多操作,下述代碼有個位置需要移動兩次鼠標,為了讓閱讀更多首次加載,可以使用運行 JS 代碼實現(xiàn)。

      from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains # 導(dǎo)入模塊 driver = webdriver.Chrome() driver.maximize_window() driver.get("https://www.jianshu.com/") # 打開簡書 # 下述代碼用于找到閱讀更多 change = driver.find_element_by_link_text("涂檬-原創(chuàng)插畫社區(qū)") 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 更多方法如下所示:

      關(guān)于鼠標

      click(on_element=None):普通單擊;

      click_and_hold(on_element=None):按住左鍵不松開;

      context_click(on_element=None):右擊;

      【月更23】通過簡書網(wǎng)學習 ActionChains,selenium webdriver 學習第3篇

      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):釋放鼠標左鍵。

      關(guān)于鍵盤

      send_keys(*keys_to_send):發(fā)送內(nèi)容到當前焦點的元素;

      send_keys_to_element(element, *keys_to_send):發(fā)送內(nèi)容到指定元素;

      key_down(value, element=None): 按下某個鍵盤上的鍵;

      key_up(value, element=None) :松開某個鍵。

      下面實現(xiàn)打開簡書,向搜索框輸入數(shù)據(jù),然后點擊查詢的動作鏈操作。

      from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains # 導(dǎo)入模塊 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 類,實現(xiàn)對簡書的如下控制,通過下拉滾動條實現(xiàn)【閱讀更多】操作。

      from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains # 導(dǎo)入模塊 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() # 點擊閱讀更多

      記錄時間

      今天是持續(xù)寫作的第

      280

      / 365 天。

      可以

      關(guān)注

      我,

      我、

      評論

      我、

      我啦。

      Selenium

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

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

      上一篇:如何啟動宏??(如何啟動宏excel)
      下一篇:如何將自動切換變成手動切換(切換為手動)
      相關(guān)文章
      亚洲av成人一区二区三区观看在线| 亚洲一区免费观看| 亚洲电影中文字幕| 亚洲永久精品ww47| 亚洲一区二区三区国产精品| 久久精品国产亚洲AV电影网| 亚洲欧美日韩国产精品一区| 亚洲AV成人一区二区三区在线看| 亚洲视频无码高清在线| 精品亚洲456在线播放| 亚洲AV成人影视在线观看| 亚洲综合在线一区二区三区| 亚洲国产激情在线一区| 亚洲综合伊人制服丝袜美腿| 亚洲人成高清在线播放| 亚洲AV无码一区二区三区人| 亚洲一级高清在线中文字幕| 亚洲AV无码精品蜜桃| 久久久久亚洲国产| 国产精品久久久久久亚洲影视| 噜噜噜亚洲色成人网站| 亚洲 自拍 另类小说综合图区 | 亚洲狠狠爱综合影院婷婷| 亚洲av无码乱码在线观看野外 | 亚洲国产成人精品电影| 亚洲午夜成激人情在线影院| 亚洲AV无码乱码在线观看代蜜桃| 在线观看日本亚洲一区| 国产亚洲美女精品久久久久| 亚洲精品tv久久久久| 伊人久久亚洲综合| 亚洲Av永久无码精品三区在线 | 亚洲国语精品自产拍在线观看| 激情内射亚洲一区二区三区| 亚洲午夜国产精品无卡| 亚洲精品无码久久久久A片苍井空 亚洲精品无码久久久久YW | 亚洲不卡在线观看| 亚洲人成欧美中文字幕| 一本色道久久88综合亚洲精品高清| 亚洲免费视频一区二区三区| 亚洲精品白浆高清久久久久久|