中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python爬蟲之selenium模塊如何使用

發布時間:2023-05-18 15:55:27 來源:億速云 閱讀:154 作者:iii 欄目:編程語言

本文小編為大家詳細介紹“python爬蟲之selenium模塊如何使用”,內容詳細,步驟清晰,細節處理妥當,希望這篇“python爬蟲之selenium模塊如何使用”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

    一、什么是Selenium

    selenium 是一套完整的web應用程序測試系統,包含了測試的錄制(selenium IDE),編寫及運行(Selenium Remote Control)和測試的并行處理(Selenium Grid)。Selenium的核心Selenium Core基于JsUnit,完全由JavaScript編寫,因此可以用于任何支持JavaScript的瀏覽器上。

    selenium可以模擬真實瀏覽器,自動化測試工具,支持多種瀏覽器,爬蟲中主要用來解決JavaScript渲染問題。

    二、selenium安裝

    用python寫爬蟲的時候,主要用的是selenium的Webdriver,我們可以通過下面的方式先看看Selenium.Webdriver支持哪些瀏覽器

    from selenium import webdrive
    help(webdriver)

    執行結果如下,從結果中我們也可以看出基本山支持了常見的所有瀏覽器:

    NAME: selenium.webdriver

    PACKAGE CONTENTS:

    • android (package)

    • blackberry (package)

    • chrome (package)

    • common (package)

    • edge (package)

    • firefox (package)

    • ie (package)

    • opera (package)

    • phantomjs (package)

    • remote (package)

    • safari (package)

    • support (package)

    • webkitgtk (package)

    VERSION: 3.14.1

    1、PhantomJS: 無可視化界面的瀏覽器(無頭瀏覽器)

    PhantomJS是一個而基于WebKit的服務端JavaScript API,支持Web而不需要瀏覽器支持,其快速、原生支持各種Web標準:Dom處理,CSS選擇器,JSON等等。

    PhantomJS可以用用于頁面自動化、網絡監測、網頁截屏,以及無界面測試。

    2、下載瀏覽器驅動

    當selenium升級到3.0之后,對不同的瀏覽器驅動進行了規范。如果想使用selenium驅動不同的瀏覽器,必須單獨下載并設置不同的瀏覽器驅動。

    各瀏覽器下載地址:

    • Firefox瀏覽器驅動:geckodriver

    • Chrome瀏覽器驅動:chromedriver , taobao備用地址

    • IE瀏覽器驅動:IEDriverServer

    • Edge瀏覽器驅動:MicrosoftWebDriver

    :webdriver需要和對應的瀏覽器版本以及selenium版本對應。

    查看驅動和瀏覽器版本的映射關系:

    按照chrome版本對應的driver,直接按照瀏覽器版本去找對應的driver(只對應大版本就行)

    python爬蟲之selenium模塊如何使用

    python爬蟲之selenium模塊如何使用

    下載之后,解壓到任意目錄(路徑不要有中文)。

    瀏覽器驅動文件,(win環境下載解壓后得到的.exe文件)需要放到與python.exe同級目錄中方能使用。或者配置電腦環境變量

    可以手動創建一個存放瀏覽器驅動的目錄,如: C:\driver , 將下載的瀏覽器驅動文件(例如:chromedriver、geckodriver)丟到該目錄下。

    我的電腦-->屬性-->系統設置-->高級-->環境變量-->系統變量-->Path,將“C:\driver”目錄添加到Path的值中。

    三、selenium基本使用

    1、聲明瀏覽器對象

    上面我們知道了selenium支持很多的瀏覽器,但是如果想要聲明并調用瀏覽器則需要:

    這里只寫了兩個例子,當然了其他的支持的瀏覽器都可以通過這種方式調用

    from selenium import webdriver
    
    browser = webdriver.Chrome()
    # browser = webdriver.Firefox()
    Headless方式啟動

    Headless Chrome 是 Chrome 瀏覽器的無界面形態,可以在不打開瀏覽器的前提下,使用所有 Chrome 支持的特性運行你的程序。相比于現代瀏覽器,Headless Chrome 更加方便測試 web 應用,獲得網站的截圖,做爬蟲抓取信息等。相比于較早的 PhantomJS,SlimerJS 等,Headless Chrome 則更加貼近瀏覽器環境。

    Headless Chrome 對Chrome版本要求:官方文檔中介紹,mac和linux環境要求chrome版本是59+,而windows版本的chrome要求是60+,同時chromedriver要求2.30+版本。

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.action_chains import ActionChains
    from selenium.webdriver.common.keys import Keys
    
    chrome_options = webdriver.ChromeOptions()
    # 使用headless無界面瀏覽器模式
    chrome_options.add_argument('--headless') //增加無界面選項
    chrome_options.add_argument('--disable-gpu') //如果不加這個選項,有時定位會出現問題
    # 啟動瀏覽器,獲取網頁源代碼
    browser = webdriver.Chrome(chrome_options=chrome_options)
    mainUrl = "https://www.taobao.com/"
    browser.get(mainUrl)
    print(f"browser text = {browser.page_source}")
    browser.quit()
    2、訪問頁面

    下面代碼運行后,會自動打開Chrome瀏覽器,并登陸百度打印百度首頁的源代碼,然后關閉瀏覽器

    from selenium import webdriver
    
    browser = webdriver.Chrome()
    
    browser.get("http://www.baidu.com")
    print(browser.page_source)
    browser.close()
    3、查找元素
    1、單個元素查找
    browser.get(<a href="http://www.taobao.com/" rel="external nofollow"  rel="external nofollow"   target="_blank">http://www.taobao.com</a>)
    input_first = browser.find_element_by_id("q")
    input_second = browser.find_element_by_css_selector("#q")
    input_third = browser.find_element_by_xpath('//*[@id="q"]')
    print(input_first)
    print(input_second)
    print(input_third)
    browser.close()

    這里我們通過三種不同的方式去獲取響應的元素,第一種是通過id的方式,第二個中是CSS選擇器,第三種是xpath選擇器,結果都是相同的。
    結果如下:

    python爬蟲之selenium模塊如何使用

    常用的查找元素方法:

    • find_element_by_name:通過元素name定位

    • find_element_by_id:通過元素id定位

    • 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選擇器進行定位

    舉例:

    通過xpath定位,xpath定位有N種寫法,這里列幾個常用寫法:

    dr.find_element_by_xpath("//*[@id='kw']")
    dr.find_element_by_xpath("//*[@name='wd']")
    dr.find_element_by_xpath("//input[@class='s_ipt']")
    dr.find_element_by_xpath("/html/body/form/span/input")
    dr.find_element_by_xpath("//span[@class='soutu-btn']/input")
    dr.find_element_by_xpath("//form[@id='form']/span/input")
    dr.find_element_by_xpath("//input[@id='kw' and @name='wd']")

    通過css定位,css定位有N種寫法,這里列幾個常用寫法:

    dr.find_element_by_css_selector("#kw")
    dr.find_element_by_css_selector("[name=wd]")
    dr.find_element_by_css_selector(".s_ipt")
    dr.find_element_by_css_selector("html > body > form > span > input")
    dr.find_element_by_css_selector("span.soutu-btn> input#kw")
    dr.find_element_by_css_selector("form#form > span > input")

    xpath的使用方法

    1. 第一種方法:通過絕對路徑做定位(相信大家不會使用這種方式)

    By.xpath(“html/body/div/form/input”)

    2. 第二種方法:通過相對路徑做定位,兩個斜杠代表相對路徑

    By.xpath(“//input//div”)

    3. 第三種方法:通過元素索引定位

    By.xpath(“//input[4]”)

    4. 第四種方法:使用xpath+節點屬性定位(結合第2、第3中方法可以使用)

    By.xpath(“//input[@id='kw1']”)
    By.xpath(“//input[@type='name' and @name='kw1']”)

    5. 第五種方法:使用部分屬性值匹配(最強大的方法)

    By.xpath(“//input[start-with(@id,'nice')]”)
    By.xpath(“//input[ends-with(@id,'很漂亮')]”)
    By.xpath(“//input[contains(@id,'那么美')]”)

    6. 第六種方法:使用前集中方法的組合

    By.xpath(“//input[@id='kw1']//input[start-with(@id,'nice']/div[1]/form[3])

    下面這種方式是比較通用的一種方式:這里需要記住By模塊所以需要導入。

    from selenium import webdriver
    
    from selenium.webdriver.common.by import By
    
    browser = webdriver.Chrome()
    
    browser.get("http://www.taobao.com")
    input_first = browser.find_element(By.ID,"q")
    print(input_first)
    browser.close()

    當然這種方法和上述的方式是通用的,browser.find_element(By.ID,"q")這里By.ID中的ID可以替換為其他幾個

    2、多個元素查找

    多個元素find_elements,單個元素是find_element,其他使用上沒什么區別,通過其中的一個例子演示:

    browser.get(<a href="http://www.taobao.com/" rel="external nofollow"  rel="external nofollow"   target="_blank">http://www.taobao.com</a>)
    lis = browser.find_elements_by_css_selector('.service-bd li')
    print(lis)
    browser.close()

    這樣獲得就是一個列表

    python爬蟲之selenium模塊如何使用

    當然上面的方式也是可以通過導入from selenium.webdriver.common.by import By 這種方式實現

    lis = browser.find_elements(By.CSS_SELECTOR,'.service-bd li')

    同樣的在單個元素中查找的方法在多個元素查找中同樣存在:

    • find_elements_by_name

    • find_elements_by_id

    • 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

    4、元素交互操作

    一般來說,webdriver 中比較常用的操作對象的方法有下面幾個:

    • click&mdash;&mdash;點擊對象

    • send_keys&mdash;&mdash;在對象上模擬按鍵輸入

    • clear&mdash;&mdash;清除對象的內容,如果可以的話

    • submit&mdash;&mdash;提交對象的內容,如果可以的話

    • text&mdash;&mdash;用于獲取元素的文本信息

    1、鍵盤事件

    要想調用鍵盤按鍵操作需要引入 keys 包:

    from selenium.webdriver.common.keys import Keys

    通過 send_keys()調用按鍵:

    send_keys(Keys.TAB) # TAB
    send_keys(Keys.ENTER) # 回車
    send_keys(Keys.CONTROL,'a') # ctrl+a 全選輸入框內容 
    send_keys(Keys.CONTROL,'x') # ctrl+x 剪切輸入框內容
    import time
    
    browser.get(http://www.taobao.com)
    input_str = browser.find_element_by_id('q')
    input_str.send_keys("ipad")
    time.sleep(1)
    input_str.clear()
    input_str.send_keys("MakBook pro")
    button = browser.find_element_by_class_name('btn-search')
    button.click()

    運行的結果可以看出程序會自動打開Chrome瀏覽器并打開淘寶輸入ipad,然后刪除,重新輸入MakBook pro,并點擊搜索。

    2、鼠標事件

    鼠標事件一般包括鼠標右鍵、雙擊、拖動、移動鼠標到某個元素上等等。需要引入ActionChains類。引入方法:

    from selenium.webdriver.common.action_chains import ActionChains

    ActionChains 常用方法:

    • context_click() :右擊;

    • double_click() :雙擊;

    • drag_and_drop(): 拖動;

    • move_to_element() :鼠標懸停。

    • perform(): 執行所有ActionChains 中存儲的行為;

    鼠標雙擊示例:

    qqq =driver.find_element_by_xpath("xxx")  #定位到要雙擊的元素
    ActionChains(driver).double_click(qqq).perform() #對定位到的元素執行鼠標雙擊操作

    鼠標拖放示例:

    from selenium.webdriver import ActionChains
    
    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.perform()

    更多操作參考:

    http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.common.action_chains

    5、執行JavaScript

    這是一個非常有用的方法,這里就可以直接調用js方法來實現一些操作,下面的例子是通過登錄知乎然后通過js翻到頁面底部,并彈框提示

    browser.get(<a href="http://www.zhihu.com/explore" rel="external nofollow"   target="_blank">http://www.zhihu.com/explore</a>)
    browser.execute_script('window.scrollTo(0, document.body.scrollHeight)')
    browser.execute_script('alert("To Bottom")')
    6、獲取DOM
    1、獲取元素屬性:get_attribute('class')
    url = 'https://www.zhihu.com/explore'
    browser.get(url)
    logo = browser.find_element_by_id('zh-top-link-logo')
    print(logo)
    print(logo.get_attribute('class'))
    2、獲取文本值:text
    url = 'https://www.zhihu.com/explore'
    browser.get(url)
    input = browser.find_element_by_class_name('zu-top-add-question')
    print(input.text)
    3、獲取ID,位置,標簽名
    • id

    • location

    • tag_name

    • size

    url = 'https://www.zhihu.com/explore'
    browser.get(url)
    input = browser.find_element_by_class_name('zu-top-add-question')
    print(input.id)
    print(input.location)
    print(input.tag_name)
    print(input.size)
    7、Frame

    在很多網頁中都是有Frame標簽,所以我們爬取數據的時候就涉及到切入到frame中以及切出來的問題,通過下面的例子演示

    這里常用的是switch_to.from()和switch_to.parent_frame()

    import time
    from selenium import webdriver
    from selenium.common.exceptions import NoSuchElementException
    
    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')
    print(source)
    
    try:
        logo = browser.find_element_by_class_name('logo')
    except NoSuchElementException:
        print('NO LOGO')
    browser.switch_to.parent_frame()
    logo = browser.find_element_by_class_name('logo')
    print(logo)
    print(logo.text)
    8、等待
    1、隱式等待

    當使用了隱式等待執行測試的時候,如果 WebDriver沒有在 DOM中找到元素,將繼續等待,超出設定時間后則拋出找不到元素的異常。

    換句話說,當查找元素或元素并沒有立即出現的時候,隱式等待將等待一段時間再查找 DOM,默認的時間是0

    到了一定的時間發現元素還沒有加載,則繼續等待我們指定的時間,如果超過了我們指定的時間還沒有加載就會拋出異常,如果沒有需要等待的時候就已經加載完畢就會立即執行

    browser.implicitly_wait(10)
    browser.get('https://www.zhihu.com/explore')
    input = browser.find_element_by_class_name('zu-top-add-question')
    print(input)
    2、顯示等待

    指定一個等待條件,并且指定一個最長等待時間,會在這個時間內進行判斷是否滿足等待條件。

    如果成立就會立即返回,如果不成立,就會一直等待,直到等待你指定的最長等待時間,如果還是不滿足,就會拋出異常,如果滿足了就會正常返回。

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    browser = webdriver.Chrome()
    browser.get('https://www.taobao.com/')
    wait = WebDriverWait(browser, 10)
    input = wait.until(EC.presence_of_element_located((By.ID, 'q')))
    button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.btn-search')))
    print(input, button)

    上述的例子中的條件:EC.presence_of_element_located()是確認元素是否已經出現了。EC.element_to_be_clickable()是確認元素是否是可點擊的

    3、常用的判斷條件:
    • title_is :標題是某內容

    • title_contains :標題包含某內容

    • presence_of_element_located :元素加載出,傳入定位元組,如(By.ID, 'p')

    • visibility_of_element_located :元素可見,傳入定位元組

    • visibility_of :可見,傳入元素對象

    • presence_of_all_elements_located :所有元素加載出

    • text_to_be_present_in_element :某個元素文本包含某文字

    • text_to_be_present_in_element_value :某個元素值包含某文字

    • frame_to_be_available_and_switch_to_it :frame加載并切換

    • invisibility_of_element_located :元素不可見

    • element_to_be_clickable :元素可點擊

    • staleness_of :判斷一個元素是否仍在DOM,可判斷頁面是否已經刷新

    • element_to_be_selected :元素可選擇,傳元素對象

    • element_located_to_be_selected :元素可選擇,傳入定位元組

    • element_selection_state_to_be :傳入元素對象以及狀態,相等返回True,否則返回False

    • element_located_selection_state_to_be :傳入定位元組以及狀態,相等返回True,否則返回False

    • alert_is_present :是否出現Alert

    實例:博客園標題判斷

    # coding: utf-8
    from selenium import webdriver
    from selenium.webdriver.support import expected_conditions as EC
    driver = webdriver.Firefox()
    driver.get("http://www.cnblogs.com/101718qiong/")
    
    title = EC.title_is(u"Silence&QH - 博客園") # 判斷title完全等于
    print title(driver)
     
    title1 = EC.title_contains("Silence&QH") # 判斷title包含
    print title1(driver)
    
    r1 = EC.title_is(u"Silence&QH - 博客園")(driver) # 另外寫法
    r2 = EC.title_contains("Silence&QH")(driver)
    print r1
    print r2

    更多操作參考:

    http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.support.expected_conditions

    9、瀏覽器瀏覽器操作

    瀏覽器最大化、最小化

    browser.maximize_window() # 將瀏覽器最大化顯示
    browser.minimize_window() # 將瀏覽器最小化顯示

    瀏覽器設置窗口大小

    browser.set_window_size(480, 800) # 設置瀏覽器寬480、高800顯示

    瀏覽器前進后退

    • back() :后退

    • forward():前進

    import time
    from selenium import webdriver
    
    browser = webdriver.Chrome()
    browser.get('https://www.baidu.com/')
    browser.get('https://www.taobao.com/')
    browser.get('https://www.python.org/')
    browser.back()
    time.sleep(1)
    browser.forward()
    browser.close()
    10、cookie操作
    • get_cookies()

    • delete_all_cookes()

    • add_cookie()

    browser.get('https://www.zhihu.com/explore')
    print(browser.get_cookies())
    browser.add_cookie({'name': 'name', 'domain': 'www.zhihu.com', 'value': 'zhaofan'})
    print(browser.get_cookies())
    browser.delete_all_cookies()
    print(browser.get_cookies())
    11、多窗口管理

    通過執行js命令實現新開選項卡window.open(),不同的選項卡是存在列表里browser.window_handles。

    通過browser.window_handles[0]就可以操作第一個選項卡,current_window_handle:獲得當前窗口句柄

    import time
    
    browser.get('https://www.baidu.com')
    browser.execute_script('window.open()')
    print(browser.window_handles)
    browser.switch_to.window(browser.window_handles[1])
    browser.get('https://www.taobao.com')
    time.sleep(1)
    browser.switch_to.window(browser.window_handles[0])
    browser.get('https://python.org')
    12、異常處理

    這里的異常比較復雜,官網的參考地址:

    http://selenium-python.readthedocs.io/api.html#module-selenium.common.exceptions

    這里只進行簡單的演示,查找一個不存在的元素

    from selenium import webdriver
    from selenium.common.exceptions import TimeoutException, NoSuchElementException
    
    browser = webdriver.Chrome()
    try:
        browser.get('https://www.baidu.com')
    except TimeoutException:
        print('Time Out')
    try:
        browser.find_element_by_id('hello')
    except NoSuchElementException:
        print('No Element')
    finally:
        browser.close()
    13.警告框處理

    在WebDriver中處理JavaScript所生成的alert、confirm以及prompt十分簡單,具體做法是使用 switch_to.alert 方法定位到 alert/confirm/prompt,然后使用text/accept/dismiss/ send_keys等方法進行操作。

    方法

    • text : 返回 alert/confirm/prompt 中的文字信息

    • accept() : 接受現有警告框

    • dismiss() : 解散現有警告框

    • send_keys(keysToSend) : 發送文本至警告框。keysToSend:將文本發送至警告框。

    實例演示

    from selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains
    import time
    
    driver = webdriver.Chrome("F:\Chrome\ChromeDriver\chromedriver")
    driver.implicitly_wait(10)
    driver.get('http://www.baidu.com')
    
    # 鼠標懸停至“設置”鏈接
    link = driver.find_element_by_link_text('設置')
    ActionChains(driver).move_to_element(link).perform()
    
    # 打開搜索設置
    driver.find_element_by_link_text("搜索設置").click()
    
    #在此處設置等待2s否則可能報錯
    time.sleep(2)
     # 保存設置
    driver.find_element_by_class_name("prefpanelgo").click()
     time.sleep(2)
    
    # 接受警告框
    driver.switch_to.alert.accept()
    
    driver.quit()
    14、下拉框選擇操作

    導入選擇下拉框Select類,使用該類處理下拉框操作。

    from selenium.webdriver.support.select import Select

    Select類的方法:

    • select_by_value(“選擇值”) select標簽的value屬性的值

    • select_by_index(“索引值”) 下拉框的索引

    • select_by_visible_testx(“文本值”) 下拉框的文本值

    有時我們會碰到下拉框,WebDriver提供了Select類來處理下拉框。 如百度搜索設置的下拉框。

    from selenium import webdriver
     from selenium.webdriver.support.select import Select
     from time import sleep
    
    driver = webdriver.Chrome("F:\Chrome\ChromeDriver\chromedriver")
     driver.implicitly_wait(10)
     driver.get('http://www.baidu.com')
    
    #1.鼠標懸停至“設置”鏈接
    driver.find_element_by_link_text('設置').click()
     sleep(1)
     #2.打開搜索設置
    driver.find_element_by_link_text("搜索設置").click()
     sleep(2)
    
    #3.搜索結果顯示條數
    sel = driver.find_element_by_xpath("//select[@id='nr']")
     Select(sel).select_by_value('50')  # 顯示50條
    
    sleep(3)
     driver.quit()
    15、文件上傳

    對于通過input標簽實現的上傳功能,可以將其看作是一個輸入框,即通過send_keys()指定本地文件路徑的方式實現文件上傳。

    通過send_keys()方法來實現文件上傳:

    from selenium import webdriver
    import os
    
    driver = webdriver.Firefox()
    file_path = 'file:///' + os.path.abspath('upfile.html')
    driver.get(file_path)
    
    # 定位上傳按鈕,添加本地文件
    driver.find_element_by_name("file").send_keys('D:\\upload_file.txt')
    
    driver.quit()
    16、窗口截圖

    自動化用例是由程序去執行的,因此有時候打印的錯誤信息并不十分明確。如果在腳本執行出錯的時候能對當前窗口截圖保存,那么通過圖片就可以非常直觀地看出出錯的原因。WebDriver提供了截圖函數get_screenshot_as_file()來截取當前窗口。

    截屏方法:

    get_screenshot_as_file(self, filename) 用于截取當前窗口,并把圖片保存到本地

    from selenium import webdriver
    from time import sleep
    
    driver =webdriver.Firefox(executable_path ="F:\GeckoDriver\geckodriver")
    driver.get('http://www.baidu.com')
    
    driver.find_element_by_id('kw').send_keys('selenium')
     driver.find_element_by_id('su').click()
     sleep(2)
    
    #1.截取當前窗口,并指定截圖圖片的保存位置
    driver.get_screenshot_as_file("D:\\baidu_img.jpg")
    
    driver.quit()
    17、關閉瀏覽器

    在前面的例子中我們一直使用quit()方法,其含義為退出相關的驅動程序和關閉所有窗口。除此之外,WebDriver還提供了close()方法,用來關閉當前窗口。例多窗口的處理,在用例執行的過程中打開了多個窗口,我們想要關閉其中的某個窗口,這時就要用到close()方法進行關閉了。

    • close() 關閉單個窗口

    • quit() 關閉所有窗口

    18、selenium規避被檢測識別

    現在不少大網站有對selenium采取了監測機制。比如正常情況下我們用瀏覽器訪問淘寶等網站的 window.navigator.webdriver的值為
    undefined。而使用selenium訪問則該值為true。那么如何解決這個問題呢?

    只需要設置Chromedriver的啟動參數即可解決問題。在啟動Chromedriver之前,為Chrome開啟實驗性功能參數excludeSwitches,它的值為['enable-automation'],完整代碼如下:

    from selenium.webdriver import Chrome
    from selenium.webdriver import ChromeOptions
    
    option = ChromeOptions()
    option.add_experimental_option('excludeSwitches', ['enable-automation'])
    driver = Chrome(options=option)
    19、實例:

    自動登陸CSDN

    import time
    import numpy as np
    from numpy import random
    from selenium import webdriver
    from selenium.webdriver import ActionChains
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    
    def ease_out_expo(x):
        if x == 1:
            return 1
        else:
            return 1 - pow(2, -10 * x)
    
    
    def get_tracks(distance, seconds, ease_func):
        tracks = [0]
        offsets = [0]
        for t in np.arange(0.0, seconds+0.1, 0.1):
            ease = globals()[ease_func]
            offset = round(ease(t / seconds) * distance)
            tracks.append(offset - offsets[-1])
            offsets.append(offset)
        return offsets, tracks
    
    
    def drag_and_drop(browser, offset):
        # 定位滑塊元素
        WebDriverWait(browser, 20).until(
            EC.visibility_of_element_located((By.XPATH, "//*[@class='nc_iconfont btn_slide']"))
        )
        knob = browser.find_element_by_xpath("//*[@class='nc_iconfont btn_slide']")
        offsets, tracks = get_tracks(offset, 0.2, 'ease_out_expo')
        ActionChains(browser).click_and_hold(knob).perform()
        for x in tracks:
            ActionChains(browser).move_by_offset(x, 0).perform()
        # 放開
        ActionChains(browser).pause(random.randint(6, 14) / 10).release().perform()
    
    
    chrome_options = webdriver.ChromeOptions()
    chrome_options.add_argument("--start-maximized")
    browser = webdriver.Chrome(chrome_options=chrome_options)
    
    browser.get('http://www.baidu.com')
    browser.find_element_by_id('kw').send_keys('CSDN')
    browser.find_element_by_id('su').click()
    WebDriverWait(browser, 20).until(
        EC.visibility_of_element_located((By.PARTIAL_LINK_TEXT, "-專業IT技術社區"))
    )
    
    browser.find_element_by_partial_link_text('-專業IT技術社區').click()
    
    browser.switch_to.window(browser.window_handles[1])  # 移動句柄
    time.sleep(1)
    browser.find_element_by_partial_link_text('登錄').click()
    browser.find_element_by_link_text('賬號密碼登錄').click()
    browser.find_element_by_id('all').send_keys('yangbobin')
    browser.find_element_by_name('pwd').send_keys('pass-word')
    browser.find_element_by_css_selector("button[data-type='account']").click()
    time.sleep(5)  # 等待滑動模塊和其他JS文件加載完畢!
    while True:
        # 定義鼠標拖放動作
        drag_and_drop(browser, 261)
        # 等待JS認證運行,如果不等待容易報錯
        time.sleep(2)
        # 查看是否認證成功,獲取text值
        WebDriverWait(browser, 20).until(
            EC.visibility_of_element_located((By.LINK_TEXT, "刷新"))
        )
        browser.find_element_by_link_text('刷新').click()

    自動登陸163郵箱

    首先,是163.的登陸為iframe

    browser.switch_to_frame('x-URS-iframe')

    讀到這里,這篇“python爬蟲之selenium模塊如何使用”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    吉木萨尔县| 镇沅| 沁水县| 阳信县| 宁化县| 甘孜县| 荥经县| 濉溪县| 新和县| 密山市| 汝城县| 天津市| 宿松县| 正阳县| 乌什县| 库车县| 河北区| 云林县| 北川| 彰化县| 青铜峡市| 右玉县| 察隅县| 林芝县| 增城市| 赣榆县| 建德市| 咸阳市| 三门县| 泾川县| 含山县| 甘孜| 桃江县| 高碑店市| 合作市| 平原县| 阜康市| 土默特右旗| 崇州市| 灵武市| 平顺县|