selenium最初是一個自動化測試工具,而爬蟲中使用它主要是為了解決requests無法直接執行
JavaScript代碼的問題 selenium本質是通過驅動瀏覽器,完全模擬瀏覽器的操作,比如跳轉
、輸入、點擊、下拉等,來拿到網頁渲染之后的結果,可支持多種瀏覽器
Selenium提供了一下方法來定義一個頁面中的元素:
find_element_by_id
find_element_by_name
find_element_by_xpath #根據xpath選取
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector #根據css選擇器選取
下面是查找多個元素(這些方法將返回一個列表):
find_elements_by_name
find_elements_by_xpath
find_elements_by_link_text
find_elements_by_partial_link_text
find_elements_by_tag_name
find_elements_by_class_name
find_elements_by_css_selector
find_element_by_css_selector
查id find_element_by_css_selector(#id)
查class find_element_by_css_selector(.class)
查tag find_element_by_css_selector(tag)
selenium獲取其他屬性方法
get_attribute
獲取文字 find_element_by_css_selector('#setf').get_attribute('textContent')
獲取innerhtml find_element_by_css_selector('#setf').get_attribute('innerHTML')
獲取連接地址 find_element_by_css_selector('#setf').get_attribute('href')
交互
send_keys() 輸入文字
clear() 清空文字
click() 點擊動作
執行JavaScript
Selenium API並沒有提供。比如,下拉進度條,它可以直接模擬運行JavaScript,
此時使用execute_script()方法即可實現
browser.execute_script('window.scrollTo(0, document.body.scrollHeight)')browser.execute_script('alert("123")')
動作鏈
實例中,一些交互動作都是針對某個節點執行的。比如,對於輸入框,我們就調用它的輸入文字和清空文字方法;
對於按鈕,就調用它的點擊方法。其實,還有另外一些操作,它們沒有特定的執行對象,比如鼠標拖曳、鍵盤按鍵等,
這些動作用另一種方式來執行,那就是動作鏈。
比如,現在實現一個節點的拖曳操作,將某個節點從一處拖曳到另外一處,可以這樣實現:
from selenium import webdriver from selenium.webdriver import ActionChains import time browser = webdriver.Chrome() url = 'http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable' browser.get(url) browser.switch_to.frame('iframeResult') source = browser.find_element_by_css_selector('#draggable') target = browser.find_element_by_css_selector('#droppable') actions = ActionChains(browser) # actions.drag_and_drop(source, target) actions.click_and_hold(source) time.sleep(3) for i in range(5): actions.move_by_offset(xoffset=17,yoffset=0).perform() time.sleep(0.5) actions.release()
