課堂筆記-爬蟲-selenium模塊

課堂筆記

1. 定位元素

• find_element_by_id:根據id來查找某個元素
submitTag = driver.find_element_by_id('su')
submitTag1 = driver.find_element(By.ID,'su')
• find_element_by_class_name:根據類名查找元素
submitTag = driver.find_element_by_class_name('su')
submitTag1 = driver.find_element(By.CLASS_NAME,'su')
• find_element_by_name:根據name屬性的值來查找元素
submitTag = driver.find_element_by_name('email')
submitTag1 = driver.find_element(By.NAME,'email')
• find_element_by_tag_name:根據標籤名來查找元素
submitTag = driver.find_element_by_tag_name('div')
submitTag1 = driver.find_element(By.TAG_NAME,'div')
• find_element_by_xpath:根據xpath語法來獲取元素
submitTag = driver.find_element_by_xpath('//div')
submitTag1 = driver.find_element(By.XPATH,'//div')
• find_element_by_css_selector:根據css選擇器選擇元素
submitTag = driver.find_element_by_css_selector('//div')
submitTag1 = driver.find_element(By.CSS_SELECTOR,'//div')
要注意,find_element是獲取第一個滿足條件的元素。find_elements是獲取所有滿足條件的元素

2. 操作表單元素

操作輸入框:分爲兩步。
第一步:找到這個元素。
第二步:使用send_keys(value),將數據填充進去
• 使用clear方法可以清除輸入框中的內容
inputTag.clear()
• 操作checkbox
因爲要選中checkbox標籤,在網頁中是通過鼠標點擊的。因此想要選中checkbox標籤,那麼先選中這個標籤,然後執行click事件
rememberTag = driver.find_element_by_name("rememberMe")
rememberTag.click()
• 操作按鈕
操作按鈕有很多種方式。比如單擊、右擊、雙擊等。這裏講一個最常用的。就是點擊。直接調用click函數就可以了
inputTag = driver.find_element_by_id('su')
inputTag.click()
• 選擇select
select元素不能直接點擊。因爲點擊後還需要選中元素。這時候selenium就專門爲select標籤提供了一個類selenium.webdriver.support.ui.Select。將獲取到的元素當成參數傳到這個類中,創建這個對象。以後就可以使用這個對象進行選擇了。https://www.17sucai.com/boards/53562.html

3. 行爲鏈

有時候在頁面中的操作可能要有很多步,那麼這時候可以使用鼠標行爲鏈類ActionChains來完成。比如現在要將鼠標移動到某個元素上並執行點擊事件
actions = ActionChains(driver)
actions.move_to_element(inputTag)
actions.send_keys_to_element(inputTag,'python')
actions.move_to_element(submitTag)
actions.context_click()
actions.click(submitTag)
actions.perform()
還有更多的鼠標相關的操作
• click_and_hold(element):點擊但不鬆開鼠標。
• context_click(element):右鍵點擊。
• double_click(element):雙擊。 
• 更多方法請參考:http://selenium-python.readthedocs.io/api.html

4. Selenium頁面等待

4.1 Cookie操作

• 獲取所有的cookie
cookies = driver.get_cookies()
• 根據cookie的name獲取cookie
value = driver.get_cookie(key)
• 刪除某個cookie
driver.delete_cookie('key')

4.2 頁面等待

現在的網頁越來越多采用了 Ajax 技術,這樣程序便不能確定何時某個元素完全加載出來了。如果實際頁面等待時間過長導致某個dom元素還沒出來,但是你的代碼直接使用了這個WebElement,那麼就會拋出NullPointer的異常。爲了解決這個問題。所以 Selenium 提供了兩種等待方式:一種是隱式等待、一種是顯式等待
• 隱式等待:調用driver.implicitly_wait。那麼在獲取不可用的元素之前,會先等待10秒中的時間
driver.implicitly_wait(10)
• 顯示等待:顯示等待是表明某個條件成立後才執行獲取元素的操作。也可以在等待的時候指定一個最大的時間,如果超過這個時間那麼就拋出一個異常。顯示等待應該使用selenium.webdriver.support.excepted_conditions期望的條件和selenium.webdriver.support.ui.WebDriverWait來配合完成
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
try:
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "myDynamicElement"))
 )
finally:
    driver.quit()
一些其他的等待條件
• presence_of_element_located:某個元素已經加載完畢了。
• presence_of_all_elements_located:網頁中所有滿足條件的元素都加載完畢了。
• element_to_be_clickable:某個元素是可以點擊了。
更多條件請參考:http://selenium-python.readthedocs.io/waits.html

5. 打開多窗口和切換頁面

• 有時候窗口中有很多子tab頁面。這時候肯定是需要進行切換的。selenium提供了一個叫做switch_to_window來進行切換,具體切換到哪個頁面,可以從driver.window_handles中找到
# 打開一個新的頁面
driver.execute_script("window.open('url')")
print(driver.current_url)
# 切換到這個新的頁面中
driver.switch_to_window(self.driver.window_handles[1])
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章