Python爬蟲怎么用Selenium模擬用戶操作

Python爬蟲怎么用Selenium模擬用戶操作?很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

創(chuàng)新互聯(lián)公司聯(lián)系熱線:18982081108,為您提供成都網(wǎng)站建設(shè)網(wǎng)頁(yè)設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù),創(chuàng)新互聯(lián)公司網(wǎng)頁(yè)制作領(lǐng)域10多年,包括崗?fù)?/a>等多個(gè)領(lǐng)域擁有多年建站經(jīng)驗(yàn),選擇創(chuàng)新互聯(lián)公司,為企業(yè)保駕護(hù)航!

Selenium是一個(gè)Web的自動(dòng)化測(cè)試工具,最初是為網(wǎng)站自動(dòng)化測(cè)試而開發(fā)的,類型像我們玩游戲用的按鍵精靈,可以按指定的命令自動(dòng)操作,不同是Selenium 可以直接運(yùn)行在瀏覽器上,它支持所有主流的瀏覽器(包括PhantomJS這些無(wú)界面的瀏覽器)。

Selenium 可以根據(jù)我們的指令,讓瀏覽器自動(dòng)加載頁(yè)面,獲取需要的數(shù)據(jù),甚至頁(yè)面截屏,或者判斷網(wǎng)站上某些動(dòng)作是否發(fā)生。

Selenium 自己不帶瀏覽器,不支持瀏覽器的功能,它需要與第三方瀏覽器結(jié)合在一起才能使用。

先下載selenium webdriver ‘geckodriver.exe’,下載好后放到python目錄里面;

firefox的目錄也要添加到環(huán)境變量中;

Selenium 庫(kù)里有個(gè)叫 WebDriver 的 API。WebDriver 有點(diǎn)兒像可以加載網(wǎng)站的瀏覽器,但是它也可以像 BeautifulSoup 或者其他 Selector 對(duì)象一樣用來(lái)查找頁(yè)面元素,與頁(yè)面上的元素進(jìn)行交互 (發(fā)送文本、點(diǎn)擊等),以及執(zhí)行其他動(dòng)作來(lái)運(yùn)行網(wǎng)絡(luò)爬蟲。

selenium快速入門

#!/usr/bin/env python
# -*- coding:utf-8 -*-
from selenium import webdriver
# 要想調(diào)用鍵盤按鍵操作需要引入keys包
from selenium.webdriver.common.keys import Keys
#創(chuàng)建瀏覽器對(duì)象
driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
#打印頁(yè)面標(biāo)題“百度一下你就知道”
print driver.title
#生成當(dāng)前頁(yè)面快照
driver.save_screenshot("baidu.png")
# id="kw"是百度搜索框,輸入字符串“微博”,跳轉(zhuǎn)到搜索中國(guó)頁(yè)面
driver.find_element_by_id("kw").send_keys(u"微博")
# id="su"是百度搜索按鈕,click() 是模擬點(diǎn)擊
driver.find_element_by_id("su").click()
# 獲取新的頁(yè)面快照
driver.save_screenshot(u"微博.png")
# 打印網(wǎng)頁(yè)渲染后的源代碼
print driver.page_source
# 獲取當(dāng)前頁(yè)面Cookie
print driver.get_cookies()
# ctrl+a 全選輸入框內(nèi)容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a')
# ctrl+x 剪切輸入框內(nèi)容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'x')
# 輸入框重新輸入內(nèi)容
driver.find_element_by_id("kw").send_keys("test")
# 模擬Enter回車鍵
driver.find_element_by_id("su").send_keys(Keys.RETURN)
# 清除輸入框內(nèi)容
driver.find_element_by_id("kw").clear()
# 生成新的頁(yè)面快照
driver.save_screenshot("test.png")
# 獲取當(dāng)前url
print driver.current_url
# 關(guān)閉當(dāng)前頁(yè)面,如果只有一個(gè)頁(yè)面,會(huì)關(guān)閉瀏覽器
# driver.close()
# 關(guān)閉瀏覽器
driver.quit()

1.頁(yè)面操作

假如有下面的輸入框

<input type="text" name="user-name" id="passwd-id" />

尋找方法

# 獲取id標(biāo)簽值
element = driver.find_element_by_id("passwd-id")
# 獲取name標(biāo)簽值
element = driver.find_element_by_name("user-name")
# 獲取標(biāo)簽名值
element = driver.find_elements_by_tag_name("input")
# 也可以通過(guò)XPath來(lái)匹配
element = driver.find_element_by_xpath("//input[@id='passwd-id']")

2.定位元素的方法

find_element_by_id
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

3.鼠標(biāo)動(dòng)作

#!/usr/bin/env python
# -*- coding:utf-8 -*-
from selenium import webdriver
# 要想調(diào)用鍵盤按鍵操作需要引入keys包
from selenium.webdriver.common.keys import Keys
from selenium.webdriver import ActionChains
#創(chuàng)建瀏覽器對(duì)象
driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
#鼠標(biāo)移動(dòng)到某處
action1 = driver.find_element_by_id("su")
ActionChains(driver).move_to_element(action1).perform()
#鼠標(biāo)移動(dòng)到某處單擊
action2 = driver.find_element_by_id("su")
ActionChains(driver).move_to_element(action2).click(action2).perform()
#鼠標(biāo)移動(dòng)到某處雙擊
action3 = driver.find_element_by_id("su")
ActionChains(driver).move_to_element(action3).double_click(action3).perform()
# 鼠標(biāo)移動(dòng)到某處右擊
action4 = driver.find_element_by_id("su")
ActionChains(driver).move_to_element(action4).context_click(action4).perform()

4.Select表單

遇到下來(lái)框需要選擇操作時(shí),Selenium專門提供了Select類來(lái)處理下拉框。

# 導(dǎo)入 Select 類
from selenium.webdriver.support.ui import Select
# 找到 name 的選項(xiàng)卡
select = Select(driver.find_element_by_name('status'))
# 
select.select_by_index(1)
select.select_by_value("0")
select.select_by_visible_text(u"xxx")

以上是三種選擇下拉框的方式,它可以根據(jù)索引來(lái)選擇,可以根據(jù)值來(lái)選擇,可以根據(jù)文字來(lái)選擇。注意:

1.index 索引從 0 開始。

2.value是option標(biāo)簽的一個(gè)屬性值,并不是顯示在下拉框中的值。

3.visible_text是在option標(biāo)簽文本的值,是顯示在下拉框的值。

全部取消方法

select.deselect_all()

5.彈窗處理

當(dāng)頁(yè)面出現(xiàn)了彈窗提示

alert = driver.switch_to_alert()

6.頁(yè)面切換

一個(gè)瀏覽器肯定會(huì)有很多窗口,所以我們肯定要有方法來(lái)實(shí)現(xiàn)窗口的切換。切換窗口的方法如下:

driver.switch_to.window("this is window name")

7.頁(yè)面前進(jìn)和后退

操作頁(yè)面的前進(jìn)和后退功能:

driver.forward()     #前進(jìn)
driver.back()        # 后退

實(shí)例 

模擬登陸douban網(wǎng)站

#!/usr/bin/env python
# -*- coding:utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
driver = webdriver.Firefox()
driver.get("http://www.douban.com")
# 輸入賬號(hào)密碼
driver.find_element_by_name("form_email").send_keys("158xxxxxxxx")
driver.find_element_by_name("form_password").send_keys("zhxxxxxxxx")
# 模擬點(diǎn)擊登錄
driver.find_element_by_xpath("//input[@class='bn-submit']").click()
# 等待3秒
time.sleep(3)
# 生成登陸后快照
driver.save_screenshot(u"douban.png")
driver.quit()

 動(dòng)態(tài)頁(yè)面模擬點(diǎn)擊--->>>爬取斗魚所有房間名,觀眾人數(shù)

(1)首先分析‘’下一頁(yè)‘’的class變化,如果不是最后一頁(yè)的時(shí)候,‘下一頁(yè)’的class如下:

Python爬蟲怎么用Selenium模擬用戶操作

(2)如果到了最后一頁(yè),‘下一頁(yè)’變?yōu)殡[藏,點(diǎn)擊不了,class變?yōu)槿缦拢?/p>

Python爬蟲怎么用Selenium模擬用戶操作

(3)找到個(gè)房間的名字和觀眾人數(shù)的class

Python爬蟲怎么用Selenium模擬用戶操作

(4)代碼

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import unittest
from selenium import webdriver
from bs4 import BeautifulSoup as bs
class douyu(unittest.TestCase):
    # 初始化方法,必須是setUp()
    def setUp(self):
        self.driver = webdriver.Firefox()
        self.num = 0
        self.count = 0
    # 測(cè)試方法必須有test字樣開頭
    def testDouyu(self):
        self.driver.get("https://www.douyu.com/directory/all")
        while True:
            soup = bs(self.driver.page_source, "lxml")
            # 房間名, 返回列表
            names = soup.find_all("h4", {"class" : "ellipsis"})
            # 觀眾人數(shù), 返回列表
            numbers = soup.find_all("span", {"class" :"dy-num fr"})
            # zip(names, numbers) 將name和number這兩個(gè)列表合并為一個(gè)元組 : [(1, 2), (3, 4)...]
            for name, number in zip(names, numbers):
                print u"觀眾人數(shù): -" + number.get_text().strip() + u"-\t房間名: " + name.get_text().strip()
                self.num += 1
                #self.count += int(number.get_text().strip())
            # 如果在頁(yè)面源碼里找到"下一頁(yè)"為隱藏的標(biāo)簽,就退出循環(huán)
            if self.driver.page_source.find("shark-pager-disable-next") != -1:
                    break
            # 一直點(diǎn)擊下一頁(yè)
            self.driver.find_element_by_class_name("shark-pager-next").click()
    # 測(cè)試結(jié)束執(zhí)行的方法
    def tearDown(self):
        # 退出Firefox()瀏覽器
        print "當(dāng)前網(wǎng)站直播人數(shù)" + str(self.num)
        print "當(dāng)前網(wǎng)站觀眾人數(shù)" + str(self.count)
        self.driver.quit()
if __name__ == "__main__":
    # 啟動(dòng)測(cè)試模塊
    unittest.main()

爬取的結(jié)果:

Python爬蟲怎么用Selenium模擬用戶操作

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。

網(wǎng)站名稱:Python爬蟲怎么用Selenium模擬用戶操作
文章分享:http://muchs.cn/article6/pjjgog.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、網(wǎng)站策劃、域名注冊(cè)、軟件開發(fā)、網(wǎng)站建設(shè)、云服務(wù)器

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)