Selenium爬取元素定位


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()方法即可實現

 

  1. browser.execute_script('window.scrollTo(0, document.body.scrollHeight)')
  2. 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()

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM