1. 程式人生 > >selenium js 程式碼模擬百度

selenium js 程式碼模擬百度

selenium   js 程式碼模擬百度,獲取輸入的值

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

web = webdriver.Ie(r"C:\Program Files\internet explorer\IEDriverServer2.exe")  #設定驅動程式路徑
# web = webdriver.Chrome()  #設定驅動程式路徑
web.get("https://www.baidu.com")  # 開啟百度
# web.execute_script("window.alert('Selenium執行完畢')")  # 呼叫js的Window物件列印一句話"Selenium 執行完畢"
web.find_element_by_id("kw").send_keys("Hello")  # 然後我們讓selenium在百度的input標籤內輸入1個字串(id為kw) 找到id位kw的元素,然後傳送資料
retu = web.execute_script("document.getElementById('kw').value;")
print(retu)  # 獲取的值為 None  因為我們要用一個彈框來接收這個值
# 即我們用一個變數接收document.getElementById('kw').value資訊,然後再通過彈對話方塊方式看看是否成功獲取。
# 可見js程式碼是沒問題的,問題就出在我們用execute_script執行js程式碼的時候,怎麼把資料返回。

# retu = web.execute_script("a = document.getElementById('kw').value;window.alert(a)")
# print(retu)

# 既然是函式形式,我們只需要在js內加入return語句,返回我們想要的結果即可。
# 獲取輸入的值   這個才是最終的版本
retu = web.execute_script("return document.getElementById('kw').value;")
print(retu)

參考連結: https://jingyan.baidu.com/article/020278112c5f421bcd9ce57d.html

這裡面講的相當詳細,對於入門級別的來說,很實用

玩轉selenium 教你怎麼讓selenium執行js程式碼

 

  •  

相信很多小夥伴在使用selenium驅動瀏覽器的時候都會遇到這樣的問題:相容性,例如我們使用selenium驅動IE開啟某個網站的時候,我們想要點選按鈕,此時卻發現我們用click()方法是無效的,這時我們用send_keys(Keys.SPACE)或者send_keys(Keys.ENTER)卻正常運行了,當我們遇到這樣的情況,一旦更換了瀏覽器,可能就失效了。

就是因為這樣的問題,其實還有第三種解決方案,不用click()或者send_keys()傳送按鍵,那就是呼叫JavaScript的程式碼,直接呼叫按鈕被點選後呼叫的js函式。

下面小編就教大家怎麼用selenium執行js程式碼。

4玩轉selenium 不會安裝selenium怎麼辦(Python)

玩轉selenium 教你怎麼讓selenium執行js程式碼

工具/原料

  • python3 for windows

  • selenium

方法/步驟

  1. 開始之前,我們必須要安裝有selenium,不會裝的請看引用經驗,謝謝。

    開啟cmd命令提示符,pip show selenium

    可見小編這裡是selenium3.13,沒錯,我們這裡就是以selenium3為例

    玩轉selenium 教你怎麼讓selenium執行js程式碼

  2. 我們所有程式碼以驅動IE瀏覽器為例,在此之前,請自行準備好IE瀏覽器驅動。沒有的小夥伴可以在經驗最下方給小編投票,留下郵箱,小編第一時間會給小夥伴發過去。

    小編手裡的是IEDriverServer 3.6.0.0 在IE8可完美執行

    32位和64位的都有

    OK,這裡我們開始寫程式碼

    #-*- conding:utf8 -*-

    from selenium import webdriver

    #匯入selenium中的webdriver

    web = webdriver.Ie(".\IEDriverServer.exe")

    #設定驅動程式路徑

    web.get("https://www.baidu.com")

    #開啟百度

    如圖

    玩轉selenium 教你怎麼讓selenium執行js程式碼

  3. 此時我們可以呼叫js的一段程式碼,例如就呼叫js的Window物件列印一句話"Selenium 執行完畢"

    我們要用到的是Selenium庫webdriver物件提供的execute_script方法

    程式碼如圖

    web.execute_script("window.alert('Selenium執行完畢')")

    玩轉selenium 教你怎麼讓selenium執行js程式碼

  4. 執行程式碼,可以看到驅動器執行之後,打開了百度頁面。

    然後呼叫讓js呼叫了window物件的alert方法,探出了一個對話方塊。如圖

    玩轉selenium 教你怎麼讓selenium執行js程式碼

  5. 此時我們可以讓可以讓js去做一些事情,例如讓js去獲取某個頁面元素的資訊。然後再通過selenium返回給python

    這裡,我們就讓selenium輸入一些資訊,然後我們通過js去獲取這個資訊。

    這之前,我們還需要匯入Selenium的一個模組。

    即Keys模組

    from selenium.webdriver.common.keys import Keys 

    #然後我們讓selenium在百度的input標籤內輸入1個字串(id為kw)

    web.find_element_by_id("kw").send_keys("Hello")

    #找到id位kw的元素,然後傳送資料

    玩轉selenium 教你怎麼讓selenium執行js程式碼

  6. 最後,我們通過js獲得該元素的value值。

    js程式碼:

    document.getElementById('kw').value;

     

    我們用一個retu變數獲取execute_script的返回值。

    retu = web.execute_script("document.getElementById('kw').value;")

    print(retu)

    然後用print打印出

    如圖

    玩轉selenium 教你怎麼讓selenium執行js程式碼

  7. 執行結果卻是retu為None,即說明沒有返回值

    這到底是怎麼回事呢?

    其實我們可以把js程式碼修改下,確定js程式碼獲取到了id為kw元素的屬性值。

    程式碼修改如下。

    retu = web.execute_script("a = document.getElementById('kw').value;window.alert(a)")

    print(retu)

     

    即我們用一個變數接收document.getElementById('kw').value資訊,然後再通過彈對話方塊方式看看是否成功獲取。

    可見js程式碼是沒問題的,問題就出在我們用execute_script執行js程式碼的時候,怎麼把資料返回。

    玩轉selenium 教你怎麼讓selenium執行js程式碼

    玩轉selenium 教你怎麼讓selenium執行js程式碼

    玩轉selenium 教你怎麼讓selenium執行js程式碼

  8. 事實上,selenium並不是直接把程式碼嵌入到html檔案中,而是以函式的方式。

    這樣就好辦了。

    既然是函式形式,我們只需要在js內加入return語句,返回我們想要的結果即可。

    retu = web.execute_script("return document.getElementById('kw').value;")

    print(retu)

    快看,是不是成功獲取到資料了呢?怎麼樣,學會沒?點一波關注吧(*^__^*) 

    玩轉selenium 教你怎麼讓selenium執行js程式碼

    玩轉selenium 教你怎麼讓selenium執行js程式碼