爬蟲筆記<關於鼠標點擊和內容輸入>


1. 采用google瀏覽器(試驗時有頭瀏覽器方便檢測,代碼完成后改為無頭瀏覽

注意: 需要提前安裝google的chrome.exe到python默認執行目錄。否則python.exe不知道從哪里調用chrome,會報錯。

from selenium import webdriver
## 1. 默認有頭瀏覽器
driver = webdriver.Chrome()
driver.get("http://sns.sseinfo.com")
# 2. 配置無頭瀏覽器
chrome_options = webdriver.chrome.options.Options();
chrome_options.add_argument('--headless')
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get("http://sns.sseinfo.com")

2. 模擬鼠標點擊

webserver 提供了鼠標操作的封裝類ActiionChains(包括單擊、雙擊、右擊、懸停、拖動等)。

ActionChains類提供的鼠標操作方法:

- perform( ):執行ActionChains中存儲的所有行為。(ActionChians類實例化為對象后,通過perform( )依次執行操作)

- click( ):單擊

- context_click( ) : 右擊

- double_click( ) : 雙擊

- drag_and_drop( source, target ) : 拖動 (從一個位置到另一個位置,可用於某種拖動型的驗證碼)

- move_to_element ( ) : 鼠標懸停。(有些網頁需要鼠標在特定位置懸停,才會顯示待選項,進而點擊進入下一個頁面。比如https://www.baidu.com/,右上角的設置按鈕,鼠標懸停才能出現備選項)

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains # 引入ActionChains類
# ----------------------- driver=webdriver.Chrome()## 啟動Chrome瀏覽器驅動 driver.get('https://www.baidu.com'); content_to_process=driver.find_element_by_link_text('新聞'); try: ActionChains(driver).click(content_to_process).perform( ) print 'success to click' except Exception as e: print 'fail'

其中的核心語句(尋找內容並點擊) 

ActionChains(driver).click(content_to_process).perform( )

可以分解為以下幾個步驟:

driver=webdriver.Chrome( );
driver.get('http://www.baidu.com') action
=ActionChains(driver)#步驟1:調用ActionChains()類,並將網頁作為參數傳入,實例化為具體的待操作對象 content_to_process=driver.find_element_by_link_text('新聞')#步驟2: 在網頁中,定位“新聞”的坐標;可輸出action,查看坐標內容和格式 action.click(content_to_process)#步驟3:傳入元素的定位坐標,模擬鼠標點擊 action.perform()#步驟4:執行ActionChains()中儲存的所有操作,即執行之前的一系列操作;如果沒有perform(),則只彈出百度網頁(執行到driver.get('www.baidu.com'),而后續核心的點擊操作不會執行。)

為什么要設置perform( )語句?方便執行??有點像pyplot的show ( )。 中間環節全部處理完,最后統一顯示/執行。

==》ActionChains的perform( ) 執行原理:當調用ActionChains的方法時,不會立即執行,而是會將所有的操作按順序存放在一個隊列里,當你調用perform()方法時,隊列中的事件會依次執行。

==》注意:webdriver本身也帶有click( )功能;如果只是單擊,可以直接這樣操作

driver=webdriver.Chrome( );
driver.get('http://www.baidu.com')
driver.find_element_by_link_text('新聞').click()
while 1:
    continue ##保留頁面顯示

參考:1. https://www.cnblogs.com/jasontang369/p/9212381.html(這篇博客示例有錯誤,錯誤很容易辨別。可作為參考)

      2. https://www.jb51.net/article/92682.htm

 

3. 定位坐標(無論鼠標單擊、雙擊、懸停、拖動,還是在搜索框輸入文字,都需要對操作的對象定位)

定位的實質是匹配(比如查找‘新聞’按鈕的位置,此處無須使用正則表達式)。定位方式主要包括根據網頁上的文字定位、根據網頁源代碼標簽定位。 

參考:1. https://www.cnblogs.com/kitty-zhou/p/5438273.html

    2. https://www.cnblogs.com/yoyoketang/p/6551274.html (好文章,自己嘗試下)

    3.https://www.cnblogs.com/yoyoketang/p/6557421.html

    4.http://www.cnblogs.com/yufeihlf/p/5717291.html (重要,可以詳細了解定位方法

      5.https://blog.csdn.net/a6864657/article/details/80616418(學一下xpath定位)

4. 搜索框輸入關鍵字並檢索(1. 定位;2. 輸入;3. 確認搜索(enter))

先看示例:

from selenium import webdriver
driver=webdriver.Chrome() # 啟動瀏覽器
driver.get('https://www.baidu.com');# 獲取百度頁面
driver.find_element_by_id('kw').clear()  ## 輸入框清空(在百度首頁,按F12,源碼中id=‘kw’唯一對應搜索框)
driver.find_element_by_id('kw').send_keys('selenium')# 輸入搜索內容,此處我們搜索‘selenium’
driver.find_element_by_id('su').click()#百度首頁的源碼中, id=‘su’唯一對應‘百度一下’搜索按鈕。

搜索框輸入文字,主要是在定位后(找到輸入框),利用send_keys()輸入。send_keys(string)除了輸入字符,還可以模擬鍵盤上的特定按鍵,實現一些特殊功能。鍵盤按鈕通過Key()類封裝到Keys:

- send_keys(Keys.BACK_SPACE): 刪除鍵(backspace)

- send_keys(Keys.SPACE) : 空格鍵(SPACE)

- send_keys( Keys.TAB) :制表位

-send_keys(Keys.ENTER): 回車鍵(Enter)

- send_keys(Keys.CONTROL,'a'): 全選(Ctrl+A);

- send_keys(Keys.CONTROL,'c'): 復制(Ctrl+C)

-send_keys(Keys.CONTROL,'v'): 粘貼(Ctrl+V);(ctrol+x 剪切同理)

- send_keys(Keys.F1) 鍵盤F1

- send_keys(Keys.UP) : 方向鍵(上下左右,分別為UP、DOWN、LEFT,RIGHT,均為大寫)

參考:https://www.cnblogs.com/c1116p1212/p/9482265.html  

from selenium import webdriver 
from selenium.webdriver.common.keys import Keys ## 引入Keys 模塊
# ---------------------
driver=webdriver.Chrome();
driver.get('http://www.baidu.com')
# 輸入框輸入內容
driver.find_element_by_id('kw').send_keys('seleniumm')## 詞尾多輸入了一個‘m’
driver.find_element_by_id('kw').send_keys(Keys.BACK_SPACE)# 重新定位,刪除多余的‘m’。
driver.find_element_by_id('kw').send_keys(Keys.SPACE)# 輸入空格
driver.find_element_by_id('kw').send_keys(u'教程')
driver.find_element_by_id('su').send_keys(Keys.ENTER)## 點擊確定,此處也可以用click()替代send_keys(Keys.ENTER);
# driver.quit()

 

5. 定位完成后,從網頁提取所需信息(此時瀏覽器網頁已經跳轉到我們所期望的頁面,有效信息都已經展示出來)

提取所需信息,可以通過兩種途徑。如下舉例,a標簽下的文本內容為你好,標簽內屬性有href,class,name,id。

<a href=xxx class=xxx name=xxx id=xxx > 
你好 
</a>

 

第一種方法:直接從源碼中提取,

- finde_element().text : 獲取標簽的文本值(<a>和</a>構成一組標簽,一開一閉。.text 獲取標簽之間的文本)

- find_element().get_attribute(): 獲取屬性值(即href,class,name,id的值)

第二種方法:采用BeatifulSoup等專門用來解析源碼的安裝包

- driver.page_source: 獲取當前網頁的所有源碼

-soup=BeautifulSoup(driver.page_source,features='lxml') : 轉化成BS對象,專門用來分析標簽(需要學習BeautifulSoup教程)


免責聲明!

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



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