昨天介紹了如何定位元素,今天要介紹各個跟元件互動的方式,在這之前要先講如何把昨天的定位方法用到 selenium 中。
之前有提到,元素查找分成兩部分:找的方法與其內容,而在 find_element 中,它的寫法如下:
find_element(By.ID, 'test')
用 By 去選擇查找的方法,而後面放該內容的字串。
而要使用 By 需要先在檔案開頭導入
from selenium.webdriver.common.by import By
以 iT邦幫忙 為例,點進來就是技術問答的欄位,而我們像要換成技術文章的欄位。
首先先尋找"技術文章"的元素,在 selenium 中,要點擊元素就在 find_element 後面加上.click()。
browser.find_element(By.XPATH, "//a[@class='menu__item-link ']").click()
這樣就可以讓 selenium 自動點擊按鈕。
現在我們想要輸入 python 相關內容的文章,我們可以把它拆解成三個步驟
第二點要用到 .send_keys(""),括號內填入想要輸入的內容
把這三點轉換後的程式碼如下
browser.find_element(By.ID, 'searchDropdown').click()
browser.find_element(By.NAME, 'search').send_keys('Python')
browser.find_element(By.XPATH, "//button[@type='submit']").click()
這個功能除了文字外也可以傳遞,所以也可以用功能鍵的方式操作,例如送出Enter鍵,要先 import Keys 才能用。
from selenium.webdriver.common.keys import Keys
browser.find_element(By.NAME, 'search').send_keys(Keys.ENTER)
也可以用組合鍵的方式,例如在輸入文字前先清除預設在搜尋欄的文字
browser.find_element(By.NAME, 'search').send_keys(Keys.CONTROL, 'a') # 全選
browser.find_element(By.NAME, 'search').send_keys(Keys.DELETE) # 刪除所有選中的文字
在網頁中,如果要點擊的元素不在頁面上,程式會因為找不到元素而報錯,這個時候就可以透過滾輪滾到指定頁面出現的頁面。使用方法如下
browser.execute_script("arguments[0].scrollIntoView();",browser.find_element(By.ID, 'btn')
這是利用執行 JavaScript 的程式碼來達到滾動視窗的目的。
今天介紹完了基本的互動方式,明天預計會帶到第一個實作。
9/22 更新 結果打完忘記發出去導致挑戰失敗,不過會繼續寫到30天為止