Selenium爬蟲語法總結
供個人學習需要進行整理
了解網頁的元素和屬性
- 使用F12打開網頁源代碼
- 講解部分屬性
- 非自定義屬性
- id
- class
- div
- 等等
- 自定義屬性
- 開發者自己定義的屬性
- 非自定義屬性
加載瀏覽器
- 導入包
- from selenium import webdriver
- from selenium.webdriver.common.by import By(選擇選擇元素的方式)
- 加載瀏覽器驅動
- web = webdriver.Chrome(r'chromedriver.exe')
- WebDriver 對象,指明了瀏覽器驅動的地址
- web是返回值,對象實例化
- web = webdriver.Chrome(r'chromedriver.exe')
- 獲取網頁
- web.get('https://www.baidu.com')
設置最大等待時間
- web.implicitly_wait(10)
關閉瀏覽器
- web.quit()
根據id 屬性選擇元素
- element = web.find_element(By.ID, str)
- 最新4.0更新后的方法(推薦使用)
- key=web.find_element_by_id(str)
- 能用,但是會預警
- 元素操作
- element.send_keys(str)
根據class屬性、tag名選擇元素
- 根據class屬性選擇元素
- elements = web.find_elements(By.CLASS_NAME, str)
- 返回的是標簽對象即WebElement對象
- 取出列表中的每個 WebElement對象,打印出其text屬性的值
- element.text
- 根據 tag 名 選擇元素,如div等標簽
- elements = web.find_elements(By.TAG_NAME, str)
- 其余方法一致
- find_element 和 find_elements 的區別
- 前者選擇單個,后者選擇多個
控制元素
- 點擊元素
- element.click()
- 輸入框
- 清除輸入框已有的字符串:element.clear()
- 輸入新字符串:element.send_keys(str)
- 補充:
- element.get_attribute('innerText')
- element.get_attribute('textContent')
- 獲取元素信息
- 獲取元素的文本內容
- element.text
- 獲取元素屬性
- element.get_attribute('class')
- 獲取整個元素對應的HTML
- element.get_attribute('outerHTML')獲取外部
- element.get_attribute('innerHTML')獲取內部
- 獲取輸入框里面的文字
- element.get_attribute('value')
- 獲取元素的文本內容
利用CSS表達式選擇元素
- web.find_element(By.CSS_SELECTOR, CSS Selector參數)
- 選擇元素
- id使用#+id值表示
- class使用.+class值表示
- 屬性選擇使用 [屬性名字] [href="http://www.baidu.com"]
- 選擇屬性值包含某個字符串的元素
- a[href*="baidu"]
- 選擇屬性值以某個字符串開頭的元素
- a[href^="http"]
- 選擇屬性值以某個字符串結尾的元素
- a[href$="gov.cn"]
- 選擇的同時具有多個屬性的元素要
- div[class="result c-container new-pmd"][id="1"]
- 選擇屬性值包含某個字符串的元素
- 其他值可以直接填寫
- 選擇子元素和后代子元素
- 直接子元素
- 元素1 > 元素2
- 元素1 > 元素2 > 元素3
- 后代子元素
- 元素1 元素2
- 元素1 元素2 元素3
- 選擇語法聯合使用進行選擇
- div.foot > span.copy
- .foot > .copy
- .foot .copy
- 直接子元素
- 組選擇
- .a , .b
- id為1里面的span和p元素?
- #1 > span , p
- #1 > span , #1 > p
- 按次序選擇子節點
- 父元素的第n個子節點
- nth-child
- span:nth-child(2)
- #t1 :nth-child(2)
- http://cdn1.python3.vip/files/selenium/sample1b.html
- 父元素的倒數第n個子節點
- nth-last-child
- p:nth-last-child(1)
- #t1 span:nth-last-child(2)
- #t1 :nth-last-child(2)
- 父元素的第幾個某類型的子節點
- nth-of-type
- span:nth-of-type(1)
- div#t1 span:nth-of-type(1)
- 父元素的倒數第幾個某類型的子節點
- nth-last-of-type
- p:nth-last-of-type(2)
- div p:nth-last-of-type(2)
- 奇數節點和偶數節點
- p:nth-child(even)偶數
- p:nth-child(odd)奇數
- 父元素的第n個子節點
- 兄弟節點選擇
- 相鄰兄弟節點選擇
- 使用 “+”
- h3 后面緊跟着的兄弟節點 span
- h3 + span
- 后續所有兄弟節點選擇
- 使用 “~”
- h3 后面所有的兄弟節點 span
- h3 ~ span
- 相鄰兄弟節點選擇